Какая разница между:
iptables ... -m state --state NEW
и
iptables ... --syn
Первый должен выбрать НОВЫЕ соединения, но AFAIK новые соединения создаются путем отправки флага синхронизации TCP. Другой означает именно это - пакеты с флагом синхронизации.
Можете ли вы привести какие-нибудь практические примеры, когда приведенные выше команды возвращают разные результаты?
В --syn
флаг полезен для проверки TCP-трафика, но NEW
состояние может использоваться для других протоколов (включая TCP
) лайк UDP
и ICMP
. Я могу сказать что NEW
более общий, чем --syn
Вариант TCP.
Из руководства iptables вы можете прочитать:
NEW meaning that the packet has started a new connection,
or otherwise associated with a connection which has not seen packets in both directions
Например, запрос DNS будет соответствовать NEW
состояние, но он не будет соответствовать правилу с --syn
вариант. Проще говоря, это дейтаграмма UDP.
Так же --syn
Опция может использоваться для проверки пакетов TCP с комбинацией неверных флагов, чтобы отбросить их.
Кроме того, вы можете использовать оба этих параметра вместе, чтобы проверить NEW
TCP потоки без --syn
как первый пакет и отбросьте их, например:
$ sudo iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
Здесь мы добавляем эти типы пакетов в определяемую пользователем цепочку, называемую bad_tcp_packets
быть удаленным / зарегистрированным и т.д ...