Файрвол на сервере
Файрвол — это первая линия защиты сервера. Он контролирует весь сетевой трафик: что входит, что выходит, кто и куда может подключаться. Без правильно настроенного файрвола сервер открыт для всех: любой может попытаться подключиться к базе данных, панели управления, SSH. Именно поэтому файрвол — обязательный элемент безопасности.
В этой статье — разбор файрвола для сервера: сравнение iptables, ufw и nftables, как настроить, какие порты открывать, типичные ошибки. Практическое руководство. Если нужно настроить файрвол на сервере — поможем.
Зачем нужен файрвол
Файрвол решает несколько задач, критичных для безопасности.
Закрытие лишних портов
Многие сервисы по умолчанию слушают порты, которые не нужны. Файрвол их закрывает.
Ограничение доступа
К базе данных и админке могут подключаться только определённые IP-адреса.
Защита от атак
Ограничивает сканирование портов, DDoS-атаки, попытки подключения к закрытым сервисам.
Логирование
Файрвол логирует заблокированные соединения — видно, кто и куда пытался подключиться.
iptables, ufw, nftables
В Linux есть три основных инструмента для управления файрволом. Они работают с одним ядром, но по-разному.
iptables
- Классика: работает с 2001 года, знаком большинству администраторов;
- Гибкость: полный контроль над правилами;
- Сложность: синтаксис не самый интуитивный;
- Состояние: постепенно заменяется nftables.
ufw (Uncomplicated Firewall)
- Простота: создан для упрощения iptables;
- Синтаксис: короткие команды —
ufw allow ssh; - Под капотом: использует iptables или nftables;
- Для кого: начинающие администраторы, простые серверы.
nftables
- Современный: замена iptables в новых дистрибутивах;
- Быстрее: работает эффективнее с большим числом правил;
- Синтаксис: более унифицированный;
- Будущее: постепенно заменяет iptables.
| Инструмент | Сложность | Гибкость | Для кого |
|---|---|---|---|
| iptables | Высокая | Высокая | Опытные админы |
| ufw | Низкая | Средняя | Начинающие |
| nftables | Средняя | Высокая | Современные системы |
Что выбрать
- Для простого сервера: ufw — быстро и удобно;
- Для сложной инфраструктуры: nftables — современно и быстро;
- Если уже используете iptables: можно продолжать, но стоит мигрировать;
- Для Kubernetes и контейнеров: nftables предпочтительнее;
- Для legacy-систем: iptables остаётся рабочим вариантом.
Большинство современных дистрибутивов (Ubuntu 22.04+, Debian 11+, CentOS 8+) по умолчанию используют nftables. Но ufw и iptables тоже продолжают работать.
Какие порты открывать
Главный принцип файрвола — «разрешено только то, что нужно». Все остальные порты закрыты.
| Порт | Сервис | Открывать |
|---|---|---|
| 22 | SSH | Да (или сменить на нестандартный) |
| 80 | HTTP | Да, для веб-сервера |
| 443 | HTTPS | Да, для веб-сервера |
| 25, 587 | SMTP | Да, если почтовый сервер |
| 110, 995 | POP3 | Да, если почтовый сервер |
| 143, 993 | IMAP | Да, если почтовый сервер |
| 3306 | MySQL | Только для своих IP |
| 5432 | PostgreSQL | Только для своих IP |
| 6379 | Redis | Только для localhost |
| 27017 | MongoDB | Только для своих IP |
| 8080 | Панели управления | Только для своих IP |
💡 Важно
Перед включением файрвола убедитесь, что порт SSH разрешён. Иначе потеряете доступ к серверу. Проверьте правила до применения.
Примеры конфигураций
ufw — веб-сервер
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw — с ограничением БД
ufw allow from 10.0.0.0/24 to any port 3306
ufw allow from 203.0.113.5 to any port 22
ufw allow 80,443/tcp
iptables — базовая конфигурация
iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
nftables — современный синтаксис
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iif lo accept
tcp dport { 22, 80, 443 } accept
icmp type echo-request accept
}
}
Сохранение правил
- ufw: правила сохраняются автоматически;
- iptables: iptables-save > /etc/iptables/rules.v4;
- nftables: nft list ruleset > /etc/nftables.conf.
Правила и приоритеты
Правила в файрволе обрабатываются в определённом порядке. Понимание приоритетов важно.
Порядок обработки
- Сверху вниз: правила проверяются по очереди;
- Первое совпадение: как только найдено соответствие — действие выполняется;
- Default policy: если ни одно правило не подошло — применяется политика по умолчанию.
Рекомендации
- Первыми: разрешающие правила для нужных сервисов;
- Дальше: правила для ограничений по IP;
- В конце: DROP для всего остального;
- Исключения: перед DROP — правила для ignore IP;
- Логирование: перед DROP — LOG, чтобы видеть, что блокируется.
Stateful фильтрация
Современные файрволы работают с состояниями соединений. Это значит:
- NEW: новое соединение — проверяется по правилам;
- ESTABLISHED: уже установленное — разрешается автоматически;
- RELATED: связанное с установленным (например, FTP-данные) — разрешается.
Логирование
Файрвол логирует заблокированные соединения. Это важно для диагностики и мониторинга.
Что логировать
- Заблокированные пакеты: кто и куда пытался подключиться;
- Подозрительные соединения: сканирование портов, необычные протоколы;
- Не по умолчанию: если трафик не должен ходить — логировать;
- Rate limiting: не логировать каждый пакет, только периодически.
Куда логировать
- syslog: /var/log/syslog или /var/log/messages;
- Отдельный файл: /var/log/firewall.log;
- rsyslog: можно настроить отдельную маршрутизацию;
- Анализ: fail2ban, ELK, Graylog, logwatch.
Пример логирования в ufw
ufw logging on
ufw logging medium
Пример логирования в iptables
iptables -A INPUT -j LOG --log-prefix "iptables-dropped: " --log-level 4
iptables -A INPUT -j DROP
Ошибки
Закрыли SSH
Включили файрвол без правила для SSH — потеряли доступ к серверу. Нужно проверить правила до применения.
Открыли всё
Разрешили INPUT ACCEPT для всего. Файрвол не работает — все порты открыты.
Нет правил для ESTABLISHED
Без stateful-фильтрации обратный трафик блокируется. Нужно правило для ESTABLISHED,RELATED.
Открытые порты БД
MySQL, PostgreSQL открыты для всего интернета. Нужно ограничить доступ по IP.
Правила не сохраняются
После перезагрузки все правила сбрасываются. Нужно сохранить их в файл и включить автозагрузку.
Нет логирования
Файрвол блокирует трафик, но никто не видит, какой. Нужно включить логирование.
Конфликт с Docker
Docker сам управляет iptables и может обходить ваши правила. Нужно настроить интеграцию.
Один порт из двух
Открыли HTTP, но не HTTPS. Или наоборот. Веб-сервер не работает.
Наши рекомендации
Что вы получаете, заказывая настройку файрвола у нас
- Аудит портов — что открыто, что нужно
- Настройку ufw или nftables — под ваш сервер
- Ограничения по IP — для БД и админок
- Stateful фильтрацию — правильная обработка
- Логирование — видеть заблокированные соединения
- Сохранение правил — после перезагрузки
📌 Итоговый вывод
Файрвол — это обязательный элемент защиты любого сервера в интернете.
Что нужно знать:
- Зачем — закрыть лишние порты, ограничить доступ, логировать атаки
- Инструменты — iptables, ufw, nftables
- Что выбрать — ufw для простых, nftables для современных
- Порты — открывать только нужные, БД — только для своих
- Правила — сверху вниз, первое совпадение, default DROP
- Stateful — обязательно правило для ESTABLISHED
- Логирование — включать, анализировать
- Ошибки — закрыли SSH, открыли всё, нет сохранения
Также рекомендуем: 152-ФЗ для серверов, аудит безопасности, Fail2ban, SSH-ключи и 2FA, с чего начать защиту, настройка безопасности.