Поиск по сайту:

UFW Essentials: общие правила и команды брандмауэра


Введение

UFW (несложный брандмауэр) — это инструмент настройки брандмауэра, работающий поверх iptables, включенный по умолчанию в дистрибутивы Ubuntu. Он предоставляет оптимизированный интерфейс для настройки общих вариантов использования брандмауэра через командную строку.

Это руководство в стиле шпаргалки содержит краткий справочник по распространенным вариантам использования и командам UFW, включая примеры того, как разрешать и блокировать службы по порту, сетевому интерфейсу и исходному IP-адресу.

Как пользоваться этим руководством

  • Это руководство представлено в формате шпаргалки с автономными фрагментами командной строки.
  • Перейти к любому разделу, имеющему отношение к задаче, которую вы пытаетесь выполнить.
  • Когда вы видите выделенный текст в командах этого руководства, имейте в виду, что этот текст должен относиться к IP-адресам из вашей собственной сети.

Помните, что вы можете проверить текущий набор правил UFW с помощью sudo ufw status или sudo ufw status verbose.

Проверить статус UFW

Чтобы проверить, включен ли ufw, запустите:

  1. sudo ufw status
Output
Status: inactive

Вывод покажет, активен ли ваш брандмауэр или нет.

Включить UFW

Если вы получили сообщение Status: inactive при запуске ufw status, это означает, что брандмауэр еще не включен в системе. Вам нужно будет запустить команду, чтобы включить его.

По умолчанию при включении UFW блокирует внешний доступ ко всем портам на сервере. На практике это означает, что если вы подключитесь к серверу через SSH и включите ufw перед тем, как разрешить доступ через порт SSH, вы будете отключены. Убедитесь, что вы следуете разделу о том, как включить доступ по SSH в этом руководстве, прежде чем включать брандмауэр, если это ваш случай.

Чтобы включить UFW в вашей системе, запустите:

  1. sudo ufw enable

Вы увидите такой вывод:

Output
Firewall is active and enabled on system startup

Чтобы увидеть, что в данный момент заблокировано или разрешено, вы можете использовать параметр verbose при запуске ufw status следующим образом:

  1. sudo ufw status
Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip

Отключить UFW

Если по какой-то причине вам нужно отключить UFW, вы можете сделать это с помощью следующей команды:

  1. sudo ufw disable

Имейте в виду, что эта команда полностью отключит службу брандмауэра в вашей системе.

Заблокировать IP-адрес

Чтобы заблокировать все сетевые подключения, исходящие с определенного IP-адреса, выполните следующую команду, заменив выделенный IP-адрес IP-адресом, который вы хотите заблокировать:

  1. sudo ufw deny from 203.0.113.100
Output
Rule added

В этом примере from 203.0.113.100 указывает исходный IP-адрес \203.0.113.100.

Если вы сейчас запустите sudo ufw status, вы увидите, что указанный IP-адрес указан как запрещенный:

Output
Status: active To Action From -- ------ ---- Anywhere DENY 203.0.113.100

Все соединения, входящие и исходящие, блокируются для указанного IP-адреса.

Заблокировать подсеть

Если вам нужно заблокировать всю подсеть, вы можете использовать адрес подсети в качестве параметра from в команде ufw deny. Это заблокирует все IP-адреса в примере подсети 203.0.113.0/24:

  1. sudo ufw deny from 203.0.113.0/24
Output
Rule added

Блокировать входящие подключения к сетевому интерфейсу

Чтобы заблокировать входящие подключения с определенного IP-адреса к определенному сетевому интерфейсу, выполните следующую команду, заменив выделенный IP-адрес IP-адресом, который вы хотите заблокировать:

  1. sudo ufw deny in on eth0 from 203.0.113.100
Output
Rule added

