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/ufw | high level configuration, such as default policies, IPv6 support and kernel modules to use |
/etc/ufw/before[6].rules | rules in these files are evaluated before any rules added via the ufw command |
/etc/ufw/after[6].rules | rules in these files are evaluated after any rules added via the ufw command |
/etc/ufw/sysctl.conf | kernel 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.conf | sets whether or not ufw is enabled on boot, and in 9.04 (ufw 0.27) and later, sets the LOGLEVEL |
/etc/ufw/after.init | initialization customization script run after ufw is initialized (ufw 0.34 and later) |
/etc/ufw/before.init | initialization 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 указывает на то, что входящие данные должны быть переданы приложению вместо буферизации. |