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 insert 6 allow from 11.21.42.16 to any port 22 comment "SSH MyProvisder" 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/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 указывает на то, что входящие данные должны быть переданы приложению вместо буферизации. |