Параметр in указывает ufw применять правило только для входящих подключений, а параметр on eth0 указывает, что правило применяется только для eth0 интерфейс. Это может быть полезно, если у вас есть система с несколькими сетевыми интерфейсами (включая виртуальные) и вам нужно заблокировать внешний доступ к некоторым из этих интерфейсов, но не ко всем.

Разрешить IP-адрес

Чтобы разрешить все сетевые подключения, исходящие с определенного IP-адреса, выполните следующую команду, заменив выделенный IP-адрес IP-адресом, которому вы хотите разрешить доступ:

  1. sudo ufw allow from 203.0.113.101
Output
Rule added

Если вы сейчас запустите sudo ufw status, вы увидите вывод, похожий на этот, со словом ALLOW рядом с только что добавленным IP-адресом.

Output
Status: active To Action From -- ------ ---- ... Anywhere ALLOW 203.0.113.101

Вы также можете разрешить подключения из всей подсети, указав соответствующую маску подсети для хоста, например 203.0.113.0/24.

Разрешить входящие подключения к сетевому интерфейсу

Чтобы разрешить входящие подключения с определенного IP-адреса к определенному сетевому интерфейсу, выполните следующую команду, заменив выделенный IP-адрес IP-адресом, который вы хотите разрешить:

  1. sudo ufw allow in on eth0 from 203.0.113.102
Output
Rule added

Параметр in указывает ufw применять правило только для входящих подключений, а параметр on eth0 указывает, что правило применяется только для eth0 интерфейс.

Если вы сейчас запустите sudo ufw status, вы увидите примерно такой вывод:

Output
Status: active To Action From -- ------ ---- ... Anywhere on eth0 ALLOW 203.0.113.102

Удалить правило UFW

Чтобы удалить правило, которое вы ранее установили в UFW, используйте ufw delete, затем правило (разрешить или запретить) и целевую спецификацию. В следующем примере удаляется ранее установленное правило, разрешающее все подключения с IP-адреса 203.0.113.101:

  1. sudo ufw delete allow from 203.0.113.101
Output
Rule deleted

Другой способ указать, какое правило вы хотите удалить, — указать идентификатор правила. Эту информацию можно получить с помощью следующей команды:

  1. sudo ufw status numbered
Output
Status: 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 уже блокирует весь внешний доступ, если это явно не разрешено, первое правило является избыточным, поэтому его можно удалить. Чтобы удалить правило по его идентификатору, запустите:

  1. sudo ufw delete 1

Вам будет предложено подтвердить операцию и убедиться, что предоставленный вами идентификатор относится к правильному правилу, которое вы хотите удалить.

Output
Deleting: deny from 203.0.113.100 Proceed with operation (y|n)? y Rule deleted

Если вы снова перечислите свои правила с помощью sudo ufw status, вы увидите, что правило было удалено.

Получение списка доступных профилей приложений

После установки приложения, использующие сетевые подключения, обычно настраивают профиль UFW, который можно использовать для разрешения подключения с внешних адресов. Часто это то же самое, что и запуск ufw allow from, с тем преимуществом, что предоставляется ярлык, который абстрагирует конкретные номера портов, которые использует служба, и предоставляет удобную номенклатуру для упомянутых служб.

Чтобы узнать, какие профили доступны в настоящее время, выполните следующее:

  1. sudo ufw app list

Если вы установили службу, например веб-сервер или другое программное обеспечение, зависящее от сети, а профиль не был доступен в UFW, сначала убедитесь, что служба включена. Для удаленных серверов обычно доступен OpenSSH:

Output
Available applications: OpenSSH

Включить профиль приложения

Чтобы включить профиль приложения UFW, запустите ufw allow, а затем имя профиля приложения, которое вы хотите включить, которое вы можете получить с помощью команды sudo ufw app list. В следующем примере мы включаем профиль OpenSSH, который разрешает все входящие соединения SSH через порт SSH по умолчанию.

  1. sudo ufw allow “OpenSSH”
Output
Rule added Rule added (v6)

