Настройка файрвола UFW
Полное руководство по настройке Uncomplicated Firewall (UFW) в Ubuntu и Debian.
Основы UFW
Установка и первоначальная настройка
# Установка UFW (обычно уже установлен)
sudo apt update
sudo apt install ufw
# Проверка статуса
sudo ufw status
# Базовая настройка
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Включение UFW
sudo ufw enable
# Отключение UFW
sudo ufw disable
Базовые правила
# Разрешить SSH (важно сделать до включения UFW!)
sudo ufw allow ssh
sudo ufw allow 22/tcp
# Разрешить HTTP и HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow http
sudo ufw allow https
# Разрешить определенный порт
sudo ufw allow 3000/tcp
sudo ufw allow 8080/udp
# Разрешить диапазон портов
sudo ufw allow 6000:6007/tcp
Расширенные правила
Правила по IP адресам
# Разрешить доступ с определенного IP
sudo ufw allow from 192.168.1.100
# Разрешить доступ с подсети
sudo ufw allow from 192.168.1.0/24
# Разрешить доступ с IP на определенный порт
sudo ufw allow from 192.168.1.100 to any port 22
# Разрешить доступ к определенному интерфейсу
sudo ufw allow in on eth0 to any port 80
Блокировка трафика
# Заблокировать IP адрес
sudo ufw deny from 203.0.113.100
# Заблокировать подсеть
sudo ufw deny from 203.0.113.0/24
# Заблокировать исходящий трафик на порт
sudo ufw deny out 25
# Заблокировать определенный порт
sudo ufw deny 23/tcp
Правила по протоколам
# Разрешить ICMP (ping)
sudo ufw allow in on eth0 from any to any port 22 proto tcp
# Правило для UDP
sudo ufw allow from 192.168.1.0/24 to any port 53 proto udp
# Разрешить мультикаст
sudo ufw allow in on eth0 to 224.0.0.0/4
Управление правилами
Просмотр правил
# Просмотр статуса с номерами правил
sudo ufw status numbered
# Подробный статус
sudo ufw status verbose
# Показать добавленные правила в формате команд
sudo ufw show added
Удаление правил
# Удалить правило по номеру
sudo ufw delete 3
# Удалить правило по содержимому
sudo ufw delete allow 80/tcp
sudo ufw delete allow from 192.168.1.100
# Сбросить все правила
sudo ufw --force reset
Изменение правил
# Вставить правило в определенную позицию
sudo ufw insert 1 allow from 192.168.1.0/24
# Изменить существующее правило (удалить и добавить заново)
sudo ufw delete allow 80/tcp
sudo ufw allow 80/tcp comment 'HTTP traffic'
Конфигурация для серверов
Веб-сервер (LAMP/LEMP)
#!/bin/bash
# web-server-firewall.sh
# Сброс правил
sudo ufw --force reset
# Политики по умолчанию
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH доступ (измените порт если необходимо)
sudo ufw allow 22/tcp comment 'SSH'
# Веб-сервер
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# FTP (если используется)
sudo ufw allow 21/tcp comment 'FTP'
sudo ufw allow 20/tcp comment 'FTP Data'
# MySQL (только с локальной сети)
sudo ufw allow from 192.168.1.0/24 to any port 3306 comment 'MySQL'
# Включение UFW
sudo ufw enable
echo "Файрвол для веб-сервера настроен"
Сервер баз данных
#!/bin/bash
# database-server-firewall.sh
# Сброс правил
sudo ufw --force reset
# Политики по умолчанию
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH доступ
sudo ufw allow from 192.168.1.0/24 to any port 22 comment 'SSH from local network'
# MySQL/MariaDB
sudo ufw allow from 192.168.1.0/24 to any port 3306 comment 'MySQL'
# PostgreSQL
sudo ufw allow from 192.168.1.0/24 to any port 5432 comment 'PostgreSQL'
# Redis
sudo ufw allow from 192.168.1.0/24 to any port 6379 comment 'Redis'
# MongoDB
sudo ufw allow from 192.168.1.0/24 to any port 27017 comment 'MongoDB'
# Включение UFW
sudo ufw enable
echo "Файрвол для сервера БД настроен"
Почтовый сервер
#!/bin/bash
# mail-server-firewall.sh
# Базовые правила
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH
sudo ufw allow 22/tcp comment 'SSH'
# SMTP
sudo ufw allow 25/tcp comment 'SMTP'
sudo ufw allow 587/tcp comment 'SMTP Submission'
sudo ufw allow 465/tcp comment 'SMTPS'
# POP3/IMAP
sudo ufw allow 110/tcp comment 'POP3'
sudo ufw allow 995/tcp comment 'POP3S'
sudo ufw allow 143/tcp comment 'IMAP'
sudo ufw allow 993/tcp comment 'IMAPS'
# HTTP/HTTPS для веб-интерфейса
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enable
Логирование и мониторинг
Настройка логирования
# Включить логирование
sudo ufw logging on
# Уровни логирования: off, low, medium, high, full
sudo ufw logging medium
# Просмотр логов
sudo tail -f /var/log/ufw.log
# Анализ заблокированных соединений
sudo grep "[UFW BLOCK]" /var/log/ufw.log
Скрипт мониторинга
#!/bin/bash
# ufw-monitor.sh
LOG_FILE="/var/log/ufw.log"
REPORT_FILE="/tmp/ufw-report.txt"
echo "=== UFW Отчет $(date) ===" > $REPORT_FILE
echo >> $REPORT_FILE
# Топ заблокированных IP
echo "Топ 10 заблокированных IP адресов:" >> $REPORT_FILE
grep "UFW BLOCK" $LOG_FILE | awk '{print $12}' | cut -d= -f2 | sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE
echo >> $REPORT_FILE
# Топ портов
echo "Топ заблокированных портов:" >> $REPORT_FILE
grep "UFW BLOCK" $LOG_FILE | awk '{print $14}' | cut -d= -f2 | sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE
echo >> $REPORT_FILE
# Статистика за последний час
echo "Заблокированные соединения за последний час:" >> $REPORT_FILE
grep "UFW BLOCK" $LOG_FILE | grep "$(date '+%b %d %H')" | wc -l >> $REPORT_FILE
cat $REPORT_FILE
Продвинутая конфигурация
Кастомные правила
# Создание файла с кастомными правилами
sudo nano /etc/ufw/before.rules
# Добавление в начало файла (после заголовков):
# Разрешить loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT
# Разрешить ICMP
-A ufw-before-input -p icmp --icmp-type destination-unreachable -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
# Защита от Port Scanning
-A ufw-before-input -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Fail2Ban интеграция
# Установка Fail2Ban
sudo apt install fail2ban
# Создание конфигурации для UFW
sudo nano /etc/fail2ban/jail.local
[ufw]
enabled = true
filter = ufw
logpath = /var/log/ufw.log
maxretry = 5
bantime = 3600
# Создание фильтра
sudo nano /etc/fail2ban/filter.d/ufw.conf
[Definition]
failregex = \[UFW BLOCK\] IN=.* SRC=<HOST>
ignoreregex =
Автоматизация управления
#!/bin/bash
# ufw-backup-restore.sh
case "$1" in
backup)
# Создание бэкапа правил
sudo ufw status numbered > /etc/ufw/backup-$(date +%Y%m%d).txt
sudo cp /etc/ufw/user.rules /etc/ufw/user.rules.backup
sudo cp /etc/ufw/user6.rules /etc/ufw/user6.rules.backup
echo "Бэкап UFW создан"
;;
restore)
# Восстановление из бэкапа
sudo ufw --force reset
sudo cp /etc/ufw/user.rules.backup /etc/ufw/user.rules
sudo cp /etc/ufw/user6.rules.backup /etc/ufw/user6.rules
sudo ufw enable
echo "UFW восстановлен из бэкапа"
;;
*)
echo "Использование: $0 {backup|restore}"
exit 1
;;
esac
Тестирование и отладка
Проверка правил
# Тестирование без применения
sudo ufw --dry-run enable
# Проверка синтаксиса конфигурации
sudo ufw --dry-run reload
# Проверка подключения к портам
nmap -p 22,80,443 localhost
# Тестирование с удаленного хоста
telnet server_ip 80
nc -zv server_ip 80
Отладка
# Включить детальное логирование
sudo ufw logging full
# Просмотр правил iptables, созданных UFW
sudo iptables -L -n -v
# Временное отключение для отладки
sudo ufw disable
# ... отладка ...
sudo ufw enable
Безопасность
Всегда разрешайте SSH доступ перед включением UFW, чтобы не потерять доступ к серверу.
Осторожность
Будьте внимательны при настройке правил на удаленных серверах. Неправильная конфигурация может заблокировать ваш доступ.