Перейти к основному содержимому
Вернуться в категорию

Настройка брандмауэра: руководство по iptables и ufw

Настройка брандмауэра Linux-сервера с помощью iptables и ufw: создание правил SSH/HTTP/HTTPS, сохранение правил после перезагрузки и тестирование конфигурации.

Время чтения: 12 мин Управление сервером
firewalliptablesufwбезопасностьпортlinuxсервер

Содержание

Настройка брандмауэра: руководство по iptables и ufw

Брандмауэр контролирует входящий и исходящий сетевой трафик на вашем сервере. В Linux есть два популярных инструмента: мощный низкоуровневый iptables и удобный ufw (Uncomplicated Firewall). Это руководство охватывает оба инструмента.

Серверы REXE оснащены сетевым брандмауэром Path Panel. Серверный брандмауэр добавляет дополнительный уровень безопасности. Рекомендуется использовать оба вместе.

Основы iptables

iptables — это инструмент командной строки для управления фреймворком netfilter ядра Linux. Он обеспечивает фильтрацию пакетов, NAT и перенаправление портов.

Просмотр текущих правил

hljs bash
# Список всех правил
sudo iptables -L -n -v

# Список с номерами строк
sudo iptables -L -n -v --line-numbers

# Просмотр таблицы NAT
sudo iptables -t nat -L -n -v

Основные концепции iptables

КонцепцияОписание
ChainЦепочка правил: INPUT, OUTPUT, FORWARD
TableТаблица правил: filter, nat, mangle
TargetДействие правила: ACCEPT, DROP, REJECT
MatchКритерий совпадения: порт, протокол, IP

Создание базовых правил

hljs bash
# Разрешить loopback-интерфейс
sudo iptables -A INPUT -i lo -j ACCEPT

# Разрешить установленные соединения
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешить SSH (порт 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Разрешить HTTP (порт 80)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# Разрешить HTTPS (порт 443)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Блокировать весь остальной входящий трафик
sudo iptables -A INPUT -j DROP

Всегда разрешайте SSH перед добавлением правила DROP. Иначе вы заблокируете себе доступ к серверу.

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

hljs bash
# Удалить по номеру правила
sudo iptables -D INPUT 3

# Удалить по содержимому правила
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT

# Очистить все правила
sudo iptables -F

Разрешение / блокировка конкретных IP

hljs bash
# Разрешить конкретный IP для SSH
sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT

# Заблокировать конкретный IP
sudo iptables -A INPUT -s 10.0.0.5 -j DROP

# Заблокировать диапазон IP
sudo iptables -A INPUT -s 192.168.1.0/24 -j DROP

Сохранение правил iptables

Правила iptables по умолчанию теряются при перезагрузке. Чтобы сделать их постоянными:

Debian/Ubuntu

hljs bash
# Установить iptables-persistent
sudo apt install iptables-persistent -y

# Сохранить текущие правила
sudo netfilter-persistent save

# Перезагрузить правила
sudo netfilter-persistent reload

RHEL/CentOS/AlmaLinux

hljs bash
# Установить iptables-services
sudo yum install iptables-services -y

# Включить и запустить сервис
sudo systemctl enable iptables
sudo systemctl start iptables

# Сохранить правила
sudo service iptables save

Управление брандмауэром с помощью ufw

ufw упрощает сложность iptables с помощью простых команд. Предустановлен на Ubuntu и Debian.

Установка и включение ufw

hljs bash
# Установить ufw
sudo apt install ufw -y

# Проверить статус
sudo ufw status verbose

# Установить политики по умолчанию
sudo ufw default deny incoming
sudo ufw default allow outgoing

Всегда разрешайте SSH перед включением ufw, чтобы не заблокировать себя!

Базовые правила ufw

hljs bash
# Разрешить SSH
sudo ufw allow ssh
# или по порту:
sudo ufw allow 22/tcp

# Разрешить HTTP и HTTPS
sudo ufw allow http
sudo ufw allow https

# Открыть пользовательский порт
sudo ufw allow 8080/tcp

# Включить ufw
sudo ufw enable

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

hljs bash
# Список правил с номерами
sudo ufw status numbered

# Удалить правило по номеру
sudo ufw delete 3

# Удалить правило по содержимому
sudo ufw delete allow 8080/tcp

# Разрешить с конкретного IP
sudo ufw allow from 192.168.1.100

# Заблокировать конкретный IP
sudo ufw deny from 10.0.0.5

# Отключить ufw
sudo ufw disable

# Сбросить все правила
sudo ufw reset

Тестирование брандмауэра

Сканирование портов с nmap

hljs bash
# Сканировать конкретные порты с другой машины
nmap -sT -p 22,80,443 SERVER_IP

# Сканировать все порты
nmap -sT SERVER_IP

Проверка прослушиваемых портов с ss

hljs bash
# Список прослушиваемых TCP-портов
sudo ss -tlnp

# Список всех соединений
sudo ss -tunap

Тест соединения

hljs bash
# Тест конкретного порта
telnet SERVER_IP 80

# Тест с nc
nc -zv SERVER_IP 443

# HTTP-тест с curl
curl -I http://SERVER_IP

Рекомендации по безопасности

Применяйте принцип минимальных привилегий: открывайте только те порты, которые действительно нужны.

  1. Измените порт SSH: Используйте нестандартный порт вместо 22
  2. Применяйте ограничение скорости: Защита от атак перебором
  3. Установите Fail2Ban: Автоматическая блокировка неудачных попыток входа
  4. Регулярно проверяйте: Просматривайте правила с помощью iptables -L или ufw status
  5. Делайте резервные копии: Сохраняйте правила в файл
hljs bash
# Сохранить правила iptables в файл
sudo iptables-save > /etc/iptables/rules.v4

# Восстановить из файла
sudo iptables-restore < /etc/iptables/rules.v4

Заключение

iptables предлагает мощь и гибкость, а ufw — скорость и простоту. Начинающим следует начать с ufw; для расширенных конфигураций подходит iptables. Оба инструмента работают совместно с брандмауэром Path Panel от REXE. Регулярно проверяйте правила брандмауэра и закрывайте порты, которые больше не нужны.