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
нужным номером порта, который вы хотите заблокировать.