Iptables Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:iptables [2013/10/05 22:20]
[Логирование и трассировка]
wiki:iptables [2016/03/02 11:32] (текущий)
Строка 1: Строка 1:
 ====== Iptables ====== ====== Iptables ======
  
-Iptables — утилита [[командная_строка|командной строки]],​ является стандартным интерфейсом управления работой [[firewall|межсетевого экрана]] (брандмауэра) Netfilter для ядер Linux, начиная с версии 2.4. С её помощью администраторы создают и изменяют правила,​ управляющие фильтрацией и перенаправлением пакетов. Для работы с семейством протоколов IPv6 существует отдельная версия утилиты — Ip6tables. Для использования утилиты Iptables требуются привилегии суперпользователя (root).+Iptables — утилита [[командная_строка|командной строки]],​ является стандартным интерфейсом управления работой [[firewall|межсетевого экрана]] (брандмауэра) Netfilter для ядер Linux, начиная с версии 2.4. С её помощью администраторы создают и изменяют правила,​ управляющие фильтрацией и перенаправлением пакетов. Для работы с семейством протоколов IPv6 существует отдельная версия утилиты — Ip6tables. Для использования утилиты Iptables требуются привилегии ​[[суперпользователь_в_ubuntu|суперпользователя]] (root).
  
 ===== Основные понятия ===== ===== Основные понятия =====
Строка 14: Строка 14:
     * Пользовательская цепочка — цепочка,​ созданная пользователем. Может использоваться только в пределах своей таблицы. Рекомендуется не использовать для таких цепочек имена в верхнем регистре,​ чтобы избежать путаницы с базовыми цепочками и встроенными действиями.     * Пользовательская цепочка — цепочка,​ созданная пользователем. Может использоваться только в пределах своей таблицы. Рекомендуется не использовать для таких цепочек имена в верхнем регистре,​ чтобы избежать путаницы с базовыми цепочками и встроенными действиями.
   - Таблица — совокупность базовых и пользовательских цепочек,​ объединенных общим функциональным назначением. Имена таблиц (как и модулей критериев) записываются в нижнем регистре,​ так как в принципе не могут конфликтовать с именами пользовательских цепочек. При вызове команды iptables таблица указывается в формате -t имя_таблицы. При отсутствии явного указания,​ используется таблица filter.   - Таблица — совокупность базовых и пользовательских цепочек,​ объединенных общим функциональным назначением. Имена таблиц (как и модулей критериев) записываются в нижнем регистре,​ так как в принципе не могут конфликтовать с именами пользовательских цепочек. При вызове команды iptables таблица указывается в формате -t имя_таблицы. При отсутствии явного указания,​ используется таблица filter.
- 
-В системе netfilter, пакеты пропускаются через цепочки. Цепочка является упорядоченным списком правил,​ а каждое правило может содержать критерии и действие или переход. Когда пакет проходит через цепочку,​ система netfilter по очереди проверяет,​ соответствует ли пакет всем критериям очередного правила,​ и если так, то выполняет действие (если критериев в правиле нет, то действие выполняется для всех пакетов проходящих через правило). Вариантов возможных критериев очень много. Например,​ пакет соответствует критерию --source 192.168.1.1 если в заголовке пакета указано,​ что отправитель — 192.168.1.1. Самый простой тип перехода,​ --jump, просто пересылает пакет в начало другой цепочки. Также при помощи --jump можно указать действие. Стандартные действия доступные во всех цепочках — ACCEPT (пропустить),​ DROP (удалить),​ QUEUE (передать на анализ внешней программе),​ и RETURN (вернуть на анализ в предыдущую цепочку). Например,​ команды 
- 
-<code bash>​iptables -A INPUT --source 192.168.1.1 --jump ACCEPT 
-iptables -A INPUT --jump other_chain</​code>​ 
- 
-означают "​добавить к концу цепочки INPUT следующие правила:​ пропустить пакеты из 192.168.1.1,​ а всё, что останется — отправить на анализ в цепочку other_chain"​. 
  
 Синтаксический анализ:​ Синтаксический анализ:​
