2017-04-25 175 views
0

我有一個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 
+0

可能相關:https://unix.stackexchange.com/questions/217450/iptables-i-forward-j-drop-does-not-cut-existing-connections – assylias

+0

我試着執行命令相關文章:sysctl -w net.netfilter.nf_conntrack_skip_filter = 0 錯誤:「net.netfilter.nf_conntrack_skip_filter」是未知的密鑰 – Parasu

+0

該命令用於OpenWrt,因此無法在標準的Linux上運行。我的觀點是,你可能只會阻止新的連接而不關閉現有的連接。 – assylias

回答

0

在防火牆中的第一條規則告訴iptables接受所有已建立的連接,所以你只能阻止新的連接

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

嘗試刪除該規則和看看會發生什麼

+0

太好了。我會嘗試這個並回來。 – Parasu

+0

工作完美。對於我的情況,我從我的防火牆規則的其餘部分刪除了狀態,並且刪除了您指出的主要狀態。謝謝。 – Parasu