Настройка брандмауэра в Ubuntu 18.04

16 Ноября 2018

Традиционно в качестве брандмауэра (фильтра пакетов) в Ubuntu используется iptables, но поскольку Ubuntu позиционируется как простой дистрибутив, то и оболочка для iptables была разработана соответствующая — UTF (Uncomplicated Firewall) — несложный файрвол.

Проверяем состояние брандмауэра

Первым делом нужно убедиться, что пакет ufw вообще установлен или установить его, если это не так:

# apt install ufw

На VDS от Xelent вы сразу получаете полномочия root, поэтому нет необходимости вводить команду sudo.
Как показано на следующей иллюстрации, уже установлена последняя версия пакета ufw.

1.png

UFW установлен

Теперь посмотрим состояние брандмауэра:

# ufw status verbose

По умолчанию фильтр пакетов выключен, поэтому вы получите сообщение

Status: inactive

Не нужно спешить включать файрвол: сначала его нужно настроить. Ведь если порт 22 окажется по умолчанию недоступен, то вы потеряете доступ к своему VDS. Конечно, в службе поддержки вам помогут, но все это — потеря времени.

Базовая настройка

По умолчанию брандмауэр запрещает все входящие соединения и разрешает все исходящие. Такая политика идеальна с точки зрения безопасности (дальше вы поймете почему) — ведь если кто-то (и вы в том числе) захочет к нему подключиться, что у него это не получится. В то же время приложения на сервере смогут создавать исходящие соединения.
Рассмотрим две команды:

ufw default deny incoming
ufw default allow outgoing

Данные два правила как раз и задают политику по умолчанию — запрещаются все входящие соединения и разрешаются все исходящие.

Итак, все входящие соединения запрещены. Чтобы к серверу можно было «достучаться» по определенному порту, его нужно сначала открыть. UFW хорош тем, что вам даже не нужно помнить номер порта — нужно знать только название сервиса. Например, вот как можно разрешить подключение по SSH:

ufw allow ssh

При этом UFW сам создаст правило для порта 22 — именно этот порт используется для SSH. Брандмауэр знает порты и имена всех распространенных служб (http, ssh, ftp, sftp и т. д.).
Однако если вы перенастроили ssh на нестандартный порт из соображений той же безопасности, нужно явно указать номер порта:

ufw allow 3333

После разрешения ssh (это главное, чтобы сейчас файрвол нам не разорвал соединение) можно включить ufw командой:

ufw enable

Необходимо подтвердить запуск, ответив y:

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Посмотрите на следующий скриншот.

2.png

Базовая настройка выполнена

Посмотрим, что произошло. Сначала мы разрешили ssh, на что получили ответ, что правила обновлены:

Rules updated

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

На этом базовая настройка выполнена — ssh успешно работает и мы можем приступить к дальнейшей настройке фильтра пакетов.

Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения

Создаем правила для других приложений

Теперь нужно разрешить работу других приложений. Как правило, нужно разрешить службу http (веб-сервер), ftp (ведь нужно же файлы на сайт «заливать») и постараться не забыть о https (что очень важно в последнее время):

ufw allow http
ufw allow https
ufw allow ftp

Сделать то же самое можно было бы и по номерам портов:

ufw allow 80
ufw allow 443
ufw allow 21

При желании можно разрешить целый диапазон портов, указав при этом транспортный протокол (UDP или TCP):

sudo ufw allow 2000:2200/tcp
sudo ufw allow 4000:4400/udp

Разрешаем IP-адреса

Ufw позволяет разрешить определенному IP-адресу доступ ко всем портам сервера, например:

ufw allow from 46.229.220.16

Если нужно разрешить доступ конкретному IP-адресу только к определенному порту, то делается это так:

ufw allow from 46.229.220.16 to any port 22

Здесь мы разрешаем не все подключения к ssh, а только подключения с IP-адреса 46.229.220.16.
Разрешить доступ целого диапазона IP-адресов (например, когда у админа динамический IP), можно так:

ufw allow from 123.45.67.89/24 to any port 22

Запрещаем IP-адреса и службы

Запретить доступ с определенного IP-адреса можно аналогично:

ufw deny from 123.45.67.89

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

ufw deny ftp

Удаление/сброс правил

Сбросить все правила можно командой:

ufw reset

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

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

ufw status numbered

3.png

Список правил

Отключение файрвола

Отключить ufw можно командой ufw disable. Отключение может понадобиться, если какие-то из правил работают неправильно и нужно временно отключить файрвол, чтобы разрешить работу тех или иных сервисов.

Резюме

Если вы ранее использовали iptables, то наверняка заметили, что синтаксис ufw гораздо проще. Если же до этого вам не приходилось настраивать брандмауэр, то ufw — оптимальное решение, с которым не составит труда разобраться даже начинающему админу.

Получить консультацию специалиста