Примеры команд iptables

iptables — команда управления межсетевым экраном в linux. Является CLI для netfilter, для работы требует доступа уровня root. Состоит из пяти таблиц (filter, nat, mangle, raw, security), в каждой из которых от двух до пяти цепочек (prerouting, input, forward, output, postrouting). Наиболее востребованными являются таблицы filter и nat, поэтому примеры в этой заметке будут ориентированы именно на них.

Цепочки и таблицы iptables
Цепочки и таблицы iptables

Общая схема прохождения пакета через netfilter:

iptables packet flow diagram
Синтаксис команды iptables
iptables <операция> <цепочка> <таблица> <фильтр> <действие> <опции>

Не все фрагменты синтаксиса (кроме операции) обязательны к использованию, набор зависит от цели выполнения команды, это будет наглядно показано далее в примерах.

Операция — основное действие, выполняемое командой. Примеры — добавление, удаление, модификация.

ОперацияОписание
-Lвывести список правил
-Aдобавить правило
-Iвставить (добавить) правило по номеру
-Dудалить правило
-Fудалить все правила
-Nсоздать новую цепочку
-Xудалить цепочку
Некоторые операции iptables

Цепочка — одна из пяти цепочек (prerouting, input, forward, output, postrouting). Выбор цепочки зависит от того, на каком этапе прохождения пакета вы хотите применить правило.

Таблица — одна из пяти таблиц (filter, nat, mangle, raw, security). Без указания таблицы правило будет применено в таблице FILTER.

Фильтр — набор опций, по которым будет выбираться пакет, к которому применится правило. Может включать ip-адрес (src или dst), номер порта, состояние соединения и др.

ОпцияОписание
-iвходящий интерфейс пакета
-oисходящий интерфейс пакета
-sисточник (ip или подсеть) пакета
-dполучатель (ip или подсеть) пакета
-pпротокол

Действие — применяемое к выбранному пакету действие. Устанавливается с помощью ключа -j. Примеры — accept, drop, redirect, masquerade и др.

Опции — дополнительные опции вывода, не попавшие в предыдущие фрагменты. Примеры -v, —line-numbers

Примеры использования iptables

Вывести список правил iptables:

iptables -L

Вывести список правил с дополнительной информацией (-v) и номерами строк (—line-numbers):

iptables -L -v --line-numbers

Вывести список правил конкретной цепочки или таблицы:

## Вся таблица NAT
iptables -L -t nat 

## Цепочка POSTROUTING таблицы NAT
iptables -L POSTROUTING -t nat 

## Цепочка INPUT таблицы FILTER (т.к. таблица не указана)
iptables -L INPUT 

Запретить (-j DROP) входящие соединения:

## Со всех источников на eth0 для HTTP (TCP/80)
iptables -A INPUT -i eth0 -p tcp --dport 80 -j DROP 

## С определенного IP для HTTP (TCP/80)
iptables -A INPUT -s 1.2.3.4 -p tcp --dport 80 -j DROP

## Из подсети для для HTTP (TCP/80)
iptables -A INPUT -s 1.2.3.0/24 -p tcp --dport 80 -j DROP

Запретить входящие SSH-соединения всем, кроме определенного IP (4.3.2.1):

## Запрещаем все входящие SSH соединения
iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP

## Узнаем номер предыдущего правила
iptables -L INPUT --line-numbers
...
5    DROP       tcp  --  anywhere             anywhere             tcp dpt:22
...

## Вставляем разрешающее правило выше запрещающего (вместо -А используем -I)
iptables -I INPUT 4 -i eth0 -p tcp -s 4.3.2.1 --dport 22 -j ACCEPT

Удаляем правила iptables:

## по номеру в таблице INPUT
iptables -D INPUT 4

## по ip и действию
iptables -D INPUT -s 4.3.2.1 -j ACCEPT

## все правила в таблице OUTPUT
iptables -F OUTPUT

Настраиваем маскарадинг (если ОС выступает роутером или гипервизором):

## Разрешаем форвардинг пакетов и перезагружаемся
echo 1 > /proc/sys/net/ipv4/ip_forward && init 6

## Включаем маскарадинг для соединений из локалки наружу (внешний интерфейс - eth0)
iptables -t nat -A POSTROUTING -s '10.0.0.0/24' -o eth0 -j MASQUERADE

Пробрасываем порты снаружи через NAT:

## Все входящие на внешний интерфейс eth0
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2222 -i vmbr1 -j DNAT --to-destination 10.0.0.10:22

## Все входящие на внешний ip 1.2.3.4
iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 --dport 2222 -i vmbr1 -j DNAT --to-destination 10.0.0.10:22

Запрещаем обращение на определенные ресурсы:

## По ip-адресу
iptables -A OUTPUT -p tcp -d 4.3.2.1 -j DROP

## По dns-имени
iptables -A OUTPUT -p tcp -d www.abcdef.ru -j DROP

Разрешаем и запрещаем отдельные протоколы и порты:

## Разрешаем пинги на всех интерфейсах
iptables -A INPUT -p icmp -j ACCEPT

## Запрещаем FTP на внешнем интерфейсе
iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT

Сохранение правил производится разными способами на разных ОС и не описано в этой статье. Возможные варианты — iptables-save + скрипт загрузки, пакет iptables-persistent, добавление в конфиг-файл сетевого интерфейса и др.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *