Действия

Iptables: различия между версиями

Материал из lulzette's wiki

Нет описания правки
Строка 24: Строка 24:
* mangle - предназначена для модификации пакетов; (модификация TTL или TOS, например)
* mangle - предназначена для модификации пакетов; (модификация TTL или TOS, например)
* nat - обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора; ()
* nat - обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора; ()
* filter - основная таблица для фильтрации пакетов, используется по умолчанию. (ограничение или разрешение доступа, собсна правила, которые ниже)
* filter - основная таблица для фильтрации пакетов, используется по умолчанию. (ограничение или разрешение доступа, собсна правила, которые ниже)
<br>
При <code>iptables -L</code> выводятся правила только из таблицы filter, остальные необходимо смотреть через "-t" (<code>iptables -L -t raw</code>)


== ПРАВИЛА И ДЕЙСТВИЯ ==
== ПРАВИЛА И ДЕЙСТВИЯ ==

Версия от 15:32, 17 января 2021

Практически копипаст статьи: https://losst.ru/nastrojka-iptables-dlya-chajnikov

Годно: https://www.opennet.ru/docs/RUS/iptables/

Годный видик: https://youtu.be/SYM5MvV4VIk

netfilter dia

Цепочки

Есть несколько цепочек: Input, forward, output, prerouting и postrouting. В каждой цепочке есть таблицы:

  • prerouting - пакет только вышел из интерфейса и направляется в систему (raw, conntrack, mangle, nat)
  • input - пакет на пути из системы в приложение (mangle, filter, conntrack)
  • forward - пакет проходит через систему (обычно маршрутизация) (mangle, filter)
  • output - пакет вышел из приложения и подходит к выходу из системы (raw, conntrack, mangle, nat, filter)
  • postrouting - конечная станция, пакет выходит из системы в интерфейс (mangle, nat, conntrack)

Нагляднее будет на картинке справа.

Таблицы

  • raw - предназначена для работы с сырыми пакетами, пока они еще не прошли обработку; (маркировка пакетов) - output, prerouting
  • mangle - предназначена для модификации пакетов; (модификация TTL или TOS, например)
  • nat - обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора; ()
  • filter - основная таблица для фильтрации пакетов, используется по умолчанию. (ограничение или разрешение доступа, собсна правила, которые ниже)


При iptables -L выводятся правила только из таблицы filter, остальные необходимо смотреть через "-t" (iptables -L -t raw)

ПРАВИЛА И ДЕЙСТВИЯ

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

syntax

Осталось рассмотреть основные действия, которые позволяет выполнить iptables:

-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 - выбрать действие, если правило подошло.
--dport - указать порт
-m - совпадение, т.е. multiport (диапазон портов), tcp (tcp порт) и т.д.

примеры

Вот так будет выглядеть команда, которая позволяет добавить правило iptables для блокировки всех входящих пакетов от 10.10.10.10:

sudo iptables -A INPUT -s 10.10.10.10 -j DROP

INPUT policy (-P) DROP

Дропаем входящие:

iptables -P INPUT -j DROP

Но ведь тогда не придут ping echo! Так как ответный ping пакет приходит на INPUT, а INPUT закрыт. Решение есть:

iptables -A INPUT -m conntrack --cstate RELATED,ESTABLISHED -j ACCEPT

Вуаля! RELATED,ESTABLISHED пакеты приниматься на INPUT'е, остальные входящие (NEW, INVALID и т.д.) будут отклонены. Однако, пинг локалхоста не доходит! Добавим правило на прием пакетов в INPUT со входящим интерфейсом lo:

iptables -A INPUT -i lo -j ACCEPT

Теперь все что придет на lo - будет отвечено.

NAT

настройка

Есть dnat, есть snat.

  • Snat - статический нат (SNAT) Если IP адрес на внешнем сетевом интерфейсе (WAN) статический и не меняется, то желательно использовать именно SNAT. В правилах фаервола указывается один или несколько IP адресов, таким образом есть возможность распределить локальные IP адреса и сети по внешним IP адресам. SNAT хорошо использовать на серверах доступа.
  • dnat - динамический нат (MASQUERADE) Менее быстрая маршрутизация чем SNAT при массовых запросах, так как для каждого нового соединения определяется IP адрес на внешнем сетевом интерфейсе (WAN). Отлично подходит для маршрутизаторов домашнего использования и когда меняется IP адрес на WAN интерфейсе.

iptables -A POSTROUTING -t nat -s 192.168.20.0/24 -o eth0 -j SNAT --to-source 192.168.1.123

проброс портов

перенаправляем входящие пакеты на порт VDS/контейнера

iptables -t nat -A PREROUTING -i enp2s0 -p tcp --dport 80 -j DNAT --to-destination 10.0.3.175:80

указываем направление исходящих из VDS/контейнера

iptables -t nat -A POSTROUTING -o lxcbr0 -p tcp --dport 80 -d 10.0.3.175 -j SNAT --to-source 10.0.3.1