我有一个Java程序在端口范围内侦听来自UDP和TCP的数据包。我在该Linux上有一个本地脚本,可以阻止或取消阻止这些端口上的内网流量。这些脚本运行良好。但是,当我使用此脚本停止流量时,需要将近40分钟才能停止流量。直到然后我收到的包Reg。在Linux的防火墙
java.net.DatagramSocket.receive() and
java.net.Socket.getInputStream().read()
方法。 40分钟后,交通停止。我不知道发生了什么。我期待传入的流量立即停止。有没有我在Linux中错过的配置?
套接字缓冲区大小是UDP和TCP是:
[[email protected] ~]# cat /proc/sys/net/ipv4/udp_mem
6164448 8219264 12328896
[[email protected] ~]# cat /proc/sys/net/ipv4/udp_rmem_min
4096
[[email protected] ~]# cat /proc/sys/net/ipv4/udp_wmem_min
4096
[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_mem
6164448 8219264 12328896
[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 4194304
[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304
下面是iptables的脚本的一个片段。我很感兴趣,到5000之间的端口5100
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [218796:15563881]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 5000:5100 -j DROP
-A INPUT -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 4814 -j DROP
-A INPUT -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 8000 -j DROP
-A INPUT -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 4815 -j DROP
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED --sport 587 -j ACCEPT
-A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 2814 -j ACCEPT
-A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
-A INPUT -p udp --dport 5000:5100 -j DROP
-A INPUT -p udp --dport 4814 -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 587 -j ACCEPT
-A OUTPUT -p tcp -m state --state ESTABLISHED -m tcp --sport 5000:5100 -j ACCEPT
-A OUTPUT -p tcp -m state --state ESTABLISHED -m tcp --sport 4814 -j ACCEPT
-A OUTPUT -p tcp -m state --state ESTABLISHED -m tcp --sport 4815 -j ACCEPT
-A OUTPUT -p tcp -m state --state ESTABLISHED -m tcp --sport 2814 -j ACCEPT
-A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
-A OUTPUT -p udp --sport 5000:5100 -j ACCEPT
-A OUTPUT -p udp --sport 4814 -j ACCEPT
可能相关:https://unix.stackexchange.com/questions/217450/iptables-i-forward-j-drop-does-not-cut-existing-connections – assylias
我试着执行命令相关文章:sysctl -w net.netfilter.nf_conntrack_skip_filter = 0 错误:“net.netfilter.nf_conntrack_skip_filter”是未知的密钥 – Parasu
该命令用于OpenWrt,因此无法在标准的Linux上运行。我的观点是,你可能只会阻止新的连接而不关闭现有的连接。 – assylias