Знакомство с брандмауэром (файервол)

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

sudo iptables -S

Получаем в ответ:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Все открыто и доступно.

Установка UFW

Перед началом установки обновляем пакеты, это дело святое, делать нужно перед любой установкой чего либо. Так же, как пользоваться командой sudo.

sudo apt update
sudo apt upgrade -y
sudo apt install ufw -y

Проверка статуса UFW

После установки файрвол еще не активен. Проверим это командой:

sudo ufw status

В ответ получим лаконичное сообщение, что брандмауэр еще не работает.

Status: inactive

Пакеты правил UFW

Эти записи помогают объединить несколько действий одной командой. Есть уже предустановленные, никто не мешает написать свои под необходимые действия удобочитаемые для вас. Посмотрим какие пакеты правил уже есть, перейдя в каталог, где они живут:

cd /etc/ufw/applications.d
ls

На выходе получим список с именами файлов, которые довольно осмысленно говорят какими портами они занимаются. В зависимости от версии программы эти пакеты могут различаться.

openssh-server
ufw-chat
ufw-dnsserver
ufw-loginserver
ufw-printserver
ufw-webserver
ufw-bittorent
ufw-directoryserver
ufw-fileserver
ufw-mailserver
ufw-proxyserver

Открытие портов UFW

Применение правил

Первым делом откроем связь с сервером по SSH иначе потеряем связь с сервером после запуска защиты, никто же не хочет приобрести лишние проблемы с ненужными телодвижениями в последствии. Выполнить команду воспользовавшись одним из пакетов:

sudo ufw allow OpenSSH

Вывод будет следующим - правило применено, причем для двух протоколов v4 и v6

Rules updated
Rules updated (v6)

Можно по другому в одном из пакетов это ufw-loginserver есть уже запись для 22 порта

sudo ufw allow SSH

Применим своеобразную защиту от посягательств да же, если сервер находится за NATом и SSH порт не светит в интернет. Разрешим доступ к серверу только с определенного ip-адреса или подсети по всем портам, где живет админ.

sudo ufw allow from 192.168.1.1
#или для подсети
sudo ufw allow from 192.168.1.1/24

Включение файрвола UFW

Теперь смело можно запускать брандмауэр:

sudo ufw enable

Помимо того, что я уже предупредил и позаботился о связи с сервером, программа то же поинтересуется о том, что ssh может быть заблокировано.

Command may disrupt existing ssh connections. Proceed with operation (y|n)?
# жмем y
Firewall is active and enabled on system startup
# Файервол активен, проверяем
sudo iptables -S
# много непонятных букав ))

Статус правил UFW

Просмотреть активные правила при помощи команды:

sudo ufw status

Как видно все что разрешили здесь присутствует, причем с избытком и в разных формах, не хватает еще записи прямого открытия порта без участия пакетов. С пакетами удобнее, чтоб потом не вспоминать, по какому порту приложение работает, все же цифры наизусть не надо в голове держать.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
SSH                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
SSH (v6)                   ALLOW       Anywhere (v6)

Удалить правило UFW

Удаление правила по названию

Удалять правила можно несколькими способами, каким удобнее, тем и пользоваться. Удалить правило по имени, в данном случае дублирующее доступ к порту 22

sudo ufw delete allow OpenSSHRule deletedRule deleted (v6)

Список правил под номерами

Можно по другому. Сначала выведя список правил под номерами:

sudo ufw status numbered

Оставшиеся правила уже приобрели в таком случае порядковые номера.

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] SSH                        ALLOW IN    Anywhere
[ 2] SSH (v6)                   ALLOW IN    Anywhere (v6)

Удаление правил по номерам

Удалить правило номер 2 введя такую команду:

sudo ufw delete 2

Что интересно при удалении правила по номеру, нас спросят типа уверены, что надо удалить? При удалении по имени такого не спрашивает.

Deleting:
 allow SSH
Proceed with operation (y|n)?
# подтверждаем удаление - y
Rule deleted (v6)

Отключение протокола ipv6 UFW

Поскольку у меня нет поддержки от провайдера протокола ipv6 я его отключил, соответственно отключим и в файрволе

sudo nano /etc/default/ufw# находим строчку IPV6=yes# меняем на IPV6=no

