У меня странная проблема с моим брандмауэром iptables: если я устанавливаю два последовательных одинаковых правила, первое — ACCEPT
и второе — DENY
, входящий пакет отклоняется (и регистрируется как таковой).
Как это возможно, что входящий пакет игнорируется первым правилом и перехватывается вторым?
Вид fwbuilder здесь:
Вот iptables
дамп:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
In_RULE_0 all -- 0.0.0.0/0 0.0.0.0/0 state NEW
In_RULE_1 all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
In_RULE_0 all -- 0.0.0.0/0 0.0.0.0/0 state NEW
In_RULE_1 all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain In_RULE_0 (2 references)
target prot opt source destination
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "FW RULE 0 -- ACCEPT "
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain In_RULE_1 (2 references)
target prot opt source destination
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "FW RULE 1 -- DENY "
DROP all -- 0.0.0.0/0 0.0.0.0/0
Я также пробовал использовать ACCEPT
только это правило, но оно не срабатывает.
Единственное отличие, которое я вижу, это то, что DENY
правило не является state NEW
, но оно одинаково для десятков брандмауэров, которые я уже настроил и которые работают нормально.
решение1
Вам необходимо знать, что: Правило с -I
опцией iptables помещает правило в НАЧАЛО списка; Правило с -A
опцией помещает правило в конец списка.
В вашем случае: я думаю, вы могли использовать «-I» в обоих (почти идентичных) правилах iptables, второе правило вставляется в начало списка перед первым правилом, и поэтому вы создали список правил с правилами в следующем порядке:
match -s x.x.x.x action DROP
match -s x.x.x.x action ACCEPT
Поскольку ваш пакет соответствует обоим этим правилам, первое ( DROP
) в порядке фактической операционной таблицы (которая находится в ОЗУ) вступит в силу. Порядок не имеет ничего общего с порядком в вашем файле конфигурации iptable.
Поменяйте порядок, и результат будет другим.
решение2
OK, я нашел его. Оказалось, что мой FW был в полном порядке, но виртуальный хост был неправильно настроен. У меня не было никаких ошибок, но iptables не был разрешен. Когда я разрешил его, FW стал работоспособным... Неудивительно, что мы не смогли найти ошибку на уровне iptables... Спасибо за помощь :)
решение3
Ваш iptables In_RULE_0
применяется только к НОВЫМ соединениям, когда вы используете state NEW
.
Он также устанавливается для вашей цепочки FORWARD (пакеты через сервер), а не для вашей цепочки INPUT (пакеты на сервер).
Как вы тестируете? Вы пингуете определенный интерфейс сервера?
Можете ли вы опубликовать полный вывод:
iptables -vnL
Попробуйте следующее правило для регистрации трафика в цепочке INPUT (пинги на интерфейс сервера)
iptables -I INPUT 1 -j In_RULE_0