一个同学不小心用iptables规则把sshd端口22给封掉了,结果不能远程登陆,要想解决这个问题,还要去机房,登录真机去删除这条规则。
问题来了,要写个监控脚本,监控iptables规则是否正确封掉了22端口,如果封掉了,给打开。写好脚本,放到任务计划里,每分钟执行一次
核心要点
思路是查看iptables INPUT链规则,看是否有目标端口是22的规则,并且target为DROP或者REJECT1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 插入来自1.1.1.1和2.2.2.2屏蔽22端口规则
$ iptables -I INPUT -p tcp --dport 22 -s 1.1.1.1 -j DROP
$ iptables -I INPUT -p tcp --dport 22 -s 2.2.2.2 -j REJECT
# 查看INPUT链规则
$ iptables -nvL INPUT
Chain INPUT (policy ACCEPT 48 packets, 3208 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT tcp -- * * 2.2.2.2 0.0.0.0/0 tcp dpt:22 reject-with icmp-port-unreachable
0 0 DROP tcp -- * * 1.1.1.1 0.0.0.0/0 tcp dpt:22
# 序号形式显示规则,便于删除,但删除上一条规则后面规则的序号会自动向上更改
$ iptables -nvL INPUT --line-number
Chain INPUT (policy ACCEPT 112 packets, 7628 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT tcp -- * * 2.2.2.2 0.0.0.0/0 tcp dpt:22 reject-with icmp-port-unreachable
2 0 0 DROP tcp -- * * 1.1.1.1 0.0.0.0/0 tcp dpt:22
# 找出目标端口是22的规则
$ iptables -nvL INPUT --line-number |grep -w 'dpt:22'
# 中出目标端口是22并且是DROP和REJECT的规则序号
$ iptables -nvL INPUT --line-number |grep -w 'dpt:22' |awk '$4 ~/DROP|REJECT/ {print $1}'
代码内容
1 |
|