
UFW — это инструмент настройки брандмауэра , который работает поверх iptables и включен в дистрибутивы Ubuntu. Он обеспечивает оптимизированный интерфейс для настройки распространенных вариантов использования брандмауэра через командную строку.
В этой шпаргалке представлен краткий справочник по распространенным вариантам использования и командам UFW, включая примеры того, как разрешать и блокировать службы по порту, сетевому интерфейсу и исходному IP-адресу.
Проверить состояние UFW
Чтобы проверить, включен ли UFW, запустите:
sudo ufw status
Вывод покажет, активен ли ваш брандмауэр или нет.
Включить UFW
Если при проверке вы получили сообщение Status: inactive, это означает, что брандмауэр еще не включен в системе. Вам нужно будет запустить команду, чтобы включить его.
Когда UFW включен, он по умолчанию блокирует внешний доступ ко всем портам сервера. На практике это означает, что если вы подключены к серверу через SSH и включите его, прежде чем разрешить доступ через порт SSH, ваше моединение будет прервано. Обязательно следуйте разделу этого руководства о том, как включить доступ по SSH, прежде чем включать брандмауэр.
Чтобы включить UFW в вашей системе, запустите:
sudo ufw enable
Вы увидите такой вывод:
OutputFirewall is active and enabled on system startup
Чтобы увидеть, что в данный момент заблокировано или разрешено, вы можете использовать verbose параметр при запуске ufw status следующим образом:
sudo ufw status verbose
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
В этом примере 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
Блокировать входящие подключения к сетевому интерфейсу
Чтобы заблокировать входящие подключения с определенного IP-адреса к определенному сетевому интерфейсу, выполните следующую команду, заменив выделенный IP-адрес на IP-адрес, который вы хотите заблокировать:
sudo ufw deny in on eth0 from 203.0.113.100
Параметр in сообщает ufw, что правило следует применять только для входящих соединений, а параметр on eth0 указывает, что правило применяется только к интерфейсу eth0. Это может быть полезно, если у вас система с несколькими сетевыми интерфейсами (в том числе виртуальными) и вам необходимо заблокировать внешний доступ к некоторым из этих интерфейсов, но не ко всем.
Разрешить IP-адрес
Чтобы разрешить все сетевые подключения, исходящие с определенного IP-адреса, выполните следующую команду, заменив выделенный IP-адрес на IP-адрес, которому вы хотите разрешить доступ:
sudo ufw allow from 203.0.113.101
Если вы запустите 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
Параметр in сообщает ufw, что правило следует применять только для входящих соединений, а параметр on eth0 указывает, что правило применяется только к eth0 интерфейсу.
Если вы запустите sudo ufw status сейчас, вы увидите вывод, похожий на этот:
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
Удалить правило UFW
Чтобы удалить правило, которое вы настроили ранее используйте ufw delete, а затем правило ( allow или deny ) и целевую спецификацию. В следующем примере будет удалено ранее установленное правило, разрешающее все подключения с IP-адреса 203.0.113.101:
sudo ufw delete allow from 203.0.113.101
Другой способ указать, какое правило вы хотите удалить, — указать идентификатор правила. Эту информацию можно получить с помощью следующей команды:
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. Второе правило разрешает поступающие с IP-адреса 203.0.113.102 подключения к eth0 интерфейсу, .
Поскольку по умолчанию 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”
Не забывайте заключить в кавычки имена профилей, состоящие из нескольких слов, например 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
Альтернативный, хотя и менее удобный для пользователя, синтаксис заключается в указании точного номера порта службы SSH, по умолчанию 22:
sudo ufw allow 22
Разрешить входящий 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
Вы также можете использовать адрес подсети в качестве from параметра, чтобы разрешить входящие SSH-соединения из определенной подсети:
sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
Разрешить входящий Rsync с определенного IP-адреса или подсети
Программа Rsync , работающая на порту 873, может использоваться для передачи файлов с одного компьютера на другой.
Чтобы разрешить входящие rsync соединения с определенного IP-адреса или подсети, используйте from параметр, чтобы указать исходный IP-адрес, и port параметр, чтобы установить порт назначения 873. Следующая команда разрешит только соединения Rsync, исходящие с IP-адреса 203.0.113.103:
sudo ufw allow from 203.0.113.103 to any port 873
Чтобы разрешить доступ всей подсети 203.0.113.0/24 к вашему серверу по протоколу rsync, выполните:
sudo ufw allow from 203.0.113.0/24 to any port 873
Разрешить 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"
Разрешить 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 "Apache Full"
Разрешить весь входящий HTTP (порт 80)
Веб-серверы, такие как Apache и Nginx, обычно прослушивают HTTP-запросы на порту 80. Если ваша политика по умолчанию для входящего трафика настроена на удаление или запрет, вам необходимо создать правило UFW, чтобы разрешить внешний доступ к порту 80. В качестве параметра этой команды вы можете использовать номер порта или имя службы .
Чтобы разрешить все входящие HTTP соединения на порт 80, выполните:
sudo ufw allow http
Альтернативный синтаксис — указать номер порта службы HTTP:
sudo ufw allow 80
Разрешить все входящие HTTPS соединения (порт 443)
HTTPS обычно работает на порту 443. Если ваша политика по умолчанию для входящего трафика настроена на удаление или запрет, вам необходимо создать правило UFW, чтобы разрешить внешний доступ к порту 443. В качестве параметра этой команды вы можете использовать номер порта или имя службы.
Чтобы разрешить все входящие на 443 порт соединения, выполните:
sudo ufw allow https
Альтернативный синтаксис — указать номер порта службы HTTPS:
sudo ufw allow 443
Разрешить все входящие HTTP и HTTPS соединения
Если вы хотите разрешить как HTTP трафик, так и HTTPS, вы можете создать одно правило, разрешающее оба порта. Такое использование требует, чтобы вы также определили протокол с помощью параметра proto, которому в данном случае должно быть присвоено значение tcp.
Чтобы разрешить все входящие соединения HTTP и HTTPS (порты 80 и 443), выполните:
sudo ufw allow proto tcp from any to any port 80,443
Разрешить подключение 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
Чтобы дать возможность подключаться к вашему серверу MySQL всей подсети 203.0.113.0/24, запустите:
sudo ufw allow from 203.0.113.0/24 to any port 3306
Разрешить подключение PostgreSQL с определенного IP-адреса или подсети
PostgreSQL прослушивает клиентские соединения на порту 5432. Если ваш сервер базы данных PostgreSQL используется клиентом на удаленном сервере, вам необходимо обязательно разрешить этот трафик.
Чтобы разрешить входящие соединения PostgreSQL с определенного IP-адреса или подсети, укажите источник с помощью параметра from и установите порт 5432:
sudo ufw allow from 203.0.113.103 to any port 5432
Чтобы разрешить подключаться к вашему серверу PostgreSQL подсети 203.0.113.0/24 запустите:
sudo ufw allow from 203.0.113.0/24 to any port 5432
Блокировать исходящую почту SMTP
Почтовые серверы, такие как Sendmail и Postfix, обычно используют порт 25 для SMTP-трафика. Если ваш сервер не должен отправлять исходящую почту, вы можете заблокировать этот тип трафика. Чтобы заблокировать исходящие SMTP-соединения, выполните:
sudo ufw deny out 25
Это настроит ваш брандмауэр на отбрасывание всего исходящего трафика на порт 25. Если вам нужно отклонить исходящие соединения на другой порту, вы можете повторить эту команду и заменить порт 25 нужным номером порта, который вы хотите заблокировать.