1. commands
1.1. -L, --list
1.1.1. iptables -L INPUT
1.1.2. Вывод списка правил в заданной цепочке. Если не указать, то всех цепочек.
1.2. -A, --append
1.2.1. iptables -A INPUT ...
1.2.2. Добавляет новое правило в конец заданной цепочки.
1.3. -D, --delete
1.3.1. iptables -D INPUT --dport 80 -j DROP, iptables -D INPUT 1
1.3.1.1. Новый узел
1.3.2. Удаление правила из цепочки. По критерию или по номеру(2й пример).
1.4. -I, --insert
1.4.1. iptables -I INPUT 1 --dport 80 -j ACCEPT
1.4.2. Вставляет новое правило в цепочку, цифра за именем цепочки указывает перед каким правилом вставить новое.
1.5. -F, --flush
1.5.1. iptables -F [INPUT] [-t table]
1.5.2. Сброс (удаление) всех правил из заданной цепочки (таблицы), без параметров -- все правила всех цепочек в таблице filter
1.6. -P, --policy
1.6.1. iptables -P INPUT (DROP|ACCEPT)
1.6.2. Задает политику по-умолчанию для заданной цепочки. т.е. если не применилось ни одно правило
1.7. -N, --new-chain
1.7.1. iptables -N allowed
1.7.2. создать новую цепочку, имя-- уникальное.В нее потом можно добавлять правила.
1.8. -X, --delete-chain
1.8.1. iptables -X allowed
1.8.2. Удаление заданной цепочки из заданной таблицы. Удаляемая цепочка не должна иметь правил и не должно быть ссылок из других цепочек на удаляемую цепочку. Если имя цепочки не указано, удалятся все цепочки заданной таблице кроме встроенных.
2. Критерии совпадения
2.1. Общие критерии
2.1.1. -p, --protocol
2.1.1.1. iptables -A INPUT -p tcp
2.1.1.2. Этот критерий используется для указания типа протокола(см /etc/protocols) можно юзать как имена так и числовые обозначения, -p ! tcp==(все кроме TCP)
2.1.2. -s, --src, --source
2.1.2.1. iptables -A INPUT -s 192.168.1.1[/<mask>]
2.1.2.2. IP-адрес(а) источника пакета. -s ! 192.168.1.0/24 -- все кроме подсетки
2.1.3. -d, --dst, --destination
2.1.3.1. -d, --dst, --destination
2.1.3.2. same as prev)
2.1.4. -i, --in-interface
2.1.4.1. iptables -A INPUT -i eth0
2.1.4.2. Интерфейс, с которого был получен пакет. т.е. на который фактически пришел в систему.олько в цепочках INPUT, FORWARD и PREROUTING
2.1.5. -p, --protocol
2.1.5.1. iptables -A INPUT -p tcp
2.1.5.2. Этот критерий используется для указания типа протокола(см /etc/protocols) можно юзать как имена так и числовые обозначения, -p ! tcp==(все кроме TCP)
2.2. Неявные Критерии
2.2.1. TCP
2.2.1.1. --sport, --source-port
2.2.1.1.1. iptables -A INPUT -p tcp --sport 22
2.2.1.1.2. Исходный порт, с которого был отправлен пакет. 22:80 диапазон портов; "! 22", "! 22:80" -- инверсия;
2.2.1.2. --dport, --destination-port
2.2.1.2.1. iptables -A INPUT -p tcp --dport 22
2.2.1.2.2. Порт или диапазон портов, на который адресован пакет.
2.2.1.3. --tcp-flags
2.2.1.3.1. iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
2.2.1.3.2. Определяет маску и флаги tcp-пакета. Пакет считается удовлетворяющим критерию, если из перечисленных флагов в первом списке в единичное состояние установлены флаги из второго списка. Так для вышеуказанного примера под критерий подпадают пакеты у которых флаг SYN установлен, а флаги FIN и ACK сброшены.
2.2.2. UDP
2.2.2.1. --sport, --source-port
2.2.2.1.1. iptables -A INPUT -p udp --sport 53
2.2.2.1.2. Исходный порт, с которого был отправлен пакет. В качестве параметра может указываться номер порта или название сетевой службы. варианты: :80, 20:80, 80: Если есть "!" то инверсия "--sport ! :80" -- все кроме 0-80
2.2.2.2. --dport, --destination-port
2.2.2.2.1. iptables -A INPUT -p udp --dport 53
2.2.2.2.2. Порт, на который адресован пакет. Формат аргументов полностью аналогичен принятому в критерии --source-port.
2.2.3. ICMP
2.2.3.1. --icmp-type
2.2.3.1.1. iptables -A INPUT -p icmp --icmp-type 8
2.2.3.1.2. Тип сообщения ICMP определяется номером или именем. iptables --protocol icmp --help ; ! == инвертирование
2.3. Явные Критерии
2.3.1. --limit, limit-burst
2.3.1.1. iptables -A INPUT -m limit --limit 3/hour
2.3.1.2. Устанавливается средняя скорость "освобождения емкости" за единицу времени
2.3.1.3. iptables -A INPUT -m limit --limit-burst 5 -j DROP
2.3.1.4. Устанавливает максимальное значение числа burst limit для критерия limit.
2.3.1.4.1. Предположим наличие правила, содержащего критерий -m limit --limit 5/second --limit-burst 10. Ключ limit-burst установил объем "емкости" равный 10-ти. Каждый пакет, который подпадает под указанное правило, направляется в эту емкость. Допустим, в течение 1/1000 секунды, мы получили 10 пакетов, тогда с получением каждого пакета "уровень" в "емкости" будет возрастать: 1-2-3-4-5-6-7-8-9-10. Емкость наполнилась. Теперь пакеты, подпадающие под наше ограничительное правило, больше не смогут попасть в эту "емкость" (там просто нет места), поэтому они (пакеты) пойдут дальше по набору правил, пока не будут явно восприняты одним из них, либо подвергнутся политике по-умолчанию. Каждые 1/5 секунды "уровень" в воображаемой емкости снижается на 1, и так до тех пор, пока "емкость" не будет опустошена. Через секунду, после приема 10-ти пакетов "емкость" готова будет принять еще 5 пакетов. Само собой разумеется, что "уровень" в "емкости" возрастает на 1 с каждым вновь пришедшим пакетом.
2.3.2. --mac-source
2.3.2.1. iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01
2.3.2.2. MAC адрес сетевого узла, передавшего пакет. ! -- для инверсии
2.3.3. Muliport
2.3.3.1. --source-port
2.3.3.1.1. iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110
2.3.3.1.2. С помощью данного критерия можно указать до 15 различных портов, только совместно с критериями -p tcp или -p udp
2.3.3.2. --destination-port
2.3.3.2.1. iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110
2.3.3.2.2. same
2.3.3.3. --port
2.3.3.3.1. iptables -A INPUT -p tcp -m multiport --port 22,53,80,110
2.3.3.3.2. проверка портов обоих направлений
2.3.4. Owner
2.3.4.1. --uid-owner
2.3.4.1.1. iptables -A OUTPUT -m owner --uid-owner 500
2.3.4.1.2. Производится проверка "владельца" по User ID (UID).
2.3.4.2. --gid-owner
2.3.4.2.1. iptables -A OUTPUT -m owner --gid-owner 0
2.3.4.2.2. Производится проверка "владельца" пакета по Group ID (GID).
2.3.4.3. --pid-owner
2.3.4.3.1. iptables -A OUTPUT -m owner --pid-owner 78
2.3.4.3.2. Производится проверка "владельца" пакета по Process ID (PID)
2.3.4.4. --sid-owner
2.3.4.4.1. iptables -A OUTPUT -m owner --sid-owner 100
2.3.4.4.2. Производится проверка Session ID пакета.
2.3.5. --state
2.3.5.1. iptables -A INPUT -m state --state RELATED,ESTABLISHED
2.3.5.2. Проверяется признак состояния соединения (state): INVALID, ESTABLISHED, NEW и RELATED
3. Действия и переходы
3.1. Переход на своб цепочку
3.1.1. iptables -N tcp_packets Теперь мы можем выполнять переходы на эту цепочку подобно: iptables -A INPUT -p tcp -j tcp_packets
3.2. ACCEPT
3.2.1. Если над пакетом выполняется действие ACCEPT, то пакет прекращает движение по цепочке (и всем вызвавшим цепочкам, если текущая цепочка была вложенной) и считается ПРИНЯТЫМ в данной таблице, но может быть отвергнут в другой
3.3. DROP
3.3.1. Игнорирует текущий пакет, но оставляет открытым соединение, лучше использовать REJECT
3.4. REJECT
3.4.1. --reject-with
3.4.1.1. iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
3.4.1.2. REJECT используется, как правило, в тех же самых ситуациях, что и DROP, но в отличие от DROP, команда REJECT выдает сообщение об ошибке на хост, передавший пакеттипы ответов: icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited и icmp-host-prohibited.