Как настроить firewall с использованием UFW на Ubuntu

Интеграция

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

Этот руководство покажет как настроить файrewALL с помощью UFW на Ubuntu версии 18.04 и выше.

Предиумы

Если вы используете Ubuntu версии 16.04 или ниже, мы рекомендуем вам перевести его на более последную версию, так как Ubuntu не предоставляет поддержку этих версий. Эта сборка гидов поможет вам в процессе перевода.

Чтобы принимать участие в этой практической работе, вам будет необходимо иметь:

  • Сервер, работающий под управлением Ubuntu, а также пользователь не из root с правами sudo. Чтобы получить инструкции по установке, пожалуйста, выберите свою дистрибутив из этого списка и следуйте нашему指南 для начальной настройки сервера.

  • UFW установлен по умолчанию в Ubuntu. Если он был удален по какой-либо причине, вы можете установить его командой sudo apt install ufw.

Настройка брандмауэра Ubuntu с использованием UFW

  1. Включите IPv6
  2. Настройка стандартных политик
  3. Разрешить SSH-соединения
  4. Включение UFW
  5. Разрешить другие необходимые соединения
  6. Запрет соединений
  7. Удаление правил брандмауэра
  8. Проверка статуса и правил UFW
  9. Как отключить или сбросить брандмауэр на Ubuntu

шаг 1 — убедиться в том, что IPv6 включен

В последних версиях Ubuntu IPv6 включен по умолчанию. На практике это означает, что большинство правил firewall, добавленных на сервер, будут включать и IPv4 и IPv6 версии, вторая идентифицируется как v6 в выводе команды status UFW. Чтобы убедиться в том, что IPv6 включен, вы можете проверить вашу конфигурацию UFW в файле /etc/default/ufw. Откройте этот файл с помощью nano или вашего любимого редактора командной строки:

  1. sudo nano /etc/default/ufw

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

/etc/default/ufw excerpt
  1. IPV6=yes

Сохраните и закройте файл. Если вы используете nano, вы можете сделать это, напечатав CTRL+X, затем Y и ENTER, чтобы подтвердить.

Когда UFW будет включен в следующем шаге этой инструкции, он будет настроен для записи правил firewall обоих IPv4 и IPv6.

шаг 2 — установка базовых политик

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

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

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

Чтобы установить политику UFW по умолчанию для входящего трафика на deny, выполните:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

Чтобы установить политику UFW по умолчанию для исходящего трафика на allow, выполните:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

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

Шаг 3 — Разрешение SSH-соединений

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

Разрешение профиля приложения OpenSSH в UFW

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

  1. sudo ufw app list
Output
Available applications: OpenSSH

Чтобы включить профиль приложения OpenSSH, выполните:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

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

Разрешение SSH по имени службы

Другим способом настройки UFW для разрешения входящих подключений SSH является ссылка на имя службы: ssh.

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

UFW знает, какие порты и протоколы использует служба, основываясь на файле /etc/services.

Разрешение SSH по номеру порта

Преобразованный текст в русский язык будет таким:

Альтернативно вы можете записать эквивалентную правилу, указав порт вместо имени приложения или службы. Например, это команда работает так же как предыдущие примеры:

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

Если вы настроили свой SSH daemon на использование другого порта, вам придётся指定适当端口. Например, если ваш SSH сервер слушается на порт 2222, вы можете использовать этот команд для разрешения подключений на этот порт:

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

Теперь, после того как вы конфигурировали ваш防火墙 для допуска приходящих SSH-соединений, вы можете его активировать.

Шаг 4 — Активация UFW

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

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

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

  1. sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

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

Файл firewall теперь активен. Проверьте статус UFW, используя команду 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
  • Апаche с обеими HTTP и HTTPS, используя sudo ufw allow ‘Apache Full’
  • Nginx с обеими HTTP и HTTPS, используя sudo ufw allow ‘Nginx Full’

Но не забудьте провернуть, какие приложением профили доступны для вашего сервера с помощью команды sudo ufw app list.

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

Специальные диапазоны портов

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

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

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

Когда вы指定端口范围 с UFW, вы должны указать протокол (tcp или udp), который должен применяться к правилам. Мы не рассмотрели это ранее потому что не указывая протокол автоматически разрешает оба протокола, что довольно часто идеально.

Интернациональные адресы

Когда работать с UFW, вы также можете установитьIP адреса в ваших правилах. Например, если вы хотите разрешить подключения от определенного IP адреса, например, адреса рабочего или дома 203.0.113.4, вы должны использовать параметр from, предоставляя его IP адрес, который вы хотете разрешить:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

Вы также можете установить порт, на который адрес IP разрешен для подключения, добавив после to any port порту. Примерно, если вы хотите разрешить 203.0.113.4 подключиться к порту 22 (SSH), используйте эту команду:

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

Подсетки

Путей для получения подсети адресов можно определить используя notation CIDR. Например, если вы хотя бы разрешить все адресы, которые относятся от 203.0.113.1 до 203.0.113.254, можно использовать этот команд:

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

Также вы можете также указать порт, на который подсеть 203.0.113.0/24 разрешена подключаться. Примерно так:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22
Output
Rule added

Соединения с конкретной сетевой интерфейсы

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

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

  1. ip addr
Output Excerpt
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) к нему с помощью этой команды:

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

Это приведет к тому, что ваш сервер будет принимать запросы HTTP из интернета.

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

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

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

Шаг 6 — Запрет подключений

Если вы не изменили политику по умолчанию для входящих подключений, UFW настроен на отказ всех входящих подключений. Обычно это упрощает процесс создания безопасной политики брандмауэра, требуя создания правил, которые явно разрешают определенные порты и IP-адреса.

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

Для написания правил запрета вы можете использовать ранее описанные команды, заменив разрешить на запретить.

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

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

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

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

В некоторых случаях вы также можете захотеть заблокировать исходящие соединения с сервера. Чтобы запретить всем пользователям использовать порт на сервере, например порт 25 для трафика SMTP, вы можете использовать deny out с последующим номером порта:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

Это заблокирует весь исходящий трафик SMTP на сервере.

Шаг 7 — Удаление правил

Знание того, как удалять правила брандмауэра, так важно, как и знание того, как их создавать. Есть два различных способа указать, какие правила нужно удалить: по номеру правила или по его читаемому для человека названию (аналогично тому, как правила указывались при их создании).

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

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

  1. 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 следующим образом:

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

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

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

Вместо использования номеров правил вы также можете ссылаться на правило по его читабельному наименованию, которое основано на типе правила (обычно allow или deny) и имени службы или номере порта, который был целью для этого правила, или наименованию профиля приложения, если он был использован. Например, если вы хотите удалить правило allow для профиля приложения с именем Apache Full, который ранее был включен, вы можете использовать:

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

Команда delete работает одинаково для правил, которые были созданы, ссылаясь на службу по ее имени или номеру порта. Например, если ранее вы установили правило для разрешения HTTP-соединений с sudo ufw allow http, вот как вы можете удалить это правило:

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

Так как имена служб взаимозаменяемы с номерами портов при указании правил, вы также можете ссылаться на это же правило как allow 80, вместо allow http:

  1. sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)

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

Шаг 8 — Проверка состояния и правил UFW

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

  1. 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 — Отключение или Ресеting Фаерволла

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

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

Созданные вами при UFW правила более не будут активны. Вы всегда можете использовать sudo ufw enable если вам понадобится восстановить его по稍后 времени.

Если у вас уже имеются конфигурации UFW, но вы решили начать заново, вы можете использовать команду reset:

  1. sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353' Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353' Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

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

Развертывайте свои приложения на фронтенде из GitHub с помощью ДигиталОcean Аpp Платформы. Лет DigitalOcean фокусируется на масштабировании вашего приложения.

КонCLЮСИЯ

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

Дополнительно информацию о более распространенных конфигурациях UFW можно получить в руководстве UFW ЭссенцIALЫ: Совместные правила и команды.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04