Недавно у меня возникли проблемы с брандмауэром, блокирующим трафик между двумя серверами, и я хочу проверить, как iptables обрабатывает несколько правил, применяемых к одному IP. Если я сбегу iptables -L -n | grep 1.2.3.4
Я вижу такой вывод:
ACCEPT all -- 1.2.3.4 0.0.0.0/0
DROP all -- 1.2.3.4 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 1.2.3.4
DROP all -- 0.0.0.0/0 1.2.3.4
Как iptables обработает эти правила? Будет ли сброшен весь трафик с 1.2.3.4?
Бег iptables -L -n
не дает вам имен интерфейсов, которые правила могли бы определить как условия. Правила, которые выглядят одинаково с разными целями, вероятно, предназначены для разных интерфейсов, если они не были написаны а) в спешке, спешу б) рассеянным админом в) как временное решение для чего-то или г) все вышеперечисленное
Использовать iptables -L -v -n
вместо.
Отвечу на ваш вопрос: судьбу пакета решает первый правило сопоставления с конечной целью (такими целями являются ACCEPT и DROP, но есть и другие, такие как RETURN, которые не являются конечными, поэтому обработка продолжается). Если такого правила нет, применяется политика цепочки по умолчанию, которая ACCEPT
по умолчанию и может быть изменен через iptables -P <ACCEPT, DROP>
.
Видеть этот довольно хороший рабочий документ для подробностей.
Мне больше всего нравится разбираться в наборах правил iptables с помощью команды iptables-save
, которые выгружают все правила в stdout. Это помогает понять правильный порядок правил.
Полная картина прохождения пакетов в iptables находится здесь: http://www.frozentux.net/iptables-tutorial/images/tables_traverse.jpg
Трудно сказать, поскольку вы не показываете, для каких цепочек применяются эти правила.
Легко сказать: для брандмауэра вы должны начать с цепочки FORWARD и последовательно следовать всем правилам, которые соответствуют, пока вы не нажмете ACCEPT, DROP или REJECT.
Если таким образом вы достигнете конца всех правил, будет применена политика FORWARD по умолчанию.