У меня есть правило в моих iptables, которое регистрирует запрещенные соединения, т.е. -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
Мне нужно аналогичное правило, которое регистрирует все установленные, то есть неотказные подключения ко всем портам. Как я могу это сделать? Я пробовал искать в Google и экспериментировать, но не могу найти строку для соответствия
Один дешевый и веселый способ - поискать второй пакет в трехстороннем рукопожатии. Это легко заметить, поскольку обычно у него установлены флаги SYN и ACK, которые обычно уникальны для данного соединения. Хотя отправитель все еще может не отвечать третьим и последним пакетом, это полностью по милости отправителя: на этом этапе вы указали, что готовы к этому разговору, и насколько вы ' что касается, это установлено.
Я зарегистрировал их с
iptables -A OUTPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -j LOG --log-prefix "Connection established: "
И вы можете увидеть, как он работает, например, с sshd:
client% telnet 192.168.3.1 22
Trying 192.168.3.1...
Connected to 192.168.3.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.3
server% tail -1 /var/log/facility/kern
Feb 18 05:06:29 server kernel: Connection established: IN= OUT=eth0.11 SRC=192.168.3.1 DST=192.168.3.11 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=22 DPT=59292 WINDOW=14480 RES=0x00 ACK SYN URGP=0
Одно короткое замечание мимоходом: то, что вы в данный момент ведете, не отклоняется связи, но отказано пакеты; это не одно и то же. Но я предположил, что вы просили именно то, что хотите, и ответили соответственно.