0

Настройка брандмауэра с UFW

28.07.2023

установить его с помощью команды sudo apt install ufw.

Шаг 1 — Использование IPv6 с UFW (опционально)

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

sudo nano /etc/default/ufw

Copy

Убедитесь, что параметр IPV6 имеет значение yes. Конфигурация должна выглядеть следующим образом:

/etc/default/ufw excerpt

IPV6=yes

Сохраните и закройте файл. После активации UFW будет настроен для записи правил брандмауэра для IPv4 и для IPv6. Однако перед включением UFW нужно убедиться, что ваш брандмауэр настроен для подключения через SSH. Для начала настроим политики по умолчанию.

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

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

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

sudo ufw default deny incoming
sudo ufw default allow outgoing

Copy

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

Шаг 3 — Разрешение подключений SSH

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

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

sudo ufw allow ssh

Copy

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

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

sudo ufw allow 22

Copy

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

sudo ufw allow 2222

Copy

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

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

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

sudo ufw enable

Copy

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

Теперь брандмауэр включен. Запустите команду 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

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

Определенные диапазоны портов

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

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

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

Copy

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

Конкретные IP-адреса

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

sudo ufw allow from 203.0.113.4

Copy

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

sudo ufw allow from 203.0.113.4 to any port 22

Copy

Подсети

Если вы хотите разрешить подсеть IP-адресов, вы можете указать маску сети с помощью нотации CIDR. Например, если вы хотите разрешить все IP-адреса в диапазоне от 203.0.113.1 до 203.0.113.254, вы можете использовать следующую команду:

sudo ufw allow from 203.0.113.0/24

Copy

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

sudo ufw allow from 203.0.113.0/24 to any port 22

Copy

Подключения к определенному сетевому интерфейсу

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

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

ip addr

Copy

Output Excerpt2: 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) для этого интерфейса с помощью следующей команды:

sudo ufw allow in on eth0 to any port 80

Copy

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

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

sudo ufw allow in on eth1 to any port 3306

Copy

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

Шаг 6 — Запрет соединений

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

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

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

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

sudo ufw deny http

Copy

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

sudo ufw deny from 203.0.113.4

Copy

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

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

Знать процедуру удаления правил брандмауэра так же важно, как и знать процедуру их создания. Существует два разных способа указывать правила для удаления: по номеру правила или по фактическому правилу (так же, как правила задавались при их создании). Начнем с метода удаления по номеру правила, поскольку этот метод проще.

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

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

sudo ufw status numbered

Copy

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 delete, как показано здесь:

sudo ufw delete 2

Copy

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

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

Вместо номеров правил можно указывать фактические имена удаляемых правил. Например, если вы хотите удалить правило allow http, вы можете использовать следующую команду:

sudo ufw delete allow http

Copy

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

sudo ufw delete allow 80

Copy

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

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

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

sudo ufw status verbose

Copy

Если UFW отключен (по умолчанию), вы увидите примерно следующее:

OutputStatus: inactive

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

OutputStatus: 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 — Отключение или сброс UFW (необязательно)

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

sudo ufw disable

Copy

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

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

sudo ufw reset

Copy

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

Заключение

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

Introduction

UFW also known as Uncomplicated Firewall is an interface to iptables and is particularly well-suited for host-based firewalls. UFW provide an easy to use interface for beginner user who is unfamiliar with firewall concepts. It is most popular firewall tool originating from Ubuntu. It supports both IPv4 and IPv6.

In this tutorial, we will learn how to install and use UFW firewall on Linux.

Requirements

  • Any Linux based distribution installed on your system
  • root privileges setup on your system

Installing UFW

Ubuntu

By default, UFW is available in most Ubuntu based distributions. If it is deleted, you can install it by running the following linux command.

# apt-get install ufw -y 

Debian

You can install UFW in Debian by running the following linux command:

# apt-get install ufw -y

CentOS

By default, UFW is not available in CentOS repository. So you will need to install the EPEL repository to your system. You can do this by running the following linux command:

# yum install epel-release -y

Once the EPEL repository is installed, you can install UFW by just running the following linux command:

# yum install --enablerepo="epel" ufw -y

After installing UFW, start UFW service and enable it to start on boot time by running the following linux command.

# ufw enable 

Next, check the status of UFW with the following linux command. You should see the following output:

# ufw status 
Status: active 

You can also disable UFW firewall by running the following linux command:

# ufw disable 


Set UFW Default Policy

By default, UFW default policy setup to block all incoming traffic and allow all outgoing traffic.

You can setup your own default policy with the following linux command.

ufw default allow outgoing 
ufw default deny incoming 

Add and Delete Firewall Rules

