Действия

Road to sysadmin: различия между версиями

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

Строка 76: Строка 76:
<code>iptables -A INPUT -m conntrack --cstate RELATED,ESTABLISHED -j ACCEPT</code>
<code>iptables -A INPUT -m conntrack --cstate RELATED,ESTABLISHED -j ACCEPT</code>


Вуаля! RELATED,ESTABLISHED пакеты приниматься на INPUT'е, остальные входящие (NEW, INVALID и т.д.) будут отклонены.
Вуаля! RELATED,ESTABLISHED пакеты приниматься на INPUT'е, остальные входящие (NEW, INVALID и т.д.) будут отклонены. Однако, пинг локалхоста не доходит! Добавим правило на прием пакетов в INPUT со входящим интерфейсом lo:
 
<code>iptables -A INPUT -i lo -j ACCEPT</code>
 
Теперь все что придет на lo - будет отвечено.


= TCP и сети =
= TCP и сети =

Версия от 04:42, 31 декабря 2020

iptables

Практически копипаст статьи: 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 - основная таблица для фильтрации пакетов, используется по умолчанию. (ограничение или разрешение доступа, собсна правила, которые ниже)

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

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

syntax

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

-A - добавить правило в цепочку; <code>-A, --append chain rule-specification</code>
-С - проверить все правила;
-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 - выбрать действие, если правило подошло.

примеры

Вот так будет выглядеть команда, которая позволяет добавить правило 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 - будет отвечено.

TCP и сети

  • New – Новое соединение. Пакет, открывающий новое соединение, никак не связанное с уже имеющимися сетевыми соединениями, обрабатываемыми в данный момент маршрутизатором.
  • Established – Существующее соединение. Пакет относится у уже установленному соединению, обрабатываемому в данный момент маршрутизатором.
  • Related – Связанное соединение. Пакет, который связан с существующим соединением, но не является его частью. Например, пакет, который начинает соединение передачи данных в FTP-сессии (он будет связан с управляющим соединением FTP), или пакет ICMP, содержащий ошибку, отправляемый в ответ на другое соединение.
  • Invalid – Маршрутизатор не может соотнести пакет ни с одним из вышеперечисленных состояний соединения.


tcpdump

Простая штука с помощью которой можно анализировать трафик.

-n - IP вместо DNS

  • src/dst/host - хост
  • [src/dst] port - порт
  • ether broadcast - бродкасты
  • icmp - icmp

cool stuff: https://hackertarget.com/tcpdump-examples/

strace

  • strace -e *syscall* - вывести только вызовы определенного syscall