Сохранить файл Ctrl+O, закрыть Ctrl+X.

Перезагрузка UFW

После каких либо изменений в файле конфигурации, чтобы они вступили в силу необходимо перезапустить сервис командой

sudo ufw reload

При удачном стечении обстоятельств получим вот такой положительный ответ:

Firewall reloaded

Теперь правила будут работать и создаваться без поддержки ipv6

Создание своих пакетов UFW

Поскольку есть почтовый сервер надо открыть нужные порты используя записи пакета, который есть по умолчанию ufw-mailserver

Правила, которые написаны через пробел необходимо заключать в кавычки.

sudo ufw allow SMTP
sudo ufw allow IMAP
sudo ufw allow IMAPS
sudo ufw allow "Mail submission"

Вот порт 587 - starttls есть в пакете, а 465 в пакете нет(наверное устаревший уже) откроем добавив запись в пакет ufw-mailserver или создать новый пакет назвав его как угодно. Откроем файл с пакетом:

sudo nano /etc/ufw/applications.d/ufw-mailserver

В конце допишем свое правило, назвав его в честь порта, который отвечает за секретную передачу почтовых сообщений, в квадратных скобках имя правила.

[SMTPS]
title=Mail server (SMTPS)
description=Mail server (SMTPS)
ports=465/tcp

Сохранить файл Ctrl+O, закрыть Ctrl+X и применить правило.

sudo ufw allow SMTPS

А так же откроем доступ к веб серверу используя правило из установленного пакета ufw-webserver. Если правило с именем содержащее пробел или еще какие то символы оно применяется только если заключено в кавычки

sudo ufw allow "WWW Full"

Мне понравилось применение массового открытия портов в пакете “WWW Full” сделаю так же для почтового сервера, чтоб не плодить файлы допишу все это в ufw-mailserver .

sudo nano /etc/ufw/applications.d/ufw-mailserver

Вводим текст.

[Mail Full]
title=Mail server (SMTP,SMTPS,IMAP,IMAPS)
description=Mail server (SMTP,SMTPS,IMAP,IMAPS)
ports=25,465,587,143,993/tcp

Сохранить файл Ctrl+O, закрыть Ctrl+X

Подробный вывод правил UFW

Проверим более подробно установленные правила с выводом не только имен правил из пакета, но и порта с протоколом TCP или UDP

sudo ufw status verbose

На выходе получим не только имя правила, но еще и порт к которому оно относится.

Сброс всех правил UFW

Для сброса всех настроек ufw, нужно выполнить команду, после которой ufw будет деактивирован

sudo ufw reset

Выключить файрвол UFW

Бывает необходимо выяснить какую то проблему для исключения из этой цепочки файрвола его необходимо выключить. Для полного отключения утилиты ufw, нужно выполнить команду

sudo ufw disable

Примеры, добавления / удаления, правил

# Добавление правил ufw
# Открытие порта:
sudo ufw allow 12345/tcp

# Открытие диапазона портов:
sudo ufw allow 1000:1010/tcp

# Закрытие порта:
sudo ufw deny 12345/tcp

# Разрешение на доступ ко всем портам, с определённого ip-адреса:
sudo ufw allow from 123.123.123.123

# Разрешение на доступ к какому-нибудь порту (в примере 443 порт), с определённого ip-адреса:
sudo ufw allow from 123.123.123.123 to any port 443

# Разрешение на доступ ко всем портам, с адресов определённой подсети:
sudo ufw allow from 192.168.1.0/24

# Разрешение на доступ к какому-нибудь порту (в примере 443 порт), с адресов определённой подсети:
sudo ufw allow from 192.168.1.0/24 to any port 443

# УДАЛЕНИЕ ПРАВИЛ ufw
 
# Проверка номера правила, и удаление по номеру (в примере правило № 1):
sudo ufw status numbered
sudo ufw delete 1

Удаление по порту, или диапазону портов:
sudo ufw delete allow 12345/tcp
sudo ufw delete allow 1000:1010/tcp

Это конечно не все возможности брандмауэра есть еще, но это уже отдельная тема, весь необходимый минимум рассказан.

Прокомментировать можно

без регистрации здесь