Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:iptables [2013/10/06 02:09] [Основные понятия] |
wiki:iptables [2016/03/02 11:32] (текущий) |
||
---|---|---|---|
Строка 14: | Строка 14: | ||
* Пользовательская цепочка — цепочка, созданная пользователем. Может использоваться только в пределах своей таблицы. Рекомендуется не использовать для таких цепочек имена в верхнем регистре, чтобы избежать путаницы с базовыми цепочками и встроенными действиями. | * Пользовательская цепочка — цепочка, созданная пользователем. Может использоваться только в пределах своей таблицы. Рекомендуется не использовать для таких цепочек имена в верхнем регистре, чтобы избежать путаницы с базовыми цепочками и встроенными действиями. | ||
- Таблица — совокупность базовых и пользовательских цепочек, объединенных общим функциональным назначением. Имена таблиц (как и модулей критериев) записываются в нижнем регистре, так как в принципе не могут конфликтовать с именами пользовательских цепочек. При вызове команды iptables таблица указывается в формате -t имя_таблицы. При отсутствии явного указания, используется таблица filter. | - Таблица — совокупность базовых и пользовательских цепочек, объединенных общим функциональным назначением. Имена таблиц (как и модулей критериев) записываются в нижнем регистре, так как в принципе не могут конфликтовать с именами пользовательских цепочек. При вызове команды iptables таблица указывается в формате -t имя_таблицы. При отсутствии явного указания, используется таблица filter. | ||
+ | |||
+ | Синтаксический анализ: | ||
+ | <code bash># Дамп правил таблицы filter | ||
+ | $ sudo iptables-save -c -t filter | ||
+ | # Таблица filter | ||
+ | *filter | ||
+ | # Цепочки INPUT, FORWARD, OUTPUT, их политики и счётчики | ||
+ | :INPUT ACCEPT [19302:9473669] | ||
+ | :FORWARD ACCEPT [0:0] | ||
+ | :OUTPUT ACCEPT [5462736:4247599532] | ||
+ | # Правило: "[17:1020]" - счётчик правила, "-A INPUT" - цепочка, "-i em1 -p tcp -m tcp --dport 22" - критерии, "-j ACCEPT" - действие | ||
+ | [17:1020] -A INPUT -i em1 -p tcp -m tcp --dport 22 -j ACCEPT | ||
+ | COMMIT</code> | ||
==== Архитектура ==== | ==== Архитектура ==== | ||
Строка 55: | Строка 68: | ||
* RELATED — пакет открывает новый сеанс, связанный с уже открытым сеансом. Например, во время сеанса пассивного FTP, клиент подсоединяется к порту 21 сервера, сервер сообщает клиенту номер второго, случайно выбранного порта, после чего клиент подсоединяется ко второму порту для передачи файлов. В этом случае второй сеанс (передача файлов по второму порту) связан с уже существующим сеансом (изначальное подсоединение к порту 21). | * RELATED — пакет открывает новый сеанс, связанный с уже открытым сеансом. Например, во время сеанса пассивного FTP, клиент подсоединяется к порту 21 сервера, сервер сообщает клиенту номер второго, случайно выбранного порта, после чего клиент подсоединяется ко второму порту для передачи файлов. В этом случае второй сеанс (передача файлов по второму порту) связан с уже существующим сеансом (изначальное подсоединение к порту 21). | ||
* INVALID — все прочие пакеты. | * INVALID — все прочие пакеты. | ||
- | |||
- | Синтаксический анализ: | ||
- | <code bash># Дамп правил таблицы filter | ||
- | $ sudo iptables-save -c -t filter | ||
- | # Таблица filter | ||
- | *filter | ||
- | # Цепочки INPUT, FORWARD, OUTPUT, их политики и счётчики | ||
- | :INPUT ACCEPT [19302:9473669] | ||
- | :FORWARD ACCEPT [0:0] | ||
- | :OUTPUT ACCEPT [5462736:4247599532] | ||
- | # Правило: "[17:1020]" - счётчик правила, "-A INPUT" - цепочка, "-i em1 -p tcp -m tcp --dport 22" - критерии, "-j ACCEPT" - действие | ||
- | [17:1020] -A INPUT -i em1 -p tcp -m tcp --dport 22 -j ACCEPT | ||
- | COMMIT</code> | ||
===== Диаграмма прохождения таблиц и цепочек ===== | ===== Диаграмма прохождения таблиц и цепочек ===== | ||
Строка 81: | Строка 81: | ||
===== Базовая конфигурация ===== | ===== Базовая конфигурация ===== | ||
- | При использовании IPv6-адресации конфигурацию для IPv6 следует выполнять независимо от IPv4. | + | Ниже приведён пример базовой статической конфигурации iptables. При сохранении и загрузке подобной конфигурации необходимо принимать во внимание возможность внесения в неё изменений со стороны других сервисов, например [[Fail2ban]]. Кроме того, при использовании IPv6-адресации конфигурацию для IPv6 следует выполнять независимо от IPv4. |
- | + | ||
- | Ниже приведён пример базовой статической конфигурации iptables для обоих случаев. | + | |
==== IPv4 ==== | ==== IPv4 ==== | ||
Строка 122: | Строка 119: | ||
#-A OUTPUT -j REJECT --reject-with icmp-host-prohibited | #-A OUTPUT -j REJECT --reject-with icmp-host-prohibited | ||
COMMIT</code> | COMMIT</code> | ||
+ | |||
+ | Дополняем нужными правилами с учётом iptables-save. | ||
Сохраняем и закрываем: <key>Ctrl</key>+<key>O</key>, <key>Enter</key>, <key>Ctrl</key>+<key>X</key> | Сохраняем и закрываем: <key>Ctrl</key>+<key>O</key>, <key>Enter</key>, <key>Ctrl</key>+<key>X</key> | ||
Строка 167: | Строка 166: | ||
#-A OUTPUT -j REJECT --reject-with icmp6-adm-prohibited | #-A OUTPUT -j REJECT --reject-with icmp6-adm-prohibited | ||
COMMIT</code> | COMMIT</code> | ||
+ | Дополняем нужными правилами с учётом ip6tables-save. | ||
Сохраняем и закрываем: <key>Ctrl</key>+<key>O</key>, <key>Enter</key>, <key>Ctrl</key>+<key>X</key> | Сохраняем и закрываем: <key>Ctrl</key>+<key>O</key>, <key>Enter</key>, <key>Ctrl</key>+<key>X</key> | ||
Строка 172: | Строка 172: | ||
Делаем скрипт исполняемым и загружаем правила iptables: | Делаем скрипт исполняемым и загружаем правила iptables: | ||
- | <code bash>sudo chmod +x /etc/network/if-up.d/iptables-rules | + | <code bash>sudo chmod +x /etc/network/if-up.d/ip6tables-rules |
- | sudo /etc/network/if-up.d/iptables-rules</code> | + | sudo /etc/network/if-up.d/ip6tables-rules</code> |
===== Дополнительные правила ===== | ===== Дополнительные правила ===== | ||
Строка 230: | Строка 230: | ||
===== Тестирование и отладка ===== | ===== Тестирование и отладка ===== | ||
- | FIXME Логирование и трассировка | + | Просмотр текущей конфигурации для IPv4 и IPv6: |
+ | <code=bash>sudo iptables-save | ||
+ | sudo ip6tables-save</code> | ||
+ | |||
+ | ==== Логирование ==== | ||
+ | |||
+ | FIXME | ||
+ | |||
+ | ==== Трассировка ==== | ||
+ | |||
+ | FIXME | ||
===== Модули ядра ===== | ===== Модули ядра ===== | ||
Строка 243: | Строка 253: | ||
sudo modprobe ip</code> | sudo modprobe ip</code> | ||
- | Часто используемые модули: nf_conntrack_ftp, nf_conntrack_pptp, nf_conntrack_tftp. | + | Часто используемые модули: nf_conntrack_ftp, nf_conntrack_pptp, nf_conntrack_tftp, nf_nat_pptp. |
Автозагрузка модулей: | Автозагрузка модулей: | ||
Строка 249: | Строка 259: | ||
<code bash>man modules-load.d</code> | <code bash>man modules-load.d</code> | ||
- | ===== Другие инструменты ===== | ||
- | |||
- | FIXME Рассмотреть взаимодействие с UFW, Firestarter, Firewalld | ||
- | |||
- | * [[Fail2ban]] — средство дополнительной защиты сервисов от брутфорса, может динамически изменять конфигурацию iptables. Этот момент следует учитывать при сохранении/загрузке собственной статической конфигурации. | ||
===== Ссылки ===== | ===== Ссылки ===== | ||
* [[wpru>Netfilter]] | * [[wpru>Netfilter]] | ||
+ | * [[wpru>Список портов TCP и UDP|Список портов TCP и UDP (ru)]] [[http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers|(en)]] | ||
* [[http://www.opennet.ru/docs/RUS/iptables/|Iptables Tutorial (ru)]] [[http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html|(en)]] | * [[http://www.opennet.ru/docs/RUS/iptables/|Iptables Tutorial (ru)]] [[http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html|(en)]] | ||
* [[http://www.opennet.ru/man.shtml?topic=iptables&category=8&russian=0|Iptables Manual (ru)]] [[http://ipset.netfilter.org/|(en)]] | * [[http://www.opennet.ru/man.shtml?topic=iptables&category=8&russian=0|Iptables Manual (ru)]] [[http://ipset.netfilter.org/|(en)]] | ||
* [[http://en.wikibooks.org/wiki/Iptables|Communication Networks/IP Tables (en)]] | * [[http://en.wikibooks.org/wiki/Iptables|Communication Networks/IP Tables (en)]] | ||
+ | * [[https://help.ubuntu.com/community/IptablesHowTo|Iptables HowTo (en)]] | ||
* [[http://forum.ubuntu.ru/index.php?topic=99586.0|Автозагрузка правил iptables ]] | * [[http://forum.ubuntu.ru/index.php?topic=99586.0|Автозагрузка правил iptables ]] | ||
* [[http://forum.ubuntu.ru/index.php?topic=230519.0|Обсуждение статьи]] | * [[http://forum.ubuntu.ru/index.php?topic=230519.0|Обсуждение статьи]] |