UFW Essentials: общие правила и команды брандмауэра
Введение
UFW (несложный брандмауэр) — это инструмент настройки брандмауэра, работающий поверх iptables
, включенный по умолчанию в дистрибутивы Ubuntu. Он предоставляет оптимизированный интерфейс для настройки общих вариантов использования брандмауэра через командную строку.
Это руководство в стиле шпаргалки содержит краткий справочник по распространенным вариантам использования и командам UFW, включая примеры того, как разрешать и блокировать службы по порту, сетевому интерфейсу и исходному IP-адресу.
Как пользоваться этим руководством
- Это руководство представлено в формате шпаргалки с автономными фрагментами командной строки.
- Перейти к любому разделу, имеющему отношение к задаче, которую вы пытаетесь выполнить.
- Когда вы видите выделенный текст в командах этого руководства, имейте в виду, что этот текст должен относиться к IP-адресам из вашей собственной сети.
Помните, что вы можете проверить текущий набор правил UFW с помощью sudo ufw status
или sudo ufw status verbose
.
Проверить статус UFW
Чтобы проверить, включен ли ufw
, запустите:
- sudo ufw status
OutputStatus: inactive
Вывод покажет, активен ли ваш брандмауэр или нет.
Включить UFW
Если вы получили сообщение Status: inactive
при запуске ufw status
, это означает, что брандмауэр еще не включен в системе. Вам нужно будет запустить команду, чтобы включить его.
По умолчанию при включении UFW блокирует внешний доступ ко всем портам на сервере. На практике это означает, что если вы подключитесь к серверу через SSH и включите ufw
перед тем, как разрешить доступ через порт SSH, вы будете отключены. Убедитесь, что вы следуете разделу о том, как включить доступ по SSH в этом руководстве, прежде чем включать брандмауэр, если это ваш случай.
Чтобы включить UFW в вашей системе, запустите:
- sudo ufw enable
Вы увидите такой вывод:
OutputFirewall is active and enabled on system startup
Чтобы увидеть, что в данный момент заблокировано или разрешено, вы можете использовать параметр verbose
при запуске ufw status
следующим образом:
- sudo ufw status
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
Отключить UFW
Если по какой-то причине вам нужно отключить UFW, вы можете сделать это с помощью следующей команды:
- sudo ufw disable
Имейте в виду, что эта команда полностью отключит службу брандмауэра в вашей системе.
Заблокировать IP-адрес
Чтобы заблокировать все сетевые подключения, исходящие с определенного IP-адреса, выполните следующую команду, заменив выделенный IP-адрес IP-адресом, который вы хотите заблокировать:
- sudo ufw deny from 203.0.113.100
OutputRule added
В этом примере from 203.0.113.100
указывает исходный IP-адрес \203.0.113.100.
Если вы сейчас запустите sudo ufw status
, вы увидите, что указанный IP-адрес указан как запрещенный:
OutputStatus: active
To Action From
-- ------ ----
Anywhere DENY 203.0.113.100
Все соединения, входящие и исходящие, блокируются для указанного IP-адреса.
Заблокировать подсеть
Если вам нужно заблокировать всю подсеть, вы можете использовать адрес подсети в качестве параметра from
в команде ufw deny
. Это заблокирует все IP-адреса в примере подсети 203.0.113.0/24
:
- sudo ufw deny from 203.0.113.0/24
OutputRule added
Блокировать входящие подключения к сетевому интерфейсу
Чтобы заблокировать входящие подключения с определенного IP-адреса к определенному сетевому интерфейсу, выполните следующую команду, заменив выделенный IP-адрес IP-адресом, который вы хотите заблокировать:
- sudo ufw deny in on eth0 from 203.0.113.100
OutputRule added
Параметр in
указывает ufw
применять правило только для входящих подключений, а параметр on eth0
указывает, что правило применяется только для eth0
интерфейс. Это может быть полезно, если у вас есть система с несколькими сетевыми интерфейсами (включая виртуальные) и вам нужно заблокировать внешний доступ к некоторым из этих интерфейсов, но не ко всем.
Разрешить IP-адрес
Чтобы разрешить все сетевые подключения, исходящие с определенного IP-адреса, выполните следующую команду, заменив выделенный IP-адрес IP-адресом, которому вы хотите разрешить доступ:
- sudo ufw allow from 203.0.113.101
OutputRule added
Если вы сейчас запустите sudo ufw status
, вы увидите вывод, похожий на этот, со словом ALLOW
рядом с только что добавленным IP-адресом.
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere ALLOW 203.0.113.101
Вы также можете разрешить подключения из всей подсети, указав соответствующую маску подсети для хоста, например 203.0.113.0/24
.
Разрешить входящие подключения к сетевому интерфейсу
Чтобы разрешить входящие подключения с определенного IP-адреса к определенному сетевому интерфейсу, выполните следующую команду, заменив выделенный IP-адрес IP-адресом, который вы хотите разрешить:
- sudo ufw allow in on eth0 from 203.0.113.102
OutputRule added
Параметр in
указывает ufw
применять правило только для входящих подключений, а параметр on eth0
указывает, что правило применяется только для eth0
интерфейс.
Если вы сейчас запустите sudo ufw status
, вы увидите примерно такой вывод:
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
Удалить правило UFW
Чтобы удалить правило, которое вы ранее установили в UFW, используйте ufw delete
, затем правило (разрешить
или запретить
) и целевую спецификацию. В следующем примере удаляется ранее установленное правило, разрешающее все подключения с IP-адреса 203.0.113.101
:
- sudo ufw delete allow from 203.0.113.101
OutputRule deleted
Другой способ указать, какое правило вы хотите удалить, — указать идентификатор правила. Эту информацию можно получить с помощью следующей команды:
- sudo ufw status numbered
OutputStatus: active
To Action From
-- ------ ----
[ 1] Anywhere DENY IN 203.0.113.100
[ 2] Anywhere on eth0 ALLOW IN 203.0.113.102
Из вывода видно, что есть два активных правила. Первое правило с выделенными значениями запрещает все подключения с IP-адреса 203.0.113.100
. Второе правило разрешает соединения на интерфейсе eth0
с IP-адреса 203.0.113.102
.
Поскольку по умолчанию UFW уже блокирует весь внешний доступ, если это явно не разрешено, первое правило является избыточным, поэтому его можно удалить. Чтобы удалить правило по его идентификатору, запустите:
- sudo ufw delete 1
Вам будет предложено подтвердить операцию и убедиться, что предоставленный вами идентификатор относится к правильному правилу, которое вы хотите удалить.
OutputDeleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
Если вы снова перечислите свои правила с помощью sudo ufw status
, вы увидите, что правило было удалено.
Получение списка доступных профилей приложений
После установки приложения, использующие сетевые подключения, обычно настраивают профиль UFW, который можно использовать для разрешения подключения с внешних адресов. Часто это то же самое, что и запуск ufw allow from
, с тем преимуществом, что предоставляется ярлык, который абстрагирует конкретные номера портов, которые использует служба, и предоставляет удобную номенклатуру для упомянутых служб.
Чтобы узнать, какие профили доступны в настоящее время, выполните следующее:
- sudo ufw app list
Если вы установили службу, например веб-сервер или другое программное обеспечение, зависящее от сети, а профиль не был доступен в UFW, сначала убедитесь, что служба включена. Для удаленных серверов обычно доступен OpenSSH:
OutputAvailable applications:
OpenSSH
Включить профиль приложения
Чтобы включить профиль приложения UFW, запустите ufw allow
, а затем имя профиля приложения, которое вы хотите включить, которое вы можете получить с помощью команды sudo ufw app list
. В следующем примере мы включаем профиль OpenSSH, который разрешает все входящие соединения SSH через порт SSH по умолчанию.
- sudo ufw allow “OpenSSH”
OutputRule added
Rule added (v6)
Не забывайте заключать в кавычки имена профилей, состоящие из нескольких слов, например Nginx HTTPS
.
Отключить профиль приложения
Чтобы отключить профиль приложения, который вы ранее настроили в UFW, вам необходимо удалить соответствующее правило. Например, рассмотрите следующий вывод из sudo ufw status
:
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Эти выходные данные показывают, что профиль приложения Nginx Full
в настоящее время включен, разрешая любые и все подключения к веб-серверу как через HTTP, так и через HTTPS. Если вы хотите разрешить HTTPS-запросы только от и к вашему веб-серверу, вам нужно сначала включить наиболее ограничительное правило, которым в данном случае будет Nginx HTTPS
, а затем отключить текущий активное правило Nginx Full
:
- sudo ufw allow "Nginx HTTPS"
- sudo ufw delete allow "Nginx Full"
Помните, что вы можете перечислить все доступные профили приложений с помощью sudo ufw app list
.
Разрешить SSH
При работе с удаленными серверами вы должны убедиться, что порт SSH открыт для соединений, чтобы вы могли удаленно войти на свой сервер.
Следующая команда активирует профиль приложения OpenSSH UFW и разрешит все подключения к SSH-порту по умолчанию на сервере:
- sudo ufw allow OpenSSH
OutputRule added
Rule added (v6)
Альтернативный синтаксис, менее удобный для пользователя, заключается в указании точного номера порта службы SSH, который по умолчанию обычно имеет значение 22
:
- sudo ufw allow 22
OutputRule added
Rule added (v6)
Разрешить входящий SSH с определенного IP-адреса или подсети
Чтобы разрешить входящие подключения с определенного IP-адреса или подсети, вы должны включить директиву from
для определения источника подключения. Это потребует, чтобы вы также указали адрес назначения с параметром to
. Чтобы заблокировать это правило только для SSH, вы ограничите proto
(протокол) значением tcp
, а затем используете параметр port
и установите для него значение 22
, порт SSH по умолчанию.
Следующая команда разрешит только подключения SSH с IP-адреса 203.0.113.103
:
- sudo ufw allow from 203.0.113.103 proto tcp to any port 22
OutputRule added
Вы также можете использовать адрес подсети в качестве параметра from
, чтобы разрешить входящие SSH-соединения из всей сети:
- sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
OutputRule added
Разрешить входящую Rsync с определенного IP-адреса или подсети
Программа Rsync, работающая на порту 873
, может использоваться для передачи файлов с одного компьютера на другой.
Чтобы разрешить входящие соединения rsync
с определенного IP-адреса или подсети, используйте параметр from
, чтобы указать исходный IP-адрес, и параметр port
, чтобы установить порт назначения 873
.
- sudo ufw allow from 203.0.113.103 to any port 873
OutputRule added
Чтобы вся подсеть 203.0.113.0/24
могла rsync
синхронизироваться с вашим сервером, запустите:
- sudo ufw allow from 203.0.113.0/24 to any port 873
OutputRule added
Разрешить Nginx HTTP/HTTPS
После установки веб-сервер Nginx устанавливает на сервере несколько разных профилей UFW. После того, как вы установили и включили Nginx в качестве службы, выполните следующую команду, чтобы определить, какие профили доступны:
- sudo ufw app list | grep Nginx
Output Nginx Full
Nginx HTTP
Nginx HTTPS
Чтобы включить HTTP- и HTTPS-трафик, выберите Nginx Full
. В противном случае выберите либо Nginx HTTP
, чтобы разрешить только HTTP, либо Nginx HTTPS
, чтобы разрешить только HTTPS.
Следующая команда разрешит трафик HTTP и HTTPS на сервере (порты 80
и 443
):
- sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)
Разрешить Apache HTTP/HTTPS
После установки веб-сервер Apache устанавливает на сервере несколько разных профилей UFW. После того, как вы установили и включили Apache в качестве службы, выполните следующую команду, чтобы определить, какие профили доступны:
- sudo ufw app list | grep Apache
Output Apache
Apache Full
Apache Secure
Чтобы включить HTTP- и HTTPS-трафик, выберите Apache Full
. В противном случае выберите либо Apache
для HTTP, либо Apache Secure
для HTTPS.
Следующая команда разрешит трафик HTTP и HTTPS на сервере (порты 80
и 443
):
- sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)
Разрешить все входящие HTTP (порт 80)
Веб-серверы, такие как Apache и Nginx, обычно прослушивают HTTP-запросы через порт 80
. Если ваша политика по умолчанию для входящего трафика настроена на отбрасывание или отклонение, вам необходимо создать правило UFW, чтобы разрешить внешний доступ к порту 80
. В качестве параметра этой команды можно использовать либо номер порта, либо имя службы (http
).
Чтобы разрешить все входящие соединения HTTP (порт 80
), запустите:
- sudo ufw allow http
OutputRule added
Rule added (v6)
Альтернативный синтаксис — указать номер порта службы HTTP:
- sudo ufw allow 80
OutputRule added
Rule added (v6)
Разрешить все входящие HTTPS (порт 443)
HTTPS обычно работает на порту 443
. Если ваша политика по умолчанию для входящего трафика настроена на отбрасывание или отклонение, вам необходимо создать правило UFW, чтобы разрешить внешний доступ к порту 443
. В качестве параметра этой команды можно использовать либо номер порта, либо имя службы (https
).
Чтобы разрешить все входящие соединения HTTPS (порт 443
), запустите:
- sudo ufw allow https
OutputRule added
Rule added (v6)
Альтернативный синтаксис — указать номер порта службы HTTPS:
- sudo ufw allow 443
OutputRule added
Rule added (v6)
Разрешить все входящие HTTP и HTTPS
Если вы хотите разрешить трафик HTTP и HTTPS, вы можете создать одно правило, разрешающее оба порта. Это использование требует, чтобы вы также определили протокол с параметром proto
, который в этом случае должен быть установлен на tcp
.
Чтобы разрешить все входящие соединения HTTP и HTTPS (порты 80
и 443
), запустите:
- sudo ufw allow proto tcp from any to any port 80,443
OutputRule added
Rule added (v6)
Разрешить подключение к MySQL с определенного IP-адреса или подсети
MySQL прослушивает клиентские подключения через порт 3306
. Если ваш сервер базы данных MySQL используется клиентом на удаленном сервере, вам необходимо создать правило UFW, чтобы разрешить такой доступ.
Чтобы разрешить входящие соединения MySQL с определенного IP-адреса или подсети, используйте параметр from
, чтобы указать исходный IP-адрес, и параметр port
, чтобы установить порт назначения 3306.
.
Следующая команда позволит IP-адресу 203.0.113.103
подключиться к порту MySQL сервера:
- sudo ufw allow from 203.0.113.103 to any port 3306
OutputRule added
Чтобы вся подсеть 203.0.113.0/24
могла подключаться к вашему серверу MySQL, выполните:
- sudo ufw allow from 203.0.113.0/24 to any port 3306
OutputRule added
Разрешить подключение PostgreSQL с определенного IP-адреса или подсети
PostgreSQL прослушивает клиентские подключения через порт 5432
. Если ваш сервер базы данных PostgreSQL используется клиентом на удаленном сервере, вы должны обязательно разрешить этот трафик.
Чтобы разрешить входящие соединения PostgreSQL с определенного IP-адреса или подсети, укажите источник с параметром from
и установите порт 5432
:
- sudo ufw allow from 203.0.113.103 to any port 5432
OutputRule added
Чтобы вся подсеть 203.0.113.0/24
могла подключаться к вашему серверу PostgreSQL, выполните:
- sudo ufw allow from 203.0.113.0/24 to any port 5432
OutputRule added
Блокировать исходящую SMTP-почту
Почтовые серверы, такие как Sendmail и Postfix, обычно используют порт 25
для SMTP-трафика. Если ваш сервер не должен отправлять исходящую почту, вы можете заблокировать такой трафик. Чтобы заблокировать исходящие SMTP-соединения, выполните:
- sudo ufw deny out 25
OutputRule added
Rule added (v6)
Это настраивает ваш брандмауэр так, чтобы он пропускал весь исходящий трафик через порт 25
. Если вам нужно отклонить исходящие соединения через другой номер порта, вы можете повторить эту команду и заменить 25
номером порта, который вы хотите заблокировать.
Заключение
UFW — это мощный инструмент, который при правильной настройке может значительно повысить безопасность ваших серверов. В этом справочном руководстве рассматриваются некоторые распространенные правила UFW, которые часто используются для настройки брандмауэра в Ubuntu.
Большинство команд в этом руководстве можно адаптировать для различных вариантов использования и сценариев, изменив такие параметры, как исходный IP-адрес и/или порт назначения. Для получения более подробной информации о каждом параметре команды и доступных модификаторах вы можете использовать утилиту man
для проверки руководства UFW:
- man ufw
Официальная страница UFW в документации Ubuntu — это еще один ресурс, который вы можете использовать в качестве справочного материала для более продвинутых вариантов использования и примеров.