Действия

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

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

Нет описания правки
 
(не показано 15 промежуточных версий этого же участника)
Строка 1: Строка 1:
Что надо знать?
= iptables =
= iptables =


Практически копипаст статьи: https://losst.ru/nastrojka-iptables-dlya-chajnikov
[[Iptables]]
 
Годно: https://www.opennet.ru/docs/RUS/iptables/
 
Годный видик: https://youtu.be/SYM5MvV4VIk
 
[[Файл:Netfilter-diagram-rus.png|300px|thumb|right|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:
<source>
-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 - выбрать действие, если правило подошло.
--dport - указать порт
-m - совпадение, т.е. multiport (диапазон портов), tcp (tcp порт) и т.д.
</source>
 
== примеры ==
 
Вот так будет выглядеть команда, которая позволяет добавить правило iptables для блокировки всех входящих пакетов от 10.10.10.10:
 
<code>sudo iptables -A INPUT -s 10.10.10.10 -j DROP</code>
 
=== INPUT policy (-P) DROP ===


Дропаем входящие:
= ip =
[[IP utility (Linux)]]


<code>iptables -P INPUT -j DROP</code>
= сети =
 
Но ведь тогда не придут ping echo! Так как ответный ping пакет приходит на INPUT, а INPUT закрыт. Решение есть:
 
<code>iptables -A INPUT -m conntrack --cstate RELATED,ESTABLISHED -j ACCEPT</code>
 
Вуаля! RELATED,ESTABLISHED пакеты приниматься на INPUT'е, остальные входящие (NEW, INVALID и т.д.) будут отклонены. Однако, пинг локалхоста не доходит! Добавим правило на прием пакетов в INPUT со входящим интерфейсом lo:
 
<code>iptables -A INPUT -i lo -j ACCEPT</code>
 
Теперь все что придет на lo - будет отвечено.
 
=== NAT ===
 
==== настройка ====
Есть dnat, есть snat.
 
* Snat - статический нат (SNAT) Если IP адрес на внешнем сетевом интерфейсе (WAN) статический и не меняется, то желательно использовать именно SNAT. В правилах фаервола указывается один или несколько IP адресов, таким образом есть возможность распределить локальные IP адреса и сети по внешним IP адресам. SNAT хорошо использовать на серверах доступа.
* dnat - динамический нат (MASQUERADE) Менее быстрая маршрутизация чем SNAT при массовых запросах, так как для каждого нового соединения определяется IP адрес на внешнем сетевом интерфейсе (WAN). Отлично подходит для маршрутизаторов домашнего использования и когда меняется IP адрес на WAN интерфейсе.
 
<code>iptables -A POSTROUTING -t nat -s 192.168.20.0/24 -o eth0 -j SNAT --to-source 192.168.1.123</code>
 
==== проброс портов ====
 
<code>iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 900 -j DNAT --to-destination 192.168.20.2</code>
 
= TCP и сети =
 
* New – Новое соединение. Пакет, открывающий новое соединение, никак не связанное с уже имеющимися сетевыми соединениями, обрабатываемыми в данный момент маршрутизатором.
* Established – Существующее соединение. Пакет относится у уже установленному соединению, обрабатываемому в данный момент маршрутизатором.
* Related – Связанное соединение. Пакет, который связан с существующим соединением, но не является его частью. Например, пакет, который начинает соединение передачи данных в FTP-сессии (он будет связан с управляющим соединением FTP), или пакет ICMP, содержащий ошибку, отправляемый в ответ на другое соединение.
* Invalid – Маршрутизатор не может соотнести пакет ни с одним из вышеперечисленных состояний соединения.


[[сети]]


= tcpdump =
= tcpdump =


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


<code>-n</code> - IP вместо DNS
= strace =
 
* src/dst/host - хост
* [src/dst] port - порт
* ether broadcast - бродкасты
* icmp - icmp


cool stuff: https://hackertarget.com/tcpdump-examples/
[[Strace (Linux)]]


= strace =
= SQL =


* <code>strace -e *syscall*</code> - вывести только вызовы определенного syscall
[[SQL]]

Текущая версия от 12:54, 16 февраля 2021

Что надо знать?

iptables

Iptables

ip

IP utility (Linux)

сети

сети

tcpdump

Tcpdump (Linux)

strace

Strace (Linux)

SQL

SQL