Как настроить брандмауэр с UFW в Ubuntu 14.04

Вступление

UFW, или несложный брандмауэр, представляет собой интерфейс кiptables, предназначенный для упрощения процесса настройки брандмауэра. Хотяiptables - надежный и гибкий инструмент, новичкам может быть сложно научиться использовать его для правильной настройки брандмауэра. Если вы хотите начать защищать свою сеть и не уверены, какой инструмент использовать, UFW может быть правильным выбором для вас.

Из этого туториала вы узнаете, как настроить брандмауэр с UFW в Ubuntu 14.04.

Предпосылки

Прежде чем начать использовать это руководство, на вашем сервере Ubuntu должна быть настроена отдельная учетная запись суперпользователя без полномочий root - пользователя с привилегиями sudo. Вы можете узнать, как это сделать, выполнив хотя бы шаги 1-3 в учебникеInitial Server Setup with Ubuntu 14.04.

UFW по умолчанию устанавливается в Ubuntu. Если по какой-то причине он был удален, вы можете установить его с помощьюapt-get:

sudo apt-get install ufw

Использование IPv6 с UFW

Если на вашем сервере Ubuntu включен IPv6, убедитесь, что UFW настроен на поддержку IPv6, чтобы он мог управлять правилами брандмауэра для IPv6 в дополнение к IPv4. Для этого откройте конфигурацию UFW в вашем любимом редакторе. Мы будем использовать нано:

sudo nano /etc/default/ufw

Затем убедитесь, что значение «IPV6» равно «да». Это должно выглядеть так:

/etc/default/ufw excerpt

...
IPV6=yes
...

Сохранить и выйти. НажмитеCtrl-X, чтобы выйти из файла, затемY, чтобы сохранить сделанные вами изменения, затемENTER, чтобы подтвердить имя файла.

Когда UFW включен, он будет настроен для написания правил межсетевого экрана IPv4 и IPv6.

Этот учебник написан с учетом IPv4, но будет хорошо работать для IPv6, если вы его включите.

Проверьте статус и правила UFW

В любое время вы можете проверить состояние UFW с помощью этой команды:

sudo ufw status verbose

По умолчанию UFW отключен, поэтому вы должны увидеть что-то вроде этого:

Output:Status: inactive

Если UFW активен, вывод сообщит, что он активен, и в нем будут перечислены все установленные правила. Например, если брандмауэр настроен на разрешение подключений 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 настроил брандмауэр.

Перед включением UFW мы хотим убедиться, что ваш брандмауэр настроен так, чтобы вы могли подключаться через SSH. Давайте начнем с настройки политик по умолчанию.

Настройка политик по умолчанию

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

Давайте вернем ваши правила UFW к значениям по умолчанию, чтобы мы могли быть уверены, что вы сможете следовать этому руководству. Чтобы установить значения по умолчанию, используемые UFW, используйте эти команды:

sudo ufw default deny incoming
sudo ufw default allow outgoing

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

Разрешить SSH-соединения

Если мы сейчас включим наш брандмауэр UFW, он будет запрещать все входящие подключения. Это означает, что нам нужно будет создать правила, которые явно разрешат допустимые входящие соединения - например, SSH или HTTP-соединения - если мы хотим, чтобы наш сервер отвечал на запросы такого типа. Если вы используете облачный сервер, вы, вероятно, захотите разрешить входящие SSH-соединения, чтобы вы могли подключаться и управлять своим сервером.

Чтобы настроить ваш сервер для разрешения входящих SSH-соединений, вы можете использовать эту команду UFW:

sudo ufw allow ssh

Это создаст правила брандмауэра, которые разрешат все соединения через порт 22, который является портом, который слушает демон SSH. UFW знает, что означает ssh и множество других имен служб, потому что он указан как служба, использующая порт 22 в файле/etc/services.

Фактически мы можем написать эквивалентное правило, указавport вместо имени службы. Например, эта команда работает так же, как и выше:

sudo ufw allow 22