Строка 34: Строка 27:
 [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>​ COMMIT</​code>​
 +
 +==== Архитектура ====
 +
 +В системе netfilter, пакеты пропускаются через цепочки. Цепочка является упорядоченным списком правил,​ а каждое правило может содержать критерии и действие или переход. Когда пакет проходит через цепочку,​ система netfilter по очереди проверяет,​ соответствует ли пакет всем критериям очередного правила,​ и если так, то выполняет действие (если критериев в правиле нет, то действие выполняется для всех пакетов проходящих через правило). Вариантов возможных критериев очень много. Например,​ пакет соответствует критерию --source 192.168.1.1 если в заголовке пакета указано,​ что отправитель — 192.168.1.1. Самый простой тип перехода,​ --jump, просто пересылает пакет в начало другой цепочки. Также при помощи --jump можно указать действие. Стандартные действия доступные во всех цепочках — ACCEPT (пропустить),​ DROP (удалить),​ QUEUE (передать на анализ внешней программе),​ и RETURN (вернуть на анализ в предыдущую цепочку). Например,​ команды
 +
 +<code bash>​iptables -A INPUT --source 192.168.1.1 --jump ACCEPT
 +iptables -A INPUT --jump other_chain</​code>​
 +
 +означают "​добавить к концу цепочки INPUT следующие правила:​ пропустить пакеты из 192.168.1.1,​ а всё, что останется — отправить на анализ в цепочку other_chain"​.
 +
 +==== Цепочки ====
 +
 +Существует 5 типов стандартных цепочек,​ встроенных в систему:​
 +
 +  * PREROUTING — для изначальной обработки входящих пакетов.
 +  * INPUT — для входящих пакетов адресованных непосредственно локальному процессу (клиенту или серверу).
 +  * FORWARD — для входящих пакетов перенаправленных на выход (заметьте,​ что перенаправляемые пакеты проходят сначала цепь PREROUTING, затем FORWARD и POSTROUTING).
 +  * OUTPUT — для пакетов генерируемых локальными процессами.
 +  * POSTROUTING — для окончательной обработки исходящих пакетов.
 +
 +Также можно создавать и уничтожать собственные цепочки при помощи утилиты iptables.
 +
 +==== Таблицы ====
 +
 +Цепочки организованны в 4 таблицы:​
 +
 +  * raw — просматривается до передачи пакета системе определения состояний. Используется редко, например для маркировки пакетов,​ которые НЕ должны обрабатываться системой определения состояний. Для этого в правиле указывается действие NOTRACK. Содержит цепочки PREROUTING и OUTPUT.
 +  * mangle — содержит правила модификации (обычно заголовка) IP‐пакетов. Среди прочего,​ поддерживает действия TTL (Time to live), TOS (Type of Service), и MARK (для изменения полей TTL и TOS, и для изменения маркеров пакета). Редко необходима и может быть опасна. Содержит все пять стандартных цепочек.
 +  * nat — просматривает только пакеты,​ создающие новое соединение (согласно системе определения состояний). Поддерживает действия DNAT, SNAT, MASQUERADE, REDIRECT. Содержит цепочки PREROUTING, OUTPUT, и POSTROUTING.
 +  * filter — основная таблица,​ используется по умолчанию если название таблицы не указано. Содержит цепочки INPUT, FORWARD, и OUTPUT.
 +
 +Цепочки с одинаковым названием,​ но в разных таблицах — совершенно независимые объекты. Например,​ raw PREROUTING и mangle PREROUTING обычно содержат разный набор правил;​ пакеты сначала проходят через цепочку raw PREROUTING, а потом через mangle PREROUTING.
 +
 +==== Состояния ====
 +
 +В системе netfilter, каждый пакет проходящий через механизм определения состояний,​ может иметь одно из четырёх возможных состояний:​
 +
 +  * NEW — пакет открывает новый сеанс. Классический пример — пакет TCP с флагом SYN.
 +  * ESTABLISHED — пакет является частью уже существующего сеанса.
 +  * RELATED — пакет открывает новый сеанс, связанный с уже открытым сеансом. Например,​ во время сеанса пассивного FTP, клиент подсоединяется к порту 21 сервера,​ сервер сообщает клиенту номер второго,​ случайно выбранного порта, после чего клиент подсоединяется ко второму порту для передачи файлов. В этом случае второй сеанс (передача файлов по второму порту) связан с уже существующим сеансом (изначальное подсоединение к порту 21).
 +  * INVALID — все прочие пакеты.
  
 ===== Диаграмма прохождения таблиц и цепочек ===== ===== Диаграмма прохождения таблиц и цепочек =====
Строка 47: Строка 81:
 ===== Базовая конфигурация ===== ===== Базовая конфигурация =====
  
-При использовании IPv6-адресации конфигурацию для IPv6 следует выполнять независимо ​от IPv4. +Ниже приведён ​пример базовой статической конфигурации iptables. При сохранении и загрузке подобной ​конфигурации необходимо принимать во внимание возможность ​внесения в неё изменений со стороны других сервисовнапример ​[[Fail2ban]]. Кроме того, при использовании IPv6-адресации ​конфигурацию для ​IPv6 следует выполнять независимо от IPv4.
- +
-Ниже приведён пример ​базовой статической ​конфигурации iptables ​для ​обоих ​случаев. +
 ==== IPv4 ==== ==== IPv4 ====
  
Строка 88: Строка 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>​
Строка 133: Строка 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>​
Строка 138: Строка 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>​
  
 ===== Дополнительные правила ===== ===== Дополнительные правила =====
Строка 194: Строка 228:
 #-A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --sport 67 --dport 68 -j ACCEPT</​code>​ #-A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --sport 67 --dport 68 -j ACCEPT</​code>​
  
-===== Логирование ​и трассировка ​=====+===== Тестирование и отладка ===== 
 + 
 +Просмотр текущей конфигурации для IPv4 и IPv6: 
 +<​code=bash>​sudo iptables-save 
 +sudo ip6tables-save</​code>​ 
 + 
 +==== Логирование ​==== 
 + 
 +FIXME 
 + 
 +==== Трассировка ====
  
 FIXME FIXME
Строка 209: Строка 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.
  
 Автозагрузка модулей:​ Автозагрузка модулей:​
Строка 215: Строка 259:
 <code bash>man modules-load.d</​code>​ <code bash>man modules-load.d</​code>​
  
-===== Другие инструменты ===== 
- 
-<​note>​Todo</​note>​ 
- 
-  * [[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|Обсуждение статьи]]