Базовые настройки firewall Ubuntu 18.04
UFW (Uncomplicated Firewall или «простой брандмауэр») представляет собой интерфейс iptables
, предназначенный для упрощения процесса настройки брандмауэра. Хотя iptables
— надежный и гибкий инструмент, начинающим бывает сложно научиться использовать его для правильной настройки брандмауэра. Если вы ищете способ защитить вашу сеть и не знаете, какой инструмент для этого использовать, UFW может отлично вам подойти.
UFW устанавливается в Ubuntu по умолчанию. Если вы удалили UFW, вы можете установить его с помощью команды sudo apt install ufw
.
Шаг 1 — Использование IPv6 с UFW (опционально)
Этот обучающий модуль предусматривает использование протокола IPv4, но подходит и для IPv6, если вы активировали этот протокол. Если на вашем сервере Ubuntu активирован протокол IPv6, настройте UFW для поддержки IPv6, чтобы UFW управлял правилами брандмауэра и для IPv6, и для IPv4. Для этого откройте конфигурацию UFW с помощью nano
или своего предпочитаемого редактора.
sudo nano /etc/default/ufw
Шаг 2 — Настройка политик по умолчанию
Если вы только начинаете работать с брандмауэром, прежде всего нужно настроить политики по умолчанию. Эти правила определяют обработку трафика, который явно не соответствует каким-либо другим правилам. По умолчанию UFW настроен так, чтобы запрещать все входящие соединения и разрешать все исходящие соединения. Это означает, что любые попытки связаться с вашим сервером будут заблокированы, но любые приложения на вашем сервере будут иметь связь с внешним миром.
Восстановим правила UFW по умолчанию, чтобы продолжить выполнение этого обучающего модуля. Для восстановления настроек по умолчанию для UFW необходимо использовать следующие команды:
sudo ufw default deny incoming
Шаг 3 — Разрешение подключений SSH
Если мы сейчас активируем брандмауэр UFW, все входящие соединения будут запрещены. Это означает, что нам нужно создать правила, прямо разрешающие легитимные входящие соединения (например, SSH или HTTP), если мы хотим, чтобы сервер отвечал на такие запросы. Если вы используете облачный сервер, вы наверное хотите разрешить входящие соединения SSH, чтобы можно было подключаться к серверу и управлять им.
Чтобы разрешить на сервере входящие соединения SSH, вы можете использовать следующую команду:
sudo ufw allow ssh
Однако мы можем записать эквивалентное правило, указав номер порта вместо имени службы. Например, эта команда работает так же, как показанная выше:
sudo ufw allow 22
sudo ufw allow 2222
Шаг 4 — Активация UFW
Чтобы активировать UFW, используйте следующую команду:
sudo ufw enable
Теперь брандмауэр включен. Запустите команду sudo ufw status verbose
, чтобы посмотреть заданные правила. В остальной части этого обучающего модуля более подробно рассказывается об использовании UFW, например, о запрете различных видов соединений.
Шаг 5 — Разрешение других соединений
К этому моменту вы должны были разрешить все другие соединения, необходимые вашему серверу. Состав разрешаемых соединений должен соответствовать вашим конкретным потребностям. К счастью, вы уже знаете, как писать правила, разрешающие соединения по имени службы или номеру порта, поскольку мы уже делали это для SSH на порту 22
. Также вы можете использовать это для следующих соединений:
- соединения HTTP на порту 80, которые используются веб-серверами без шифрования, с помощью команды
sudo ufw allow http
илиsudo ufw allow 80
- соединения HTTPS на порту 443, которые используются веб-серверами с шифрованием, с помощью команды
sudo ufw allow https
илиsudo ufw allow 443
Помимо указания порта или службы есть другие способы разрешить другие соединения.
Определенные диапазоны портов
С помощью UFW вы можете указывать диапазоны портов. Некоторые приложения используют для соединений не один порт, а несколько.
Например, чтобы разрешить соединения X11, которые используют порты 6000
—6007
, нужно использовать следующие команды:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
Конкретные IP-адреса
При работе с UFW вы также можете указывать конкретные IP-адреса. Например, если вы хотите разрешить соединения с определенного IP-адреса, например с рабочего или домашнего адреса 203.0.113.4
, вам нужно использовать опцию from
, а затем указать IP-адрес:
sudo ufw allow from 203.0.113.4
sudo ufw allow from 203.0.113.4 to any port 22
Если вы хотите разрешить подсеть IP-адресов, вы можете указать маску сети с помощью нотации CIDR. Например, если вы хотите разрешить все IP-адреса в диапазоне от 203.0.113.1
до 203.0.113.254
, вы можете использовать следующую команду:
sudo ufw allow from 203.0.113.0/24
sudo ufw allow from 203.0.113.0/24 to any port 22
Если вы хотите создать правило брандмауэра, применимое только к определенному сетевому интерфейсу, вы можете использовать для этого опцию «allow in on», а затем указать имя сетевого интерфейса.
Прежде чем продолжить, вам может понадобиться просмотреть сетевые интерфейсы. Для этого нужно использовать следующую команду:
ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .
В выделенной части результатов показаны имена сетевых интерфейсов. Обычно они носят имена вида eth0
или enp3s2
.
Если на вашем сервере имеется публичный сетевой интерфейс под названием eth0
, вы можете разрешить трафик HTTP (порт 80
) для этого интерфейса с помощью следующей команды:
sudo ufw allow in on eth0 to any port 80
Если вы хотите использовать сервер базы данных MySQL (порт 3306
) для прослушивания соединений на интерфейсе частной сети (например, eth1
), вы можете использовать следующую команду:
sudo ufw allow in on eth1 to any port 3306
Шаг 6 — Запрет соединений
Если вы не изменяли политику по умолчанию для входящих соединений, UFW настроен на запрет всех входящих соединений. Это упрощает процесс создания защищенной политики брандмауэра, поскольку вам нужно создавать правила, прямо разрешающие соединения через конкретные порты и IP-адреса.
Однако в некоторых случаях вам может понадобиться запретить определенные соединения по IP-адресу источника или подсети, например, в случае атаки с этого адреса. Если вы захотите изменить политику по умолчанию для входящих соединений на allow (что не рекомендуется), вам нужно будет создать правила deny для любых служб или IP-адресов, которым вы не хотите разрешать подключение.
Для записи правил deny можно использовать описанные выше команды, заменяя allow на deny.
Например, чтобы запретить соединения по протоколу HTTP, вы можете использовать следующую команду:
sudo ufw deny http
sudo ufw deny from 203.0.113.4
Шаг 7 — Удаление правил
Знать процедуру удаления правил брандмауэра так же важно, как и знать процедуру их создания. Существует два разных способа указывать правила для удаления: по номеру правила или по фактическому правилу (так же, как правила задавались при их создании). Начнем с метода удаления по номеру правила, поскольку этот метод проще.
По номеру правила
Если вы используете номер правила для удаления правил брандмауэра, прежде всего нужно получить список правил брандмауэра. Команда UFW status имеет опцию отображение номеров рядом с каждым правилом, как показано здесь:
sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Если мы решим удалить правило 2, разрешающее соединения через порт 80 (HTTP), мы можем указать его в команде UFW delete, как показано здесь:
sudo ufw delete 2
По фактическому имени правила
Вместо номеров правил можно указывать фактические имена удаляемых правил. Например, если вы хотите удалить правило allow http
, вы можете использовать следующую команду:
sudo ufw delete allow http
Также вы можете указать это правило как allow 80
, а не указывать имя службы:
sudo ufw delete allow 80
Этот метод удалит правила IPv4 и IPv6, если они существуют.
Шаг 8 — Проверка состояния и правил UFW
Вы можете проверить состояние UFW в любое время с помощью следующей команды:
sudo ufw status verbose
Если UFW отключен (по умолчанию), вы увидите примерно следующее:
Output
Status: inactive
Если UFW активен (т. е. вы выполнили шаг 3), в результатах будет показано, что он активен, и будет выведен список заданных правил. Например, если настройки брандмауэра разрешают соединения SSH (порт 22
) из любого источника, результат может выглядеть примерно так:
Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Используйте команду status,
если хотите проверить настройку брандмауэра UFW.
Шаг 9 — Отключение или сброс UFW (необязательно)
Если вы решите прекратить использовать UFW, вы можете отключить его с помощью следующей команды:
sudo ufw disable
Любые правила, созданные с помощью UFW, больше не будут активными. Если впоследствии вы захотите активировать UWF, вы всегда сможете использовать команду sudo ufw enable
.
Если вы уже настроили правила UFW, но решите начать заново, вы можете использовать команду reset:
sudo ufw reset
Эта команда отключит UFW и удалит все ранее заданные правила. Помните, что если вы изменяли политики по умолчанию, их первоначальные настройки не восстановятся. Это позволит заново начать настройку UFW.
Заключение
Теперь ваш брандмауэр настроен так, чтобы разрешать (как минимум) соединения SSH. Обязательно разрешите другие входящие соединения для вашего сервера, но при этом ограничьте все ненужные соединения, чтобы сделать свой сервер функциональным и безопасным.