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

Введение

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

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

Как использовать этот справочник

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

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

Развертывайте свои клиентские приложения из GitHub с использованием DigitalOcean App Platform. Позвольте DigitalOcean масштабировать ваше приложение.

Проверка статуса 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-адрес на тот, который вы хотите заблокировать:

  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, вы увидите вывод, аналогичный этому, где рядом с добавленным вами IP-адресом будет слово ALLOW.

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, за которым следует правило (allow или deny) и целевая спецификация. В следующем примере будет удалено правило, ранее установленное для разрешения всех подключений с 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.
Следующая команда разрешит только соединения Rsync с IP-адреса 203.0.113.103:

  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)

Разрешить входящий HTTP / HTTPS для Apache

При установке веб-сервера 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 – это еще один ресурс, который вы можете использовать в качестве справочного материала для более продвинутых случаев использования и примеров.

Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands