Содержание

IPTABLES

Утилита командной строки для настройки встроенного в ядро Linux межсетевого экрана, разработанного в рамках проекта Netfilter.

Таблицы ipatables

raw - предназначена для обработки пакетов прежде, чем они будут переданы системе conntrack, которая занимается отслеживанием состояния соединений и принадлежностью пакетов этим соединениям. Содержит встроенные цепочки PREROUTING и OUTPUT.
mangle - используется для модификации некоторых заголовков (TTL, TOS) и маркировке пакетов и соединений, содержит цепочки PREROUTING, INPUT, FORWARD, OUTPUT и POSTROUTING.
nat - предназначен для преобразования адресов и портов источника и назначения пакетов, встроенные цепочки: PREROUTING, OUTPUT, POSTROUTING.
filter - применяется, собственно, для фильтрации пакетов, является таблицей по умолчанию, т.е. если таблица не указана явно, то используется filter, имеет цепочки INPUT, FORWARD и OUTPUT.
security - используется для работы совместно с системами принудительного контроля доступа, такими как SELinux. Встроенные цепочки INPUT, FORWARD, OUTPUT.

Внутренние цепочки

PREROUTING - используется для всего входящего трафика до принятия первого решения о маршрутизации
INPUT - применяется для входящего трафика текущего узла
FORWARD - через нее проходит транзитный трафик узла
OUTPUT - применятся для исходящего трафика текущего узла
POSTROUTING - используется для всего исходящего трафика после принятия всех решений о маршрутизации

Действия

ACCEPT - разрешить прохождение пакета дальше по цепочке правил;
DROP - удалить пакет;
REJECT - отклонить пакет, отправителю будет отправлено сообщение, что пакет был отклонен;
LOG - сделать запись о пакете в лог файл;
QUEUE - отправить пакет пользовательскому приложению.

Основные действия

-A - добавить правило в цепочку;
-С - проверить все правила;
-D - удалить правило;
-I - вставить правило с нужным номером;
-L - вывести все правила в текущей цепочке;
-S - вывести все правила;
-F - очистить все правила;
-N - создать цепочку;
-X - удалить цепочку;
-P - установить действие по умолчанию.

Дополнительные опции правил

-p - указать протокол, один из tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh;
-s - указать ip адрес устройства-отправителя пакета;
-d - указать ip адрес получателя;
-i - входной сетевой интерфейс;
-o - исходящий сетевой интерфейс;
-j - выбрать действие, если правило подошло.

Статусы соединений

NEW — установка нового соединения, первый пакет, который мы видим.
RELATED — соединение, связанное с другим, имеющим статус ESTABLISHED.
ESTABLISHED — установленное сетевое соединение.
INVALID — пакет не может быть идентифицирован как принадлежащий какому-то соединению.
UNTRACKED — пакеты, для которых ранее была применена цель NOTRACK. Мы пока применяли только цель ACCEPT, позже мы познакомимся и с другими. Для таких пакетов, например, не отслеживаются сопутствующие ICMP-пакеты.

Примечание

Команда iptables имеет такой общий вид:

iptables -t таблица действие цепочка дополнительные_параметры

Команды и примеры

Установка iptables

apt-get install iptables

Список правил

iptables -L

Подробный список

iptables -nvL

Сброс всех правил

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

Cохранить все правила iptables

/sbin/iptables-save

Добавляем автоматическую загрузку правил iptables

Устанавливаем:

apt-get install netfilter-persistent iptables-persistent

Правила хранятся в следующих файлах и применяются при загрузке операционной системы.
Для IPv4 используется файл:

/etc/iptables/rules.v4

Для IPv6 используется файл:

/etc/iptables/rules.v6

Варианты использования: service netfilter-persistent {start|restart|reload|force-reload|save|flush}

service netfilter-persistent {flush, force-reload, reload, restart, save, start}
flush - очистить правила
reload - загрузить из файлов
save - сохранить в файлы

Шлюз

Редактируем файл /etc/sysctl.conf

nano /etc/sysctl.conf

Нужно раскомментировать строку

net.ipv4.ip_forward=1

Применить настройки без перезагрузки (или перезагрузить)

sysctl -p

Настраиваем iptables:
eth0 — Интерфейс который смотрит в интернет
eth1 — Локальная сеть

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Конфигурация будет работать до перезагрузки, не забудь сохранить

Заблокировать IP-адрес в iptables

iptables -A INPUT -s 192.168.100.1 -j DROP

Разрешить IP-адрес в iptables

iptables -A INPUT -s 192.168.100.1 -j ACCEPT

Открыть порт в iptables

iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -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

Закрыть порт в iptables

iptables -A INPUT -p tcp --dport 21 -j DROP

Запретить ICMP ping трафик

iptables -A INPUT -p icmp --icmp-type 8 -j DROP

Переадресация порта — redirect

Например с 8080 на 80

iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

Разрешить соединения по SSH

iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Пример фильтров для FTP

Очень простой пример — работа с FTP-сервером. Мы подключаемся к порту 21/tcp, в момент подключения соединение получается статус NEW, а затем ESTABLISHED. Управляющие команды идут через порт 21/tcp, но при работе для передачи файлов необходимо открыть еще и 20/tcp. И соединение на порт 20/tcp получает статус RELATED. Таким образом, доступ к порту 20/tcp можно закрывать до тех пор, пока соединение на него не придет со статусом RELATED, либо само соединение не получит статус ESTABLISHED. Получается, что для корректной фильтрации портов 21/tcp и 20/tcp мы можем сделать следующее:

iptables -t filter -A INPUT -p tcp -m tcp --dport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

В этом случае без установки подключения на порт 21 мы не получим доступ к порту 20.

Маскарадинг (или маскирование)

Правило для адресной трансляции:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d ! 192.168.0.0/24 -j MASQUERADE

Это правило после обработки пакетов осуществит маскирование, если пакеты из внутренней сети направлены куда-то в другую подсеть. Если нам нужно маскировать пакеты для конкретной подсети, к примеру, из одной локальной подсети (192.168.2.0/24) в другую (192.168.0.0/24), то мы можем создать следующее правило:

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d 192.168.0.0/24 -j MASQUERADE

Источники