Действия

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

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

Нет описания правки
 
(не показано 13 промежуточных версий этого же участника)
Строка 1: Строка 1:
= iptables =
[[Category:Админство (Ops)]]
 
Практически копипаст статьи: https://losst.ru/nastrojka-iptables-dlya-chajnikov
Практически копипаст статьи: https://losst.ru/nastrojka-iptables-dlya-chajnikov


Строка 25: Строка 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>)


== ПРАВИЛА И ДЕЙСТВИЯ ==
== Правила и действия ==


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


== syntax ==
== syntax ==
https://wiki.merionet.ru/servernye-resheniya/14/pogruzhenie-v-iptables-teoriya-i-nastrojka/


Осталось рассмотреть основные действия, которые позволяет выполнить iptables:
Осталось рассмотреть основные действия, которые позволяет выполнить iptables:
<source>
<source>
-A - добавить правило в цепочку; <code>-A, --append chain rule-specification</code>
-A - добавить правило в цепочку;  
-С - проверить все правила;
-С - проверить все правила;
-D - удалить правило;
-D - удалить правило;
-I - вставить правило с нужным номером;
-I - вставить правило с нужным номером;
-L - вывести все правила в текущей цепочке;
-L - вывести все правила в текущей цепочке;
-S - вывести все правила;
-S - вывести все правила без форматирования, как команды;
-F - очистить все правила;
-F - очистить все правила;
-N - создать цепочку;
-N - создать цепочку;
Строка 56: Строка 59:
-o - исходящий сетевой интерфейс;
-o - исходящий сетевой интерфейс;
-j - выбрать действие, если правило подошло.
-j - выбрать действие, если правило подошло.
-g - передать пакет в другую цепочку
--dport - указать порт
--dport - указать порт
-m - совпадение, т.е. multiport (диапазон портов), tcp (tcp порт) и т.д.
-m - совпадение, т.е. multiport (диапазон портов), tcp (tcp порт) и т.д.
--line-numbers - вывести правила по номерам
-n - вывести правила с резолвингом портов/доменов
</source>
</source>


Строка 65: Строка 72:


<code>sudo iptables -A INPUT -s 10.10.10.10 -j DROP</code>
<code>sudo iptables -A INPUT -s 10.10.10.10 -j DROP</code>
=== Блокаем по string'у ===
Какая-то рабочая хрень. При желании можно погуглить флаги.
<code>iptables -I INPUT -p tcp --dport 80 -m string --string "yandex.ru" --algo kmp -j DROP</code>


=== INPUT policy (-P) DROP ===
=== INPUT policy (-P) DROP ===
Строка 94: Строка 107:
==== проброс портов ====
==== проброс портов ====


<code>iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 900 -j DNAT --to-destination 192.168.20.2</code>
перенаправляем входящие пакеты на порт VDS/контейнера
<code>iptables -t nat -A PREROUTING -i eth0 -p tcp -d 8.8.8.8 --dport 80 -j DNAT --to 10.10.10.137:80</code>
<code>iptables -t nat -A PREROUTING -i enp2s0 -p tcp --dport 80 -j DNAT --to-destination 10.0.3.175:80</code><br>
 
указываем направление исходящих из VDS/контейнера
 
<code>iptables -t nat -A POSTROUTING -o lxcbr0 -p tcp --dport 80 -d 10.0.3.175 -j SNAT --to-source 10.0.3.1</code>

Текущая версия от 23:19, 28 декабря 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

https://wiki.merionet.ru/servernye-resheniya/14/pogruzhenie-v-iptables-teoriya-i-nastrojka/

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

--line-numbers - вывести правила по номерам
-n - вывести правила с резолвингом портов/доменов

примеры

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

sudo iptables -A INPUT -s 10.10.10.10 -j DROP

Блокаем по string'у

Какая-то рабочая хрень. При желании можно погуглить флаги.

iptables -I INPUT -p tcp --dport 80 -m string --string "yandex.ru" --algo kmp -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 eth0 -p tcp -d 8.8.8.8 --dport 80 -j DNAT --to 10.10.10.137:80 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