установить его с помощью команды 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, которые используют порты 6000
–6007
, нужно использовать следующие команды:
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
Свежие комментарии