You can add rules for allowing incoming and outgoing traffic in two ways, using the port number or using the service name.

For example, if you want to allow both incoming and outgoing connections of HTTP service. Then run the following linux command using the service name.

ufw allow http 

Or, run the following command using the port number:

ufw allow 80 

If you want to filter packets based on TCP or UDP, then run the following command:

ufw allow 80/tcp 
ufw allow 21/udp 

You can check the status of added rules with the following linux command.

ufw status verbose 

You should see the following output:

Status: active 
Logging: on (low) 
Default: deny (incoming), allow (outgoing), deny (routed) 
New profiles: skip 

To                         Action      From 
--                         ------      ---- 
80/tcp                     ALLOW IN    Anywhere 
21/udp                     ALLOW IN    Anywhere 
80/tcp (v6)                ALLOW IN    Anywhere (v6) 
21/udp (v6)                ALLOW IN    Anywhere (v6) 

You can also deny any incoming and outgoing traffic any time with the following commands:

# ufw deny 80 
# ufw deny 21 

If you want to delete allowed rules for HTTP, simply prefix the original rule with delete as shown below:

# ufw delete allow http 
# ufw delete deny 21 


Advanced UFW rules

You can also add specific IP address to allow and deny access to all services. Run the following command to allow the IP 192.168.0.200 to access all services on the server:

# ufw allow from 192.168.0.200 

To deny the IP 192.168.0.200 to access all services on server:

# ufw deny from 192.168.0.200 

You can allow range of IP address in UFW. Run the following command to allow all the connections from IP 192.168.1.1 to 192.168.1.254:

# ufw allow from 192.168.1.0/24 

To allow IP address 192.168.1.200 access to port 80 using TCP, run the following linux command:

# ufw allow from 192.168.1.200 to any port 80 proto tcp 

To allow access to tcp and udp port range from 2000 to 3000, run the following linux command:

# ufw allow 2000:3000/tcp 
# ufw allow 2000:3000/udp 

If you want to block access to port 22 from IP 192.168.0.4 and 192.168.0.10 but allow all other IPs to access to port 22, run the following command:

# ufw deny from 192.168.0.4 to any port 22 
# ufw deny from 192.168.0.10 to any port 22 
# ufw allow from 192.168.0.0/24 to any port 22 

To allow HTTP traffic on network interface eth0, run the following linux command:

# ufw allow in on eth0 to any port 80 

By default UFW allows ping requests. if you want to deny ping request, you will need to edit /etc/ufw/before.rules file:

# nano /etc/ufw/before.rules 

Remove the following lines:

-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT 
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT 
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT 
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT 
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT 

Save the file, when you are finished.

If you ever need to Reset UFW, removing all of your rules, you can do so via the following linux command.

# ufw reset 

Configure NAT with UFW

If you want to NAT the connections from the external interface to the internal using UFW. Then you can do this by editing /etc/default/ufw and /etc/ufw/before.rules file.
First, open /etc/default/ufw file using nano editor:

# nano /etc/default/ufw

Change the following line:

DEFAULT_FORWARD_POLICY="ACCEPT"


Next, you will also need to allow ipv4 forwarding. You can do this by editing /etc/ufw/sysctl.conf file:

# nano /etc/ufw/sysctl.conf

Change the following line:

net/ipv4/ip_forward=1 

Next, you will need to add NAT to ufw’s configuration file. You can do this by editing /etc/ufw/before.rules file:

# nano /etc/ufw/before.rules

Add the following lines just before the filter rules:

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic through eth0 - Change to match you out-interface
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# don't delete the 'COMMIT' line or these nat table rules won't
# be processed
COMMIT
Save the file when you are finished. Then restart UFW with the following linux command:
ufw disable
ufw enable

Configure Port Forwarding with UFW

If you want to forward traffic from Public IP eg. 150.129.148.155 port 80 and 443 to another internal server with IP address 192.168.1.120. Then you can do this by editing /etc/default/before.rules:

# nano /etc/default/before.rules

Change the file as shown below:

:PREROUTING ACCEPT [0:0] 
-A PREROUTING -i eth0 -d 150.129.148.155   -p tcp --dport 80 -j  DNAT --to-destination 192.168.1.120:80 
-A PREROUTING -i eth0 -d 150.129.148.155   -p tcp --dport 443 -j  DNAT --to-destination 192.168.1.120:443 
-A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE 

Next, restart UFW with the following command:

# ufw disable
# ufw enable

Next, you will also need to allow port 80 and 443. You can do this by running the following command:

# ufw allow proto tcp from any to 150.129.148.155 port 80
# ufw allow proto tcp from any to 150.129.148.155 port 443

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:393 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(845): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 393