我的 iptables 中有一条规则,记录拒绝的连接,即-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
我想要一个类似的规则,记录所有已建立的(即未拒绝的)到所有端口的连接。我该怎么做呢?我尝试过在谷歌上搜索并进行实验,但找不到要匹配的字符串
答案1
一个便宜又愉快的方法是寻找第二三次握手中的数据包。它很容易被发现,因为它不同寻常地同时设置了 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
顺便提一句:您当前正在记录的内容不会被拒绝連接,但被否认数据包;那不是一回事。但我假设你问的正是你想要的,并且已经做出了相应的回答。