Я разрабатываю приложение для проверки пакетов, поступающих на Linux-машину. Я хочу отправлять в NFQUEUE все входящие пакеты подключения и только входящие. Не только --state NEW
но также --state ESTABLISHED, RELATED
для соединений, инициированных клиентом.
И последнее: чтобы установить протокол TCP для всех портов, мне нужно, чтобы это правило работало дополнительно:
iptables -A PREROUTING -t nat -p tcp -match multiport! --dport 64646 -j REDIRECT --to-ports 1234
Пример потока:
Любая помощь будет очень признательна.
Спасибо!
Нашел решение, если кому-то интересно.
# Accept our ssh on a modified port
iptables -A PREROUTING -t raw -p tcp --dport 64646 -j ACCEPT
# Mark all packets of incoming NEW connection with mark 1 (netfilter connmark)
iptables -A PREROUTING -t mangle -m state --state NEW -j CONNMARK --set-mark 1
# Push into nfqueue all marked packets (netfilter nfqueue)
iptables -A PREROUTING -t mangle -m connmark --mark 1 -j NFQUEUE --queue-num 0
# Redirect all incoming connections to the userland listener to make TCP handshake
iptables -A PREROUTING -t nat -p tcp --match multiport ! --dport 64646 -j REDIRECT --to-ports 1234
Наконец, все входящие пакеты попадают в nfqueue, но если я работаю на машине (обновление, обновление, установка ...), пакеты не соответствуют правилам. Кроме того, перенаправление применяется после решения nfqueue, поэтому я регистрирую базовый порт (а не 1234).
Если вы хотите сопоставить все входящие пакеты от новых или установленных соединений, но только от ваших клиентов, вы должны использовать что-то вроде этого:
iptables -A INPUT -d <your_ip_address> -s <your_client_net>/<mask> -i <your_eth> -J <nfqueue stuff>
На самом деле я не понимаю, что вы имеете в виду под:
чтобы сделать рукопожатие tcp для всех портов, мне нужно, чтобы это правило работало
Не могли бы вы пояснить, чего вы пытаетесь достичь?