Утилита командной строки для настройки встроенного в ядро Linux межсетевого экрана, разработанного в рамках проекта Netfilter.
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 таблица действие цепочка дополнительные_параметры
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
/sbin/iptables-save
Устанавливаем:
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
Конфигурация будет работать до перезагрузки, не забудь сохранить
iptables -A INPUT -s 192.168.100.1 -j DROP
iptables -A INPUT -s 192.168.100.1 -j ACCEPT
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 -A INPUT -p tcp --dport 21 -j DROP
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
Например с 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
iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
Очень простой пример — работа с 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