Как настроить брандмауэр с помощью UFW на облачном сервере Ubuntu и Debian

Введение

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

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

В этом руководстве вы научитесь настраивать брандмауэр с помощью UFW для обеспечения безопасности облачного сервера Ubuntu или Debian. Вы также узнаете, как настроить правила по умолчанию в UFW для разрешения или блокировки соединений для портов и IP-адресов, удалять созданные вами правила, отключать и включать UFW, а также сбрасывать все настройки на значения по умолчанию, если вы предпочитаете.

Предварительные требования

Для следования этому руководству вам понадобится сервер, который работает под управлением Ubuntu или Debian. На вашем сервере должен быть создан пользователь с правами sudo, но не root. Чтобы настроить это для Ubuntu, следуйте нашему руководству по Начальная настройка сервера с Ubuntu 20.04. Чтобы настроить это для Debian, следуйте нашему руководству по Начальная настройка сервера с Debian 11. Оба этих руководства по начальной настройке сервера гарантируют, что на вашем компьютере установлен UFW и что у вас есть безопасная среда, которую вы можете использовать для практики создания правил брандмауэра.

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

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

  1. sudo nano /etc/default/ufw

Подтвердите, что IPV6 установлен в yes:

/etc/default/ufw
# /etc/default/ufw # # Установите значение yes, чтобы применить правила для поддержки IPv6 (no означает только IPv6 на локальном интерфейсе # принимается). Вам нужно будет 'отключить' а затем 'включить' брандмауэр для # вступления изменений в силу. IPV6=yes

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

Теперь перезапустите свой брандмауэр, сначала отключив его:

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

Затем снова включите его:

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

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

Настройка стандартных правил UFW

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

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

Затем укажите правило для исходящих подключений:

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

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

  1. sudo ufw default deny outgoing

Разрешение подключений к брандмауэру

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

  1. sudo ufw allow ssh

Если ваши изменения были успешными, вы получите следующий вывод:

Output
Rule added Rule added (v6)

UFW поставляется с некоторыми значениями по умолчанию, такими как команда ssh, использованная в предыдущем примере. В качестве альтернативы вы можете разрешить входящие подключения к порту 22/tcp, который использует протокол управления передачей (TCP) для выполнения того же самого:

  1. sudo ufw allow 22/tcp

Однако, если вы попытаетесь это сделать после того, как уже выполнили allow ssh, вы получите следующее сообщение, поскольку правило уже существует:

Output
Skipping adding existing rule Skipping adding existing rule (v6)

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

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

Защита веб-серверов

Для защиты веб-сервера с доступом по протоколу передачи файлов (FTP) вам потребуется разрешить подключения для порта 80/tcp.

Разрешение подключений к порту 80 полезно для веб-серверов, таких как Apache и Nginx, которые прослушивают запросы на подключение по HTTP. Для этого разрешите подключения к порту 80/tcp:

  1. sudo ufw allow 80/tcp

Обычно UFW предоставляет профили с необходимыми правилами для функционирования веб-сервера. Если нет, профили веб-сервера могут быть сохранены как “WWW” и открыты как ftp или tcp, как в следующих примерах:

  1. sudo ufw allow www

Также вы можете использовать ftp или порт 21, чтобы разрешить подключения по FTP:

  1. sudo ufw allow ftp
  1. sudo ufw allow 21/tcp

Для подключений FTP вам также необходимо разрешить подключения для порта 20:

  1. sudo ufw allow 20/tcp

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

Указание диапазонов портов

Вы также можете указать диапазоны портов для разрешения или запрета с помощью UFW. Для этого сначала необходимо указать порт в нижнем диапазоне, за которым следует двоеточие (:), а затем верхний конец диапазона. Наконец, вы должны указать протокол (tcp или udp), к которому должны применяться правила.

Например, следующая команда разрешит доступ TCP ко всем портам от 1000 до 2000, включительно:

  1. sudo ufw allow 1000:2000/tcp

Точно так же следующая команда запретит подключения UDP ко всем портам от 1234 до 4321:

  1. sudo ufw deny 1234:4321/udp

Указание IP-адресов

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

  1. sudo ufw allow from your_server_ip

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

Запрещение подключений

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

  1. sudo ufw deny 80/tcp

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

Если вы хотите удалить некоторые из правил, которые вы наложили, используйте delete и укажите правило, которое вы хотите убрать:

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

Если правила длинные и сложные, есть альтернативный двухэтапный подход. Сначала сгенерируйте пронумерованный список текущих правил:

  1. sudo ufw status numbered

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

  1. sudo ufw delete number
Output
Status: active To Action From -- ------ ---- [ 1] OpenSSH ALLOW IN Anywhere [ 2] 22/tcp ALLOW IN Anywhere [ 3] 2222/tcp ALLOW IN Anywhere [ 4] 80 ALLOW IN Anywhere [ 5] 20/tcp ALLOW IN Anywhere …

Например, если порт 80 имеет номер 4 в списке, используйте следующий синтаксис. Вам также может быть задан вопрос, хотите ли вы продолжить операцию. Вы можете решить да y или нет n:

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

Включение UFW

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

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

Чтобы подтвердить, что ваши изменения прошли успешно, проверьте статус, чтобы просмотреть список правил:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 22/tcp ALLOW Anywhere 2222/tcp ALLOW Anywhere 20/tcp ALLOW Anywhere 80/tcp DENY Anywhere …

Вы также можете использовать verbose для более подробного вывода:

  1. sudo ufw status verbose

Чтобы отключить UFW, выполните следующее:

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

Сброс настроек по умолчанию

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

  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.20220217_190530' Backing up 'before.rules' to '/etc/ufw/before.rules.20220217_190530' Backing up 'after.rules' to '/etc/ufw/after.rules.20220217_190530' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20220217_190530' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20220217_190530' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20220217_190530'

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

Вывод

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-server