使用“iptables”阻止*本地*流量;但允许*远程*流量

使用“iptables”阻止*本地*流量;但允许*远程*流量

是否可以使用 Linux 防火墙来阻止(或“丢弃”)来自本地机器的特定端口的所有传入数据包?

理想情况下:我仍然希望允许远程流量访问该端口。

我已经尝试过这个(我通过谷歌找到的):

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

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

这是一个奇怪的请求:但我正在尝试进行诊断测试 - 我需要阻止同一台机器上两个程序之间的通信;而无需真正终止端点服务。

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

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();
        }
}

}

使用这个 - 我可以从‘传入!’消息中看到来自‘telnet’(等)的传入请求。

答案1

首先,您需要使用 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,并以此方式绕过了本地主机上的防火墙。

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

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

编辑

在友好网络上(我假设 localhost 在本例中是友好的),使用 REJECT 而不是 DROP 通常更具协作性,因为这会明确拒绝传入连接,而不是忽略它。这允许客户端立即检测到连接已失败,而不是等待超时。

答案2

源自主机的数据包不应进入 FORWARD 链,因此我认为这对您不起作用。

相反,请尝试设置一条规则来阻止进入该端口的流量,并使用环回源和/或您的主机 IP。类似这样的操作...

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

相关内容