Если вы настроили свой демон SSH для использования другого порта, вам нужно будет указать соответствующий порт. Например, если ваш SSH-сервер прослушивает порт 2222, вы можете использовать эту команду для разрешения подключений к этому порту:

sudo ufw allow 2222

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

Включить UFW

Чтобы включить UFW, используйте эту команду:

sudo ufw enable

Вы получите предупреждение о том, что «команда может нарушить существующие ssh-соединения». Мы уже настроили правило брандмауэра, которое разрешает SSH-соединения, поэтому все должно продолжаться. Ответьте на запросy.

Брандмауэр теперь активен. Не стесняйтесь запускать командуsudo ufw status verbose, чтобы увидеть установленные правила.

Разрешить другие подключения

Теперь вы должны разрешить все другие соединения, на которые должен отвечать ваш сервер. Соединения, которые вы должны разрешить, зависят от ваших конкретных потребностей. К счастью, вы уже знаете, как писать правила, которые разрешают подключения на основе имени службы или порта - мы уже сделали это для SSH на порту 22.

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

[[http — порт-80]] === HTTP — порт 80

HTTP-соединения, которыми пользуются незашифрованные веб-серверы, могут быть разрешены с помощью этой команды:

sudo ufw allow http

Если вы предпочитаете использовать номер порта 80, используйте эту команду:

sudo ufw allow 80

[[https — порт 443]] === HTTPS — порт 443

HTTPS-соединения, которыми пользуются зашифрованные веб-серверы, могут быть разрешены с помощью этой команды:

sudo ufw allow https

Если вы предпочитаете использовать номер порта, 443, используйте эту команду:

sudo ufw allow 443

[[ftp — порт-21]] === FTP — порт 21

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

sudo ufw allow ftp

Если вы предпочитаете использовать номер порта 21, используйте эту команду:

sudo ufw allow 21/tcp

Разрешить определенные диапазоны портов

Вы можете указать диапазоны портов с UFW. Некоторые приложения используют несколько портов вместо одного.

Например, чтобы разрешить подключения X11, которые используют порты 6000-6007, используйте эти команды:

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

При указании диапазонов портов с помощью UFW необходимо указать протокол (tcp илиudp), к которому должны применяться правила. Мы не упоминали об этом раньше, потому что отсутствие указания протокола просто позволяет использовать оба протокола, что в большинстве случаев нормально.

Разрешить конкретные IP-адреса

При работе с UFW вы также можете указать IP-адреса. Например, если вы хотите разрешить соединения с определенного IP-адреса, такого как рабочий или домашний IP-адрес15.15.15.51, вам необходимо указать «от», а затем IP-адрес:

sudo ufw allow from 15.15.15.51

Вы также можете указать конкретный порт, к которому разрешено подключаться по IP-адресу, добавив «к любому порту» и номер порта. Например, если вы хотите разрешить15.15.15.51 подключаться к порту 22 (SSH), используйте эту команду:

sudo ufw allow from 15.15.15.51 to any port 22

Разрешить подсети

Если вы хотите разрешить подсеть из IP-адресов, вы можете сделать это, используя нотацию CIDR, чтобы указать маску сети. Например, если вы хотите разрешить все IP-адреса в диапазоне от15.15.15.1 до15.15.15.254, вы можете использовать эту команду:

sudo ufw allow from 15.15.15.0/24

Точно так же вы также можете указать порт назначения, к которому подсеть15.15.15.0/24 может подключаться. Опять же, мы будем использовать порт 22 (SSH) в качестве примера:

sudo ufw allow from 15.15.15.0/24 to any port 22

Разрешить подключения к определенному сетевому интерфейсу

Если вы хотите создать правило брандмауэра, которое применяется только к определенному сетевому интерфейсу, вы можете сделать это, указав «allow in on», а затем имя сетевого интерфейса.

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

ip addr
Output Excerpt:...
2: eth0:  mtu 1500 qdisc pfifo_fast state
...
3: eth1:  mtu 1500 qdisc noop state DOWN group default
...

