阻止*本地*stream量'iptables'; 但允许*远程*stream量

是否有可能使用Linux防火墙阻止(或“丢弃”)所有传入数据包到源于本地计算机的特定端口?

理想情况下:我想仍然允许远程访问端口。

我试过这个(我通过googlefind的):

sudo iptables -I FORWARD 1 -p tcp -m tcp --dport 9000 -j DROP 

但是这对我不起作用; 我发现我仍然能够“telnet”(从同一台机器)到端口9000(再次在同一台机器上),而不被阻止/丢弃。

这是一个奇怪的要求:但是我正在尝试组装一个诊断testing – 我需要在同一台机器上阻止两个程序之间的通信; 而实际上并没有终止端点服务。

顺便说一句:我testing是否可以通过运行一个简单的Java程序来阻止传入的stream量(如下):

 import java.net.Socket; import java.net.ServerSocket; public class listen { public static void main(String[] args) throws Exception { int port=9000; System.out.println("Listening on port:"+port); ServerSocket ss=new ServerSocket(port); while (true) { Socket s=ss.accept(); System.out.println("Incoming !"); s.close(); } } } 

使用这个 – 我可以看到来自'Incoming!'的'telnet'(etc)的传入请求。 信息。

首先,您需要使用INPUT来删除传入的连接。

正如@Ulfy所说

 sudo iptables -I INPUT -p tcp --dport 9000 -i lo -j DROP 

丢弃IPv4环回。 那么你可能想要丢弃IPv6环回

 sudo ip6tables -I INPUT -p tcp --dport 9000 -i lo -j DROP 

那么还有其他的接口也可以“回环”。 例如,如果您有ip 192.168.10.10 eth0,并且键入

 telnet 192.168.10.10 

然后你的telnet客户端从192.168.10.10连接到192.168.10.10,并绕过localhost上的防火墙。

 sudo iptables -I INPUT -p tcp --dport 9000 -i eth0 -s 192.168.10.10 -j DROP 

最后,所有本地接口可能都有IPv6链接本地地址(即使您认为您的LAN没有IPv6),因此您可能也要阻止这些地址。

编辑

在一个友好的networking上(我假设localhost在这种情况下是友好的),通常使用REJECT而不是DROP来配合,因为这明显地拒绝了传入的连接,而不是忽略它。 这使得客户端可以立即发现连接失败,而不是等待超时。

源于主机的数据包不应该进入FORWARD链,所以我不认为这对你有用。

相反,请尝试设置一个规则来阻止到该端口的传入stream量,并使用回送来源和/或您的主机IP。 像这样的东西…

sudo iptables -I INPUT -p tcp --dport 9000 -i lo -j DROP