我有一个使用 libpcap 捕获传入的 TCP SYN 数据包的程序,这些 SYN 数据包的目的地是特定端口。
但是我没有该端口的 TCP 监听套接字,所以实际上,操作系统内核(它是内核还是 TCP 堆栈?我不确定,谁能告诉我)将向 TCP SYN 的源 IP 发出 RST。
现在我想阻止 RST,我不希望将 RST 发送到源 ip。我想也许 iptables 可以做到这一点?那么如何使用 iptables 设置规则来阻止这些 RST(由特定端口的传入 TCP SYN 触发)?
如果还有其他更好的解决方案,那就更好了!谢谢!
答案1
一个相当基本的入站阻止设置是这样的:
# Set default policy to 'drop everything'
iptables -P INPUT DROP
# Allow lo traffic
iptables -A INPUT -i lo -j ACCEPT
# Allow icmp
iptables -A INPUT -p icmp -j ACCEPT
# Allow packets sent in response to an outgoing connection
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Allow outgoing connections
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
这应该会放弃所有与您的主机建立连接的尝试。
如果您想要更具体,请尝试添加以下内容之一:
# Block request from being handled further by the TCP stack
iptables -A INPUT -p tcp --dport <port> -j DROP
# Send an ICMP 'administratively prohibited' response
iptables -A INPUT -p tcp --dport <port> -j REJECT
# Don't send any RESETs upon a request to this port
iptables -A OUTPUT -p tcp -o <outgoing interface> --sport <port> --tcp-flags RST RST -j DROP