Выделенный вывод указывает имена сетевых интерфейсов. Их обычно называют чем-то вроде «eth0» или «eth1».

Итак, если у вашего сервера есть общедоступный сетевой интерфейс с именемeth0, вы можете разрешить ему HTTP-трафик (порт 80) с помощью этой команды:

sudo ufw allow in on eth0 to any port 80

Это позволит вашему серверу получать HTTP-запросы из общедоступного Интернета.

Или, если вы хотите, чтобы ваш сервер базы данных MySQL (порт 3306), например, прослушивал соединения на частном сетевом интерфейсеeth1, вы можете использовать эту команду:

sudo ufw allow in on eth1 to any port 3306

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

Запретить соединения

Если вы не изменили политику по умолчанию для входящих подключений, UFW настроен на запрет всех входящих подключений. Как правило, это упрощает процесс создания политики безопасного брандмауэра, требуя от вас создания правил, которые явно пропускают определенные порты и IP-адреса. Однако иногда вам может потребоваться запретить определенные подключения на основе исходного IP-адреса или подсети, возможно, потому что вы знаете, что ваш сервер подвергается атаке оттуда. Кроме того, если вы хотите изменить свою политику входящего трафика по умолчанию наallow (что не рекомендуется в интересах безопасности), вам нужно будет создать правилаdeny для любых служб или IP-адресов, которые вы не используете. Я не хочу разрешать подключения для.

Чтобы написать правилаdeny, вы можете использовать команды, которые мы описали выше, за исключением того, что вам нужно заменить «разрешить» на «запретить».

Например, чтобы запретить HTTP-соединения, вы можете использовать эту команду:

sudo ufw deny http

Или, если вы хотите запретить все соединения от15.15.15.51, вы можете использовать эту команду:

sudo ufw deny from 15.15.15.51

Если вам нужна помощь в написании любых других правилdeny, просто посмотрите на предыдущие правилаallow и обновите их соответствующим образом.

Теперь давайте посмотрим, как удалять правила.

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

Знать, как удалять правила брандмауэра, так же важно, как знать, как их создавать. Есть два разных способа указать, какие правила удалять: по номеру правила или по фактическому правилу (аналогично тому, как правила были указаны при их создании). Мы начнем с методаdelete by rule number, потому что это проще, чем писать фактические правила удаления, если вы новичок в UFW.

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

Если вы используете номер правила для удаления правил брандмауэра, первое, что вам нужно сделать, - это получить список правил брандмауэра. Команда состояния UFW имеет возможность отображать числа рядом с каждым правилом, как показано здесь:

sudo ufw status numbered
Numbered Output:Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere

Если мы решим, что хотим удалить правило 2, которое разрешает соединения через порт 80 (HTTP), мы можем указать его в команде удаления UFW, например так:

sudo ufw delete 2

Это покажет запрос подтверждения и затем удалит правило 2, разрешающее HTTP-соединения. Обратите внимание, что если у вас включен IPv6, вы также можете удалить соответствующее правило IPv6.

По фактическому правилу

Альтернативой номерам правил является указание фактического правила для удаления. Например, если вы хотите удалить правило «allow http», вы можете написать его так:

sudo ufw delete allow http

Вы также можете указать правило «разрешить 80» вместо имени службы:

sudo ufw delete allow 80

Этот метод удалит правила IPv4 и IPv6, если они существуют.

Как отключить UFW (необязательно)

Если вы решите, что не хотите использовать UFW по какой-либо причине, вы можете отключить его с помощью этой команды:

sudo ufw disable

Любые правила, которые вы создали с помощью UFW, больше не будут активными. Вы всегда можете запуститьsudo ufw enable, если вам понадобится активировать его позже.

Сброс правил UFW (необязательно)

Если у вас уже настроены правила UFW, но вы решили, что хотите начать все сначала, вы можете использовать команду сброса:

sudo ufw reset

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

Заключение

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

Чтобы узнать о более распространенных конфигурациях UFW, ознакомьтесь с этим руководством:UFW Essentials: Common Firewall Rules and Commands

Удачи!

Related