使用 iptables 阻止 ssh

使用 iptables 阻止 ssh

我有一台带有两个网卡的 Linux 机器(交钥匙核心 14.2)。

eth0是一个公共 IP,WAN(我们称之为123.123.123.123)。

eth1是我的网络,LAN。

我想SSH通过 WAN进行阻止iptables

我使用命令

sudo iptables -A INPUT -p tcp -s 123.123.123.123 --dport 22 -j DROP

如果我然后写

sudo iptables -L

我得到了答案

Chain INPUT (policy ACCEPT)

target   prot opt source            destination

DROP     tcp  --  123.123.123.123   anywhere      tcp dpt:ssh

PuTTY问题是,如果我用来连接 123.123.123.123,我不会被阻止。

知道我做错了什么吗?

答案1

-s您按源地址(选项)而不是目标地址(选项)匹配流量-d,这就是您的规则不会丢弃来自其他主机的任何流量的原因。

您还可以通过输入接口(而不是地址)与-i选项进行匹配。例如,丢弃所有传入端口的流量22 号为了以太网0

iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP

答案2

正如 @sebasth 回答的那样,因为您想要阻止尝试连接到您的公共 IP 的流量,123.123.123.123所以将是以下架构:

source `INTERNET`
destination `123.123.123.123`

所以你可以将-s(源)更改为-d(目标)

关于您的iptables行,我建议使用-I(插入)而不是-A(附加)添加它,因为如果您出于任何原因有一条接受所有传入流量的旧规则port 22,那么-A将在您的行的最后添加该规则iptables并且它将采取它找到的第一条规则。

iptables -I INPUT -p tcp -d 123.123.123.123/32 --dport 22 -j DROP

man iptables

-A, --append chain 规则规范 将一个或多个规则附加到所选链的末尾。当源名称和/或目标名称解析为多个地址时,将为每个可能的地址组合添加一条规则。

-I, --insert chain [rulenum] 规则规范 在所选链中插入一个或多个规则作为给定的规则编号。因此,如果规则编号为 1,则将一条或多条规则插入到链的头部。如果未指定规则编号,这也是默认值。

相关内容