// Blog

Как настроить и защитить VPS Linux с помощью iptables: полное руководство — CLIQHOST

10 ноября 2026 г. · by Alex M.

Как настроить и защитить VPS Linux с помощью iptables: полное руководство — CLIQHOST

Среди всех инструментов защиты Linux-серверов iptables занимает особое место — это мощный, гибкий и проверенный временем файрвол, встроенный прямо в ядро системы. Несмотря на появление более современных оберток вроде UFW и firewalld, глубокое понимание iptables даёт администратору полный контроль над сетевым трафиком — что особенно важно на любом VPS NVMe или выделенном сервере, подключённом к интернету.

В этом руководстве вы узнаете, как установить, настроить и управлять iptables на Ubuntu или Debian — от начального состояния до надёжного набора правил безопасности.


Что такое iptables и как это работает

iptables — утилита пространства пользователя, позволяющая настраивать правила фильтрации IP-пакетов в ядре Linux (через подсистему Netfilter). Работает на основе таблиц, цепочек и правил:

  • Таблицы: filter (по умолчанию), nat, mangle, raw
  • Цепочки в таблице filter: INPUT (трафик к серверу), OUTPUT (трафик от сервера), FORWARD (пересылаемый трафик)
  • Действия (targets): ACCEPT, DROP, REJECT, LOG

Каждый сетевой пакет проходит через правила по порядку; первое совпавшее правило определяет судьбу пакета.


Предварительные требования

Перед началом убедитесь, что у вас есть:

  • VPS SSD или VPS NVMe с Ubuntu 20.04/22.04 или Debian 11/12
  • Доступ root или пользователь с правами sudo
  • Активное SSH-соединение (не закрывайте текущую сессию до проверки правил!)
  • Опционально: вторая открытая SSH-сессия в качестве подстраховки

Шаг 1: Проверка текущего состояния iptables

На большинстве дистрибутивов iptables предустановлен. Проверьте текущее состояние:

sudo iptables -L -v -n

Если не установлен:

# Ubuntu/Debian
sudo apt update && sudo apt install iptables -y

Для просмотра правил IPv6:

sudo ip6tables -L -v -n

Шаг 2: Базовая стратегия — политики по умолчанию

Перед добавлением правил определите политики по умолчанию для цепочек. Существуют два подхода:

  1. Разрешительный (ACCEPT по умолчанию) — явно блокируете нежелательное
  2. Ограничительный (DROP по умолчанию) — явно разрешаете только нужное ✅ (рекомендуется для продакшена)

⚠️ Критическое предупреждение: Не устанавливайте политику INPUT на DROP до того, как добавите правило, разрешающее SSH! Иначе вы заблокируете себя на сервере.

Правильный порядок команд:

# 1. Разрешите SSH ПЕРЕД всем остальным
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 2. Разрешите loopback (критично для работы системы)
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

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

# 4. Теперь можно безопасно установить политику DROP
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

Шаг 3: Основные правила для веб-сервера

Если вы запускаете веб-сервер (Apache, Nginx) или используете хостинг cPanel или VPS, добавьте:

# HTTP
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# HTTPS
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# DNS (если сервер выполняет DNS-разрешение)
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT

# ICMP (ping) — полезно для мониторинга
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Для почтовых серверов, которым также нужны SSL-сертификаты:

# SMTP, SMTPS, IMAP, IMAPS, POP3S
sudo iptables -A INPUT -p tcp -m multiport --dports 25,465,587,143,993,110,995 -j ACCEPT

Шаг 4: Защита от распространённых атак

4.1 Базовая защита от DDoS с ограничением частоты

# Ограничьте новые SSH-соединения до 5 в минуту с одного IP
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m recent --set --name SSH
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m recent --update --seconds 60 --hitcount 5 --name SSH -j DROP

# Ограничьте новые HTTP-соединения (анти-DoS)
sudo iptables -A INPUT -p tcp --dport 80 -m limit \
  --limit 25/minute --limit-burst 100 -j ACCEPT

4.2 Блокировка невалидных пакетов (защита от stealth-сканирования)

# Блокируйте пакеты со статусом INVALID
sudo iptables -A INPUT -m state --state INVALID -j DROP

# Защита от SYN-флуда
sudo iptables -A INPUT -p tcp --syn -m limit \
  --limit 1/s --limit-burst 4 -j ACCEPT

# Блокируйте Null-сканирование
sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# Блокируйте XMAS-сканирование
sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

4.3 Защита от IP-спуфинга

# Блокируйте частные адреса, приходящие снаружи (на интерфейсе eth0)
sudo iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
sudo iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
sudo iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP
sudo iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP

Проверьте имя вашего сетевого интерфейса командой ip addr show и замените eth0 при необходимости (например, ens3, enp1s0).


Шаг 5: Блокировка конкретных IP-адресов

Если вы замечаете атаки с определённых IP (видимые в логах или через netstat), заблокируйте их напрямую:

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

# Заблокировать целую подсеть
sudo iptables -A INPUT -s 203.0.113.0/24 -j DROP

# Разблокировать IP
sudo iptables -D INPUT -s 203.0.113.100 -j DROP

На управляемом выделенном сервере команда администрирования может настроить автоматические и более продвинутые списки блокировки.


Шаг 6: Логирование заблокированного трафика

Для мониторинга блокируемого трафика (полезно при отладке и аудите безопасности):

# Добавьте правило логирования ПЕРЕД неявным DROP
sudo iptables -A INPUT -j LOG --log-prefix "[IPTABLES DROP] " --log-level 4

Логи появляются в /var/log/syslog или /var/log/kern.log:

sudo tail -f /var/log/kern.log | grep "IPTABLES DROP"

⚠️ Интенсивное логирование может быстро заполнить диск. Используйте модуль limit:

sudo iptables -A INPUT -m limit --limit 5/min -j LOG \
  --log-prefix "[IPTABLES DROP] " --log-level 4

Шаг 7: Сохранение и восстановление правил iptables

Правила iptables энергозависимы — они удаляются при перезагрузке. Для сохранения:

Ubuntu/Debian с iptables-persistent:

sudo apt install iptables-persistent -y

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

# Или вручную:
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6

Восстановление вручную:

sudo iptables-restore < /etc/iptables/rules.v4

Проверка автозапуска при загрузке:

sudo systemctl enable netfilter-persistent
sudo systemctl status netfilter-persistent

Шаг 8: Управление и просмотр правил

# Список правил с нумерацией (полезно для удаления)
sudo iptables -L INPUT --line-numbers -v -n

# Удалить правило по номеру (например, правило 3 из INPUT)
sudo iptables -D INPUT 3

# Вставить правило на конкретную позицию (например, позицию 1)
sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT

# Очистить все правила (ВНИМАНИЕ — можете заблокировать себя!)
sudo iptables -F

# Сначала сбросьте политики на ACCEPT перед очисткой
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F

Шаг 9: Полный скрипт настройки iptables

Готовый скрипт, который можно запустить на новом сервере:

#!/bin/bash
# firewall-setup.sh — Скрипт iptables CLIQHOST

# Сброс
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Политики по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Loopback
iptables -A INPUT -i lo -j ACCEPT

# Установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Невалидные пакеты
iptables -A INPUT -m state --state INVALID -j DROP

# SSH с ограничением частоты
iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m recent --update --seconds 60 --hitcount 5 --name SSH -j DROP
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

# ICMP
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Анти-спуфинг
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP

# Логирование
iptables -A INPUT -m limit --limit 5/min -j LOG \
  --log-prefix "[IPTABLES DROP] " --log-level 4

echo "Брандмауэр успешно настроен!"

Сохраните и выполните скрипт:

chmod +x firewall-setup.sh
sudo ./firewall-setup.sh
sudo netfilter-persistent save

Шаг 10: Тестирование конфигурации

После применения правил проверьте снаружи:

# Проверьте SSH-подключение
ssh -v user@SERVER_IP

# Проверьте открытые порты с помощью nmap (с другой машины)
nmap -sS -p 22,80,443 SERVER_IP

# Проверьте активные правила
sudo iptables -L -v -n

Если вы используете услуги управления сервером, можно запросить внешнюю проверку безопасности у специалистов.


iptables vs. UFW vs. firewalld — когда что использовать?

Критерий iptables UFW firewalld
Сложность Высокая Низкая Средняя
Гибкость Максимальная Ограниченная Средняя
Ubuntu/Debian ✅ ✅ Опционально
CentOS/RHEL ✅ Опционально ✅
Скрипты автоматизации ✅ Частично ✅

Для сложных продакшен-серверов (например, выделенного сервера Intel с несколькими сервисами) iptables обеспечивает наибольший контроль. UFW лучше подходит для простых VPS.


Частые ошибки и как их избежать

  1. Заблокировал себя на сервере — Решение: обратитесь в поддержку CLIQHOST для доступа через VNC/IPMI-консоль или воспользуйтесь панелью управления VPS.
  2. Правила не сохраняются после перезагрузки — Установите iptables-persistent и выполните netfilter-persistent save.
  3. Забыл разрешить SSH перед DROP — Всегда добавляйте правило SSH ПЕРВЫМ.
  4. Неправильное имя сетевого интерфейса — Проверьте с помощью ip addr и используйте корректное имя (ens3, eth0 и т.д.).
  5. Правила применяются в неверном порядке — Используйте -I (вставка) вместо -A (добавление) для приоритетных правил.

Заключение

iptables — незаменимый инструмент для любого серьёзного администратора Linux-сервера. Несмотря на более высокий порог вхождения по сравнению с UFW, он обеспечивает полный контроль, необходимый для защиты VPS Linux или выделенного сервера от современных угроз.

Работайте с iptables методично: устанавливайте политики, явно разрешайте нужные сервисы, блокируйте известные атаки и сканирования, сохраняйте правила для постоянства.

Если вы хотите сосредоточиться на бизнесе и доверить безопасность сервера профессионалам, команда CLIQHOST предлагает комплексные услуги администрирования серверов — от настройки брандмауэра до непрерывного мониторинга. Свяжитесь с нами для бесплатной консультации.

SHARE
// what clients say

What Our Clients Say

Real reviews from customers who trust CLIQHOST for performance, reliability and expert technical support.

★★★★★

"We moved our online shop from a foreign host and the difference is night and day — pages load instantly and support replies in minutes, in Romanian."

AM
Andrei M.
eCommerce owner · Chișinău
★★★★★

"Migrated 12 client sites to CLIQHOST. Free migration, zero downtime, and the cPanel setup is exactly what my team needed. Highly recommend."

EV
Elena V.
Web agency · Bălți
★★★★★

"Our NVMe VPS handles traffic spikes without a sweat. Full root, local datacenter, and billing in MDL — everything we wanted from a provider."

DC
Dmitri C.
SaaS founder · Chișinău