Не забывайте заключать в кавычки имена профилей, состоящие из нескольких слов, например Nginx HTTPS.

Отключить профиль приложения

Чтобы отключить профиль приложения, который вы ранее настроили в UFW, вам необходимо удалить соответствующее правило. Например, рассмотрите следующий вывод из sudo ufw status:

  1. sudo ufw status
Output
Status: 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:

  1. sudo ufw allow "Nginx HTTPS"
  2. sudo ufw delete allow "Nginx Full"

Помните, что вы можете перечислить все доступные профили приложений с помощью sudo ufw app list.

Разрешить SSH

При работе с удаленными серверами вы должны убедиться, что порт SSH открыт для соединений, чтобы вы могли удаленно войти на свой сервер.

Следующая команда активирует профиль приложения OpenSSH UFW и разрешит все подключения к SSH-порту по умолчанию на сервере:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

Альтернативный синтаксис, менее удобный для пользователя, заключается в указании точного номера порта службы SSH, который по умолчанию обычно имеет значение 22:

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

Разрешить входящий SSH с определенного IP-адреса или подсети

Чтобы разрешить входящие подключения с определенного IP-адреса или подсети, вы должны включить директиву from для определения источника подключения. Это потребует, чтобы вы также указали адрес назначения с параметром to. Чтобы заблокировать это правило только для SSH, вы ограничите proto (протокол) значением tcp, а затем используете параметр port и установите для него значение 22, порт SSH по умолчанию.

Следующая команда разрешит только подключения SSH с IP-адреса 203.0.113.103:

  1. sudo ufw allow from 203.0.113.103 proto tcp to any port 22
Output
Rule added

Вы также можете использовать адрес подсети в качестве параметра from, чтобы разрешить входящие SSH-соединения из всей сети:

  1. sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
Output
Rule added

Разрешить входящую Rsync с определенного IP-адреса или подсети

Программа Rsync, работающая на порту 873, может использоваться для передачи файлов с одного компьютера на другой.

Чтобы разрешить входящие соединения rsync с определенного IP-адреса или подсети, используйте параметр from, чтобы указать исходный IP-адрес, и параметр port, чтобы установить порт назначения 873.

  1. sudo ufw allow from 203.0.113.103 to any port 873
Output
Rule added

Чтобы вся подсеть 203.0.113.0/24 могла rsync синхронизироваться с вашим сервером, запустите:

  1. sudo ufw allow from 203.0.113.0/24 to any port 873
Output
Rule added

Разрешить Nginx HTTP/HTTPS

После установки веб-сервер Nginx устанавливает на сервере несколько разных профилей UFW. После того, как вы установили и включили Nginx в качестве службы, выполните следующую команду, чтобы определить, какие профили доступны:

  1. 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):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

Разрешить Apache HTTP/HTTPS

После установки веб-сервер Apache устанавливает на сервере несколько разных профилей UFW. После того, как вы установили и включили Apache в качестве службы, выполните следующую команду, чтобы определить, какие профили доступны:

  1. 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):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

Разрешить все входящие HTTP (порт 80)

Веб-серверы, такие как Apache и Nginx, обычно прослушивают HTTP-запросы через порт 80. Если ваша политика по умолчанию для входящего трафика настроена на отбрасывание или отклонение, вам необходимо создать правило UFW, чтобы разрешить внешний доступ к порту 80. В качестве параметра этой команды можно использовать либо номер порта, либо имя службы (http).

Чтобы разрешить все входящие соединения HTTP (порт 80), запустите:

  1. sudo ufw allow http
Output
Rule added Rule added (v6)

Альтернативный синтаксис — указать номер порта службы HTTP:

  1. sudo ufw allow 80
Output
Rule added Rule added (v6)

Разрешить все входящие HTTPS (порт 443)

