Введение
UFW (uncomplicated firewall) – это инструмент конфигурации брандмауэра, который работает поверх iptables
и включен по умолчанию в дистрибутивы Ubuntu. Он предоставляет упрощенный интерфейс для настройки общих случаев использования брандмауэра через командную строку.
Этот шпаргалочный справочник предоставляет быструю справку по общим случаям использования UFW и командам, включая примеры того, как разрешить и блокировать службы по порту, сетевому интерфейсу и IP-адресу источника.
Как использовать этот справочник
- Этот справочник представлен в формате шпаргалки с самодостаточными фрагментами командной строки.
- Перейдите к любому разделу, который является актуальным для задачи, которую вы пытаетесь выполнить.
- Когда вы видите выделенный текст в командах этого руководства, имейте в виду, что этот текст должен относиться к IP-адресам из вашей сети.
Помните, что вы можете проверить текущий набор правил UFW с помощью sudo ufw status
или sudo ufw status verbose
.
Развертывайте свои клиентские приложения из GitHub с использованием DigitalOcean App Platform. Позвольте DigitalOcean масштабировать ваше приложение.
Проверка статуса UFW
Чтобы проверить, включен ли ufw
, выполните:
OutputStatus: inactive
Выходные данные покажут, активен ли ваш брандмауэр или нет.
Включить UFW
Если вы получили сообщение Status: inactive
при выполнении ufw status
, это означает, что брандмауэр еще не включен в системе. Вам нужно выполнить команду для его включения.
По умолчанию, когда UFW включен, внешний доступ ко всем портам на сервере блокируется. На практике это означает, что если вы подключены к серверу через SSH и включите ufw
до разрешения доступа через порт SSH, вы будете отключены. Убедитесь, что вы следуете разделу о как включить доступ по SSH в этом руководстве, прежде чем включить брандмауэр, если это ваш случай.
Чтобы включить UFW на вашей системе, выполните:
Вы увидите вывод, подобный этому:
OutputFirewall is active and enabled on system startup
Чтобы увидеть, что в данный момент заблокировано или разрешено, вы можете использовать параметр verbose
при выполнении ufw status
, следующим образом:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
Отключить UFW
Если по какой-то причине вам нужно отключить UFW, вы можете сделать это следующей командой:
Обратите внимание, что эта команда полностью отключит службу брандмауэра на вашей системе.
Заблокировать IP-адрес
Чтобы заблокировать все сетевые соединения, исходящие с определенного IP-адреса, выполните следующую команду, заменив выделенный IP-адрес на тот, который вы хотите заблокировать:
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
:
OutputRule added
Заблокировать входящие соединения к сетевому интерфейсу
Чтобы заблокировать входящие подключения с определенного IP-адреса к определенному сетевому интерфейсу, выполните следующую команду, заменив выделенный IP-адрес на IP-адрес, который вы хотите заблокировать:
OutputRule added
Параметр in
указывает ufw
применить правило только для входящих соединений, а параметр on eth0
указывает, что правило применяется только для интерфейса eth0
. Это может быть полезно, если у вас есть система с несколькими сетевыми интерфейсами (включая виртуальные) и вам нужно заблокировать внешний доступ к некоторым из этих интерфейсов, но не ко всем.
Разрешить IP-адрес
Чтобы разрешить все сетевые подключения, исходящие из определенного IP-адреса, выполните следующую команду, заменив выделенный IP-адрес на IP-адрес, который вы хотите разрешить:
OutputRule added
Если сейчас выполнить sudo ufw status
, вы увидите вывод, аналогичный этому, где рядом с добавленным вами IP-адресом будет слово ALLOW
.
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere ALLOW 203.0.113.101
Также можно разрешить подключения из целой подсети, указав соответствующую маску подсети для хоста, например, 203.0.113.0/24
.
Разрешить входящие соединения к сетевому интерфейсу
Чтобы разрешить входящие подключения с определенного IP-адреса к определенному сетевому интерфейсу, выполните следующую команду, заменив выделенный IP-адрес на нужный вам IP-адрес:
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
, за которым следует правило (allow
или deny
) и целевая спецификация. В следующем примере будет удалено правило, ранее установленное для разрешения всех подключений с IP-адреса 203.0.113.101
:
OutputRule deleted
Другой способ указать, какое правило вы хотите удалить, – предоставить идентификатор правила. Эту информацию можно получить с помощью следующей команды:
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 уже блокирует весь внешний доступ, если он не явно разрешен, первое правило избыточно, и его можно удалить. Чтобы удалить правило по его идентификатору, выполните:
Вам будет предложено подтвердить операцию и убедиться, что предоставленный вами идентификатор относится к правильному правилу, которое вы хотите удалить.
OutputDeleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
Если вы снова перечислите свои правила с помощью sudo ufw status
, вы увидите, что правило было удалено.
Перечислить доступные профили приложений
При установке приложений, которые зависят от сетевого взаимодействия, обычно настраивается профиль UFW, который вы можете использовать для разрешения соединений с внешних адресов. Это часто эквивалентно выполнению ufw allow from
, с преимуществом предоставления ярлыка, который абстрагирует конкретные номера портов, используемые сервисом, и обеспечивает понятную номенклатуру для ссылок на сервисы.
Чтобы узнать, какие профили в настоящее время доступны, выполните следующее:
Если вы установили службу, такую как веб-сервер или другое программное обеспечение, зависящее от сети, и профиль не был доступен в UFW, сначала убедитесь, что служба включена. Для удаленных серверов обычно доступен OpenSSH:
OutputAvailable applications:
OpenSSH
Включить профиль приложения
Чтобы включить профиль приложения UFW, выполните команду ufw allow
, за которой следует название профиля приложения, который вы хотите включить. Получить его можно с помощью команды sudo ufw app list
. В следующем примере мы включаем профиль OpenSSH, который позволит принимать все входящие SSH-соединения на стандартном порту SSH.
OutputRule added
Rule added (v6)
Не забудьте заключить в кавычки названия профилей, состоящие из нескольких слов, например, Nginx HTTPS
.
Отключить профиль приложения
Чтобы отключить профиль приложения, который вы ранее настроили в UFW, вам нужно удалить соответствующее правило. Например, рассмотрим следующий вывод команды 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 app list
.
Разрешить SSH
При работе с удаленными серверами вам следует убедиться, что порт SSH открыт для подключений, чтобы вы могли удаленно войти на свой сервер.
Следующая команда активирует профиль приложения OpenSSH в UFW и разрешает все подключения к стандартному порту SSH на сервере:
OutputRule added
Rule added (v6)
Хотя это менее удобно для пользователя, альтернативный синтаксис заключается в указании точного номера порта службы SSH, который обычно устанавливается по умолчанию на 22
:
OutputRule added
Rule added (v6)
Разрешить входящее подключение SSH с определенного IP-адреса или подсети
Чтобы разрешить входящие подключения с определенного IP-адреса или подсети, вам следует включить директиву from
, чтобы определить источник подключения. Для этого вам также потребуется указать адрес назначения с помощью параметра to
. Чтобы ограничить это правило только для SSH, вы ограничите proto
(протокол) до tcp
, а затем используете параметр port
и устанавливаете его в 22
, стандартный порт SSH.
Следующая команда позволит только SSH-соединения с IP-адреса 203.0.113.103
:
OutputRule added
Вы также можете использовать сетевой адрес в качестве параметра from
, чтобы разрешить входящие SSH-соединения с целой сети:
OutputRule added
Разрешить входящие соединения Rsync с определенного IP-адреса или подсети
Программа Rsync, работающая на порту 873
, может использоваться для передачи файлов с одного компьютера на другой.
Чтобы разрешить входящие соединения rsync
с определенного IP-адреса или подсети, используйте параметр from
для указания исходного IP-адреса и параметр port
для установки порта назначения 873
.
Следующая команда разрешит только соединения Rsync с IP-адреса 203.0.113.103
:
OutputRule added
Чтобы разрешить всей подсети 203.0.113.0/24
rsync
на ваш сервер, выполните:
OutputRule added
Разрешить Nginx HTTP / HTTPS
При установке веб-сервера Nginx на сервере создаются несколько различных профилей UFW. После того как Nginx установлен и включен как служба, выполните следующую команду, чтобы определить доступные профили:
Output Nginx Full
Nginx HTTP
Nginx HTTPS
Для разрешения как HTTP-, так и HTTPS-трафика выберите Nginx Full
. В противном случае выберите либо Nginx HTTP
, чтобы разрешить только HTTP, либо Nginx HTTPS
, чтобы разрешить только HTTPS.
Следующая команда разрешит как HTTP-, так и HTTPS-трафик на сервере (порты 80
и 443
):
OutputRule added
Rule added (v6)
Разрешить входящий HTTP / HTTPS для Apache
При установке веб-сервера Apache на сервере создаются несколько различных профилей UFW. После того как Apache установлен и включен как служба, выполните следующую команду, чтобы определить доступные профили:
Output Apache
Apache Full
Apache Secure
Для разрешения как HTTP-, так и HTTPS-трафика выберите Apache Full
. В противном случае выберите либо Apache
для HTTP, либо Apache Secure
для HTTPS.
Следующая команда разрешит как HTTP-, так и HTTPS-трафик на сервере (порты 80
и 443
):
OutputRule added
Rule added (v6)
Разрешить входящий HTTP (порт 80
)
Веб-серверы, такие как Apache и Nginx, обычно прослушивают HTTP-запросы на порту 80
. Если ваша политика по умолчанию для входящего трафика установлена на отбрасывание или запрет, вам потребуется создать правило UFW для разрешения внешнего доступа на порт 80
. Вы можете использовать либо номер порта, либо имя службы (http
) в качестве параметра этой команды.
Для разрешения всех входящих соединений HTTP (порт 80
) выполните:
OutputRule added
Rule added (v6)
Альтернативный синтаксис заключается в указании номера порта службы HTTP:
OutputRule added
Rule added (v6)
Разрешить все входящие соединения HTTPS (порт 443
)
HTTPS обычно работает на порту 443
. Если ваша политика по умолчанию для входящего трафика установлена на отбрасывание или запрет, вам потребуется создать правило UFW для разрешения внешнего доступа на порт 443
. Вы можете использовать либо номер порта, либо имя службы (https
) в качестве параметра этой команды.
Чтобы разрешить все входящие соединения HTTPS (порт 443
), выполните:
OutputRule added
Rule added (v6)
Альтернативный синтаксис заключается в указании номера порта службы HTTPS:
OutputRule added
Rule added (v6)
Разрешить все входящие соединения HTTP и HTTPS
Если вы хотите разрешить как трафик HTTP, так и HTTPS, вы можете создать одно правило, которое разрешает оба порта. Для этого необходимо также определить протокол с помощью параметра proto
, который в данном случае должен быть установлен на tcp
.
Чтобы разрешить все входящие соединения HTTP и HTTPS (порты 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 сервера:
OutputRule added
Чтобы разрешить всей подсети 203.0.113.0/24
подключаться к вашему серверу MySQL, выполните:
OutputRule added
Разрешить подключение к PostgreSQL с определенного IP-адреса или подсети
PostgreSQL слушает подключения клиентов на порту 5432
. Если ваш сервер баз данных PostgreSQL используется клиентом на удаленном сервере, вам необходимо убедиться, что это соединение разрешено.
Чтобы разрешить входящие подключения к PostgreSQL с определенного IP-адреса или подсети, укажите источник с помощью параметра from
и установите порт на 5432
:
OutputRule added
Чтобы разрешить подключение всей подсети 203.0.113.0/24
к вашему серверу PostgreSQL, выполните:
OutputRule added
Блокировка исходящей почты SMTP
Почтовые серверы, такие как Sendmail и Postfix, обычно используют порт 25
для передачи трафика SMTP. Если ваш сервер не должен отправлять исходящую почту, возможно, вы захотите заблокировать такой трафик. Чтобы заблокировать исходящие SMTP-подключения, выполните:
OutputRule added
Rule added (v6)
Это настраивает ваш брандмауэр для отбрасывания всего исходящего трафика на порту 25
. Если вам нужно отклонить исходящие соединения на другом порту, вы можете повторить эту команду и заменить 25
на нужный вам номер порта.
Заключение
UFW – мощный инструмент, который может значительно улучшить безопасность ваших серверов при правильной настройке. В этом справочнике рассматриваются некоторые общие правила UFW, которые часто используются для настройки брандмауэра на Ubuntu.
Большинство команд в этом руководстве могут быть адаптированы под различные сценарии использования, изменяя параметры, такие как IP-адрес и/или порт назначения. Для получения более подробной информации о каждом параметре команды и доступных модификаторах вы можете использовать утилиту man
для проверки руководства по использованию UFW:
Официальная страница UFW в документации Ubuntu – это еще один ресурс, который вы можете использовать в качестве справочного материала для более продвинутых случаев использования и примеров.
Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands