Обзор iptables

Практическое руководство по работе с межсетевым экраном iptables.

iptables — утилита командной строки, стандартный интерфейс управления межсетевым экраном netfilter в ядре Linux. Для работы с iptables требуются права суперпользователя (root).

Все команды ниже выполняются от root. Получите привилегии заранее: sudo -i в Debian-based системах или su в остальных.

Просмотр статуса и правил

Показать все правила с подробной информацией:

iptables -L -n -v

Показать правила с номерами строк:

iptables -n -L -v --line-numbers

Показать только цепочку INPUT или OUTPUT:

iptables -L INPUT -n -v
iptables -L OUTPUT -n -v --line-numbers

Ключи:

  • -L — показать список правил
  • -v — подробный вывод (интерфейс, параметры, суффиксы K/M/G)
  • -n — выводить IP и порты числами, без DNS-запросов

Управление службой файрвола

Запуск и остановка через систему:

service ufw stop
service ufw start

Сброс всех правил вручную:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

Ключи:

  • -F — удалить все правила (flush)
  • -X — удалить цепочку
  • -t — выбрать таблицу (nat, mangle)
  • -P — установить политику по умолчанию

Добавление и удаление правил

Удалить правило по номеру строки:

iptables -L INPUT -n --line-numbers    # узнать номер
iptables -D INPUT 3                    # удалить строку 3

Удалить правило по IP:

iptables -D INPUT -s 202.54.1.1 -j DROP

Вставить правило между строками 1 и 2:

iptables -I INPUT 2 -s 202.54.1.2 -j DROP

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

iptables-save > /etc/iptables.rules      # сохранить
iptables-restore < /etc/iptables.rules  # восстановить

Политики по умолчанию

Сбрасывать весь трафик (запретить всё):

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Блокировать только входящий трафик, разрешить исходящий:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

Блокировка IP-адресов и сетей

Заблокировать конкретный IP:

iptables -A INPUT -s 1.2.3.4 -j DROP

Заблокировать приватные диапазоны в публичной сети:

iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Диапазоны приватных сетей:

  • 10.0.0.0/8 (класс A)
  • 172.16.0.0/12 (класс B)
  • 192.168.0.0/16 (класс C)
  • 224.0.0.0/4 (Multicast D)
  • 240.0.0.0/5 (класс E)
  • 127.0.0.0/8 (Loopback)

Блокировка портов

Заблокировать все входящие подключения на порт 80:

iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

Заблокировать порт 80 для конкретного IP:

iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP

Открыть диапазон портов:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

Блокировка исходящих соединений по домену

Узнаем IP и CIDR домена:

host -t a facebook.com
whois 69.171.228.40 | grep CIDR

Блокируем:

iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

Логирование событий

Записать событие и сбросить пакет:

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

С ограничением частоты записей (не более 7 строк каждые 5 минут):

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Просмотр журнала:

tail -f /var/log/messages
grep -i --color 'IP SPOOF' /var/log/messages

Управление по MAC-адресу

iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP

# Разрешить только для TCP-порта 22 с конкретного MAC
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

Наши услуги и сервисы

ХостингРаботает на сверхбыстрых NVMe дисках. Подходит для сайтов любой сложности.
Заказать
VPSМожно динамически менять параметры и гибко настраивать ОС. Бесплатное администрирование включено.
Заказать
Выделенные серверыДоступны различные сборки на базе Supermicro с процессорами Intel и AMD на борту.
Заказать

Управление ICMP (Ping)

Таблица типов ICMP-сообщений:

Тип Описание
0 Echo reply (ответ на ping)
3 Destination unreachable
4 Source quench
5 Redirect
8 Echo request (ping)
11 Time-to-live exceeded
12 IP header bad

Рекомендуемая конфигурация — разрешить безопасные типы ICMP:

iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT

Запретить ping:

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Разрешить ping только из локальной сети:

iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

Стандартные порты — открыть или закрыть

Замените ACCEPT на DROP для блокировки порта:

# SSH (порт 22)
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# HTTP / HTTPS
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

# SMTP (порт 25)
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

# DNS (порт 53)
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

# POP3 (порт 110)
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT

# IMAP (порт 143)
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT

# MySQL (порт 3306) — только из локальной сети
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

# Samba — только из локальной сети
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT

# NTP (порт 123)
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

Ограничение количества соединений

Не более 3 SSH-сессий с одного IP:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Не более 20 HTTP-соединений из одной подсети /24:

iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP

Ключи:

  • --connlimit-above N — применять правило, если соединений больше N
  • --connlimit-mask 24 — применять ограничение для подсети /24

Диапазон IP-адресов

Разрешить доступ к порту 80 для диапазона адресов:

iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT

Помощь

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам