发布于 

通过iptables规则对SSH进行保护

1. 安装iptables

1
2
3
yum -y install iptables 
apt install iptables
...

2. 配置流量访问的规则

2.1 伪装服务器不在线

简单来说是ping不通,ping主要是icmp协议,我们就添加一条icmp包丢弃的规则。

1
iptables -t raw -A PREROUTING -p icmp -j DROP

image-20220912132607768

我们可以看到icmp的丢弃包规则已经成功设置,我们通过ping主机访问一下。

image-20220912132843353

发现已经ping不通且100%丢包,我们开一个白名单给ping的主机(192.168.2.132)试试。

1
2
# 除了2.132发来的icmp请求,全部丢弃
iptables -t raw -R PREROUTING 1 -p icmp ! -s 192.168.2.132 -j DROP

image-20220912133546862

2.2 设置22端口的tcp请求拦截

1
iptables -t raw -A PREROUTING -p tcp --dport 22 -j DROP

我们看看成功ssh的状态:

image-20220912144428638

我们再看看iptables规则修改后的状态:

image-20220912144608638

发现一直收不到请求,连接是失败的。

我们设置一个ssh白名单,给这个服务器,本来是用ip去访问但是如果我们ip变化就连不上服务器了,我们就使用mac地址作为一个识别标识。

1
2
3
4
# iptables -m模块是不能取反的,所以我们先ACCEPT然后再DROP(如果全部丢弃就无法接受了)
# 一个规则顺序问题
iptables -t raw -A PREROUTING -m mac --mac-source 00:0C:29:8B:76:BB -j ACCEPT
iptables -t raw -A PREROUTING -j DROP

先看看该mac地址的结果:

image-20220912155226645

再看看其他mac地址的结果:

image-20220912154043688

3. 使用nmap测试扫描

3.1 不使用规则前

1
nmap -sS 192.168.186.130

image-20220912160130605

发现22端口的SSH被扫出来了。

3.2 配置规则

1
iptables -t raw -A PREROUTING -j DROP # 如果有需要就开一个有条件的白名单自己访问

image-20220912160352540

发现22端口并没有被扫出来。