Что такое UFW и его первоначальная настройка на Ubuntu-сервере

Обновлено:

Брандмауэры, они же фаерволы, они же межсетевые экраны, – это программы для фильтрации сетевого трафика. Брандмауэр регулирует, какие приложения могут получать данные извне через порт, сетевой интерфейс или в зависимости от IP источника, а какие – нет. Благодаря этому создается дополнительная защита, что важно для серверов.

UFW (uncomplicated firewall – несложный фаервол) на самом деле не брандмауэр, а интерфейс к IPTables. В свою очередь, утилиту iptables также часто называют брандмауэром, хотя она является интерфейсом управления к Netfilter.

Netfilter – это межсетевой экран Linux, настраиваемый через iptables. Настраивать правила фильтрации трафика через iptables относительно сложно, поэтому используют утилиту ufw, которая позволяет упростить процесс настройки.

Обычно в Ubuntu ufw устанавливается с системой, но находится в выключенном (неактивном) состоянии:

# ufw status
Status: inactive

Некоторые программы, принимающие по сети данные (среди них Openssh-server, Nginx, Apache), при установки сами прописывают в UFW свои так называемые профили. Зарегистрированными таким образом сервисами можно управлять (открывать/закрывать для них получение данных по сети), обращаясь к ним по именам, а не номерам портов. Имеющиеся профили содержатся в каталоге /etc/ufw/applications.d/:

# ls /etc/ufw/applications.d/
openssh-server
# cat /etc/ufw/applications.d/openssh-server 
[OpenSSH]
title=Secure shell server, an rshd replacement
description=OpenSSH is a free implementation of the Secure Shell protocol.
ports=22/tcp

Чтобы в удобном виде выводить список зарегистрированных профилей и информацию по ним, используют команды ufw app list и ufw app info 'Имя_Сервиса':

# ufw app list
Available applications:
  OpenSSH
# ufw app info 'OpenSSH'
Profile: OpenSSH
Title: Secure shell server, an rshd replacement
Description: OpenSSH is a free implementation of the Secure Shell protocol.

Port:
  22/tcp

Если изначально брандмауэр выключен, то есть команда ufw status возвращает Status: inactive, следует выполнить такую серию команд:

# ufw default deny incoming
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
# ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
# ufw allow 'OpenSSH'
Rules updated
Rules updated (v6)
# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Первые две команды здесь для подстраховки, так как по умолчанию все так и есть — всё входящее запрещено, разрешено всё исходящее. Поэтому важно разрешить получение данных для OpenSSH до того, как будет включен фаервол, иначе вы не сможете подключаться по протоколу ssh: ufw allow 'OpenSSH'. Команда ufw enable переводит фаервол в активный статус.

# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6) 

Если потребуется выключить фаервол, используется команда disable.

# ufw disable 
Firewall stopped and disabled on system startup
# ufw status
Status: inactive

В дальнейшем при установке веб-сервера (Apache или Nginx) получение им трафика надо будет разрешать в UFW.