Содержание

UFW (Uncomplicated Firewall)

Базовое использование

sudo ufw help
sudo ufw status
sudo ufw status numbered
sudo ufw logging on
sudo ufw enable
sudo ufw allow ssh/tcp
sudo ufw delete 2
sudo ufw insert 2 deny  from 11.21.42.16 to any
sudo ufw status numbered
sudo ufw logging medium
КомандаОписание
sudo apt install ufw Установка
sudo ufw status verboseТекущий статус и текущие правила
sudo ufw enableВключение
sudo ufw disableВыключение

Управление профилями

КомандаОписание
sudo vim /etc/default/ufw посмотреть политики безопасности
sudo ufw app listпрофили приложений
sudo vim /etc/ufw/applications.dИзменить профили приложений
sudo ufw app info 'OpenSSH'просмотр детальной информации про OpenSSH
sudo ufw reloadперезагрузка UFW
sudo ufw <allow/deny> <название_профиля>Разрешить/запретить профиль
sudo ufw allow App1Разрешить App1

Политика по умолчанию

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

ufw status verbose посмотреть
 
sudo ufw default deny incoming
sudo ufw delete deny from any
#or
sudo ufw default allow outgoing

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

КомандаОписание
sudo ufw allow 1234/tcpразрешить порт/протокол
sudo ufw allow http
sudo ufw allow <портN>:<портM>/<протокол>промежуток портов
sudo ufw allow 5000:5003/udp
sudo ufw allow from 192.168.1.0/24
sudo ufw allow from 111.111.111.111Разрешить все порты с адреса 111.111.111.111
sudo ufw allow from 111.111.111.111 to any port 22 разрешить с адреса 111.111.111.111 порт 22
sudo ufw allow from 192.168.1.0/24 Разрешить все порты с подсети
sudo ufw allow from 192.168.1.0/24 to any port 22 Разрешить порт 22 с подсети
sudo ufw allow in on eth2 to any port 22Разрешить все входящие пакеты на интерфейсе eth2 на порт 22
sudo ufw status numberedПосмотреть статус правил с номерами
sudo ufw deny <порт>/<протокол>
sudo ufw deny 1234/tcp
sudo ufw deny from 111.111.111.111Запретить все пакеты с адреса 111.111.111.111
sudo ufw delete 2Удалить правило с номером 2
sudo ufw delete allow 443Удалить правило, разрешающее 443 порт

Работа с сетевым интерфейсом

С помощью ufw можно настроить подключение к конкретному порту определенного интерфейса:

sudo ufw allow in on <имя интерфейса> to any port <порт> Например:

sudo ufw allow in on eth2 to any port 22

Разрешить Ping/ICMP

ICMP блокируется в файле, путём замены ACCEPT на DROP

  sudo vim /etc/ufw/before.rules

In order to disable ping (icmp) requests, you need to edit /etc/ufw/before.rules and remove the following lines:

   
# ok icmp codes
-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
or change the "ACCEPT" to "DROP"

# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type source-quench -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

Файлы настроек

/etc/default/ufwhigh level configuration, such as default policies, IPv6 support and kernel modules to use
/etc/ufw/before[6].rulesrules in these files are evaluated before any rules added via the ufw command
/etc/ufw/after[6].rulesrules in these files are evaluated after any rules added via the ufw command
/etc/ufw/sysctl.confkernel network tunables
/var/lib/ufw/user[6].rules or /lib/ufw/user[6].rules (0.28 and later)rules added via the ufw command (should not normally be edited by hand)
/etc/ufw/ufw.confsets whether or not ufw is enabled on boot, and in 9.04 (ufw 0.27) and later, sets the LOGLEVEL
/etc/ufw/after.initinitialization customization script run after ufw is initialized (ufw 0.34 and later)
/etc/ufw/before.initinitialization customization script run before ufw is initialized (ufw 0.34 and later)

After modifying any of the above files, activate the new settings with:

$ sudo ufw disable
$ sudo ufw enable

Логирование

Check Firewall logs using the tail command

tail -f /var/log/ufw.log
grep -i ufw /var/log/syslog
grep -i ufw /var/log/kern.log

Просмотр только необходимых полей

awk '/SRC=.*\.+/{  print $1,$2,$3,$7,$8,$12,$13,$19,$20,$21 }'  /var/log/ufw.log

