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 ufw allow from 111.111.111.111 to any port 22 comment "my home computer"
КомандаОписание
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
 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{}

Сделать файл 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

Существует 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 указывает на то, что входящие данные должны быть переданы приложению вместо буферизации.