обход iptables и политики цепочки, ручное редактирование

обход iptables и политики цепочки, ручное редактирование

Мне нравится редактировать файл iptables вручную, но есть кое-что, что меня немного сбивает с толку.

Насколько я понял из руководства, iptables обходит правила сверху вниз, и если совпадение не найдено, оно регистрируется в журнале и отклоняется правилами по умолчанию внизу.

Все хорошо.

Но что это значит:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
<accept ssh, ssl, etc>
<log all, deny all>

У цепочек в верхней части есть политика по умолчанию "принять" - это всего лишь способ сказать, что мы принимаем пакеты в таблицу filterдля последующего сопоставления? Для меня после прочтения руководства складывается впечатление, что оно принимает все, а затем не читает правила, потому что так правила работают по умолчанию - если что-то совпадает, оно прекращает читать правила и затем делает то, что говорит политика. Есть ли какая-либо документация по этому поведению? Я не могу найти ничего достаточно конкретного.

Я также видел это, после *filterтаблицы:

*filter
:RH-Firewall-1-INPUT - [0:0]

Что дает возможность добавлять собственные цепи и направлять другие цепи в эту цепь:

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT

Но здесь для этой цепочки вообще не указано «ПРИНЯТЬ» или «ОТКАЗАТЬСЯ», а вместо этого стоит тире (-).

Что еще больше меня сбивает с толку — как это работает?

решение1

  1. Политика встроенной цепочки определяет, что происходит с пакетами, которые проходят через все правила в цепочке, не сопоставляя ни одно из них с диспозитивной целью. В вашем примере выше пакеты, которые проходят через всю цепочку, не сопоставляя ни одно FORWARDправило с диспозитивной целью, будут ACCEPTed, потому что политика цепочки — ACCEPT.

  2. Пользовательские цепочки не могут иметь политику. Пакеты, которые проходят весь путь через пользовательскую цепочку без сопоставления правила с диспозитивной целью, возвращаются в цепочку, из которой они были отправлены в пользовательскую цепочку («вызывающая цепочка») по правилу после того, которое отправило их туда.

Адиспозитивныйtarget — это тот, который утилизирует пакет; примеры включают DROP, ACCEPTи MASQUERADE; недиспозитивные цели включают LOG, и нулевую цель (вполне допустимо иметь правило, не имеющее цели). Когда пакет соответствует правилу с диспозитивной целью, пакет считается утилизируемым, и дальнейшая обработка правила не происходит. Когда пакет соответствует правилу без диспозитивной цели, обработка пакета продолжается со следующего правила.

Важным следствием этой логики в отношении соответствия целям и их расположения является то, чтопобеды в первом решающем матче. Слишком часто мы видим вопросы на SF, где люди имеют цепочку, которая гласит, например,

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80

который содержит одно правило для блокировки доступа к веб-серверу ( tcp dpt:80). Они хотят разрешить одному внешнему IP-адресу, скажем 1.2.3.4, доступ к этому веб-серверу, поэтому они добавляют правило с

iptables -A INPUT -p tcp --dport 80 -s 1.2.3.4 -j ACCEPT

и они заканчивают с такой цепочкой

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       1.2.3.4       0.0.0.0/0     tcp dpt:80

Как вы видите, количество пакетов по последнему правилу равно нулю.и они всегда будут равны нулю. Ни один пакет не может соответствовать этому последнему правилу, не совпав с предыдущим, а предыдущий является диспозитивным ( DROP), поэтому ни один пакет никогда не достигнет этого последнего правила.

Правильный способ справиться с этим —убедитесь, что ваши исключения стоят выше ваших правил, так:

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
   20   875 ACCEPT     tcp  --  *      *       1.2.3.4       0.0.0.0/0     tcp dpt:80
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80

Теперь сначала обрабатываются исключительные принятия, затем обрабатываются и отбрасываются другие пакеты веб-сервера, которые не поступают от исключительного сервера, и, наконец, политика цепочки обрабатывает все остальные пакеты и принимает их.

Связанный контент