HTTPS обычно работает на порту 443. Если ваша политика по умолчанию для входящего трафика настроена на отбрасывание или отклонение, вам необходимо создать правило UFW, чтобы разрешить внешний доступ к порту 443. В качестве параметра этой команды можно использовать либо номер порта, либо имя службы (https).

Чтобы разрешить все входящие соединения HTTPS (порт 443), запустите:

  1. sudo ufw allow https
Output
Rule added Rule added (v6)

Альтернативный синтаксис — указать номер порта службы HTTPS:

  1. sudo ufw allow 443
Output
Rule added Rule added (v6)

Разрешить все входящие HTTP и HTTPS

Если вы хотите разрешить трафик HTTP и HTTPS, вы можете создать одно правило, разрешающее оба порта. Это использование требует, чтобы вы также определили протокол с параметром proto, который в этом случае должен быть установлен на tcp.

Чтобы разрешить все входящие соединения HTTP и HTTPS (порты 80 и 443), запустите:

  1. sudo ufw allow proto tcp from any to any port 80,443
Output
Rule added Rule added (v6)

Разрешить подключение к MySQL с определенного IP-адреса или подсети

MySQL прослушивает клиентские подключения через порт 3306. Если ваш сервер базы данных MySQL используется клиентом на удаленном сервере, вам необходимо создать правило UFW, чтобы разрешить такой доступ.

Чтобы разрешить входящие соединения MySQL с определенного IP-адреса или подсети, используйте параметр from, чтобы указать исходный IP-адрес, и параметр port, чтобы установить порт назначения 3306. .

Следующая команда позволит IP-адресу 203.0.113.103 подключиться к порту MySQL сервера:

  1. sudo ufw allow from 203.0.113.103 to any port 3306
Output
Rule added

Чтобы вся подсеть 203.0.113.0/24 могла подключаться к вашему серверу MySQL, выполните:

  1. sudo ufw allow from 203.0.113.0/24 to any port 3306
Output
Rule added

Разрешить подключение PostgreSQL с определенного IP-адреса или подсети

PostgreSQL прослушивает клиентские подключения через порт 5432. Если ваш сервер базы данных PostgreSQL используется клиентом на удаленном сервере, вы должны обязательно разрешить этот трафик.

Чтобы разрешить входящие соединения PostgreSQL с определенного IP-адреса или подсети, укажите источник с параметром from и установите порт 5432:

  1. sudo ufw allow from 203.0.113.103 to any port 5432
Output
Rule added

Чтобы вся подсеть 203.0.113.0/24 могла подключаться к вашему серверу PostgreSQL, выполните:

  1. sudo ufw allow from 203.0.113.0/24 to any port 5432
Output
Rule added

Блокировать исходящую SMTP-почту

Почтовые серверы, такие как Sendmail и Postfix, обычно используют порт 25 для SMTP-трафика. Если ваш сервер не должен отправлять исходящую почту, вы можете заблокировать такой трафик. Чтобы заблокировать исходящие SMTP-соединения, выполните:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

Это настраивает ваш брандмауэр так, чтобы он пропускал весь исходящий трафик через порт 25. Если вам нужно отклонить исходящие соединения через другой номер порта, вы можете повторить эту команду и заменить 25 номером порта, который вы хотите заблокировать.

Заключение

UFW — это мощный инструмент, который при правильной настройке может значительно повысить безопасность ваших серверов. В этом справочном руководстве рассматриваются некоторые распространенные правила UFW, которые часто используются для настройки брандмауэра в Ubuntu.

Большинство команд в этом руководстве можно адаптировать для различных вариантов использования и сценариев, изменив такие параметры, как исходный IP-адрес и/или порт назначения. Для получения более подробной информации о каждом параметре команды и доступных модификаторах вы можете использовать утилиту man для проверки руководства UFW:

  1. man ufw

Официальная страница UFW в документации Ubuntu — это еще один ресурс, который вы можете использовать в качестве справочного материала для более продвинутых вариантов использования и примеров.