Просмотр блокировки BLOCK

 grep -P 'BLOCK.*IN=eth0.*SRC=\d{0,3}\.' /var/log/ufw.log | awk -f ufwlog.awk | column -t

Сделать файл ufwlog.awk

BEGIN{
}
{
 IPS = substr($12,5);
 IPD = substr($13,5);
 PROT = substr($19,7);
 SPORT = substr($20,5);
 DPORT = substr($21,5);
 print $1,$2,$3,$7,$8,IPS,IPD,PROT,SPORT,DPORT
}
END{}

Для просмотр ALLOW

Сделать файл ufwlogallow.awk

BEGIN{
 
}
{
 IPS = substr($11,5);
 IPD = substr($12,5);
 PROT = substr($19,7);
 SPORT = substr($20,5);
 DPORT = substr($21,5);
 print $1,$2,$3,$7,$8,IPS,IPD,PROT,SPORT,DPORT
}
END{}
grep -P 'ALLOW.*IN=eth0.*SRC=\d{0,3}\.' /var/log/ufw.log | awk -f ufwlogallow.awk | column -t

Различные уровни протоколирования брандмауэра UFW

Существует 5 уровней ведения журнала UFW.

Команда
off Означает, что ведение журнала отключено.
low Сохраняет журналы, связанные с блокированными пакетами, которые не соответствуют текущим правилам брандмауэра, и показывает записи журналов, связанные с правилами.
mediumВ дополнение ко всем журналам, предлагаемым на низком уровне, вы получаете журналы недействительных пакетов, новых соединений и журналы, созданные с помощью ограничения скорости
highБудет включать журналы для пакетов с ограничением скорости и без ограничения скорости.
fullЭтот уровень аналогичен высокому уровню, но не включает ограничение скорости.
Команда
sudo ufw logging mediumустановка логирование на уровень medium
sudo ufw allow log service_nameразрешить логирование сервиса
sudo ufw allow log 22/tcpРазрешить попадание в лог всех, кто лезет на 22 порт

Команда
Dec 2 05:48:09 LHB kernel: [180.759805] Показывает дату, время, имя хоста и время ядра с момента загрузки.
[UFW BLOCK]Если вы используете журналы UFW в настройках по умолчанию, уровень регистрации заблокирован на низком уровне. Это означает, что будут показаны только отклоненные пакеты, которые не соответствуют правилам UFW. А UFW BLOCK просто указывает на то, что пакет был заблокирован.
[UFW ALLOW] Несмотря на уровень протоколирования по умолчанию, если вы добавили правило протоколирования, оно будет регистрировать каждую деталь, связанную с этой службой, а UFW ALLOW указывает на то, что пакет был разрешен.
IN=ens33Показывает интерфейс, с которого прибыл пакет.
OUT=Для большинства пользователей этот показатель не будет иметь никакого значения, а если он показывает какое-либо значение, значит, произошло исходящее событие.
MAC=00:0c:29:71:06:82:8c:b8:7e:b7:f7:46:08:00 Вся строка цифр и букв - это не что иное, как комбинация MAC-адресов источника и назначения.
SRC=192.168.1.7Указывает IP-адрес источника пакетов.
DST=192.168.1.5Указывает IP-адрес назначения пакета, который будет IP-адресом вашей системы.
LEN=60Показывает длину пакета (в моем случае 60 байт).
TOS=0x10Указывает тип услуги.
PREC=0x00Показывает тип обслуживания «Приоритет».
TTL=64Показывает TTL (Time To Live) для пакета. Проще говоря, он показывает, как долго пакет будет отскакивать, пока не истечет срок его действия, если пункт назначения не указан.
ID=4444Дает уникальный идентификатор IP-датаграммы, который будет общим для фрагментов одного и того же пакета.
DFФлаг TCP «Не фрагментировать».
PROTO=TCPУказывает протокол, используемый для передачи пакета.
SPT=55656Получает порт источника пакета.
DPT=22Указывает порт назначения пакета.
WINDOW=64240Показывает размер окна TCP.
RES=0x00Указывает на зарезервированные биты.
SYN URGP=0Здесь флаг SYN указывает на запрос нового соединения, а URGP=0 означает, что соединение не было установлено.
ACKФлаг подтверждения используется для индикации того, что пакет успешно получен хостом.
PSHФлаг Push указывает на то, что входящие данные должны быть переданы приложению вместо буферизации.