|
|
(не показано 20 промежуточных версий этого же участника) |
Строка 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 - выбрать действие, если правило подошло.
| |
| </source>
| |
| | |
| == примеры ==
| |
| | |
| Вот так будет выглядеть команда, которая позволяет добавить правило iptables для блокировки всех входящих пакетов от 10.10.10.10:
| |
|
| |
|
| <code>sudo iptables -A INPUT -s 10.10.10.10 -j DROP</code>
| | = ip = |
| | [[IP utility (Linux)]] |
|
| |
|
| === INPUT policy (-P) DROP === | | = сети = |
| | |
| Дропаем входящие:
| |
| | |
| <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 и т.д.) будут отклонены.
| |
| | |
| = TCP и сети =
| |
| | |
| * New – Новое соединение. Пакет, открывающий новое соединение, никак не связанное с уже имеющимися сетевыми соединениями, обрабатываемыми в данный момент маршрутизатором.
| |
| * Established – Существующее соединение. Пакет относится у уже установленному соединению, обрабатываемому в данный момент маршрутизатором.
| |
| * Related – Связанное соединение. Пакет, который связан с существующим соединением, но не является его частью. Например, пакет, который начинает соединение передачи данных в FTP-сессии (он будет связан с управляющим соединением FTP), или пакет ICMP, содержащий ошибку, отправляемый в ответ на другое соединение.
| |
| * Invalid – Маршрутизатор не может соотнести пакет ни с одним из вышеперечисленных состояний соединения.
| |
|
| |
|
| | [[сети]] |
|
| |
|
| = tcpdump = | | = tcpdump = |
|
| |
|
| Простая штука с помощью которой можно анализировать трафик.
| | [[Tcpdump (Linux)]] |
|
| |
|
| <code>-n</code> - IP вместо DNS
| | = strace = |
|
| |
|
| * src/dst/host - хост
| | [[Strace (Linux)]] |
| * [src/dst] port - порт
| |
| * ether broadcast - бродкасты
| |
| * icmp - icmp
| |
|
| |
|
| cool stuff: https://hackertarget.com/tcpdump-examples/
| | = SQL = |
| | |
| = strace = | |
|
| |
|
| * <code>strace -e *syscall*</code> - вывести только вызовы определенного syscall
| | [[SQL]] |