Это старая версия документа!
IPTABLES
Утилита командной строки для настройки встроенного в ядро Linux межсетевого экрана, разработанного в рамках проекта Netfilter.
IPTABLES справочник и заметки, изображение №1 Таблицы 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 Источники https://ru.wikibooks.org/wiki/Iptables
https://losst.ru/nastrojka-iptables-dlya-chajnikov
https://wiki.archlinux.org/title/Iptables_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
https://interface31.ru/tech_it/2020/02/osnovy-iptables-dlya-nachinayushhih-chast-1.html
https://blog.xenot.ru/bystraya-nastrojka-vpn-servera-pptp-na-ubuntu-server-18-04-lts.fuck