Обзор 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
Наши услуги и сервисы
Управление 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
Помощь
Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!