今天在专贴里一个同学提到一个问题,他不小心用iptables规则把sshd端口22给封掉了,结果不能远程登陆,要想解决这问题,还要去机房,登陆真机去删除这规则。 问题来了,要写个监控脚本,监控iptables规则是否封掉了22端口,如果封掉了,给打开。 写好脚本,放到任务计划里,每分钟执行一次。
{{{密码回复可见}}}
{{{密码回复可见}}}
0
本帖最后由 wsw13640218682 于 2016-2-28 23:00 编辑
[root@nz ~]# vi iptables.sh
#monitor iptables port 22
#!/bin/bash
a=`iptables -nvL |awk '/dpt:22/{print $3}'`
if [ "$a" == DROP ]
then
sed -i '/--dport 22/s/DROP/ACCEPT/' /etc/sysconfig/iptables
fi
crontab -e
*/1 * * * * /bin/bash /root/iptables.sh
[root@nz ~]# vi iptables.sh
#monitor iptables port 22
#!/bin/bash
a=`iptables -nvL |awk '/dpt:22/{print $3}'`
if [ "$a" == DROP ]
then
sed -i '/--dport 22/s/DROP/ACCEPT/' /etc/sysconfig/iptables
fi
crontab -e
*/1 * * * * /bin/bash /root/iptables.sh
0
本帖最后由 boy461205160 于 2016-2-25 11:50 编辑
[root@master ~]# crontab e
*/1 * * * * bash /root/sshd.sh
- #!/bin/bash
- # check sshd port drop
- /sbin/iptables -nvL --line-number|grep "dpt:22"|awk -F ' ' '{print $4}' > /tmp/drop.txt
- i=`cat /tmp/drop.txt|head -n 1|egrep -iE "DROP|REJECT"|wc -l`
- if [ $i -gt 0 ]
- then
- /sbin/iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
- fi
*/1 * * * * bash /root/sshd.sh
0
22端口临时不小心被封,并没有写入防火墙规则文件里面(保存了规则,才会在iptables里面),哪你的sed -i '/--dport 22/s/DROP/ACCEPT/' /etc/sysconfig/iptables不是木有任何作用
wsw13640218682 发表于 2016-2-24 11:52
[root@nz ~]# vi iptables.sh
#monitor iptables port 22
#!/bin/bash
22端口临时不小心被封,并没有写入防火墙规则文件里面(保存了规则,才会在iptables里面),哪你的sed -i '/--dport 22/s/DROP/ACCEPT/' /etc/sysconfig/iptables不是木有任何作用
0
但你这样不断添加规则,再次查看不是会存在很多条同样规则了吗
boy461205160 发表于 2016-2-24 12:56
22端口临时不小心被封,并没有写入防火墙规则文件里面(保存了规则,才会在iptables里面),哪你的sed -i ...
但你这样不断添加规则,再次查看不是会存在很多条同样规则了吗
0
本帖最后由 boy461205160 于 2016-2-24 14:08 编辑
已修正这个bug,{:4_91:}
我觉得铭哥写的也不是很完美,有木有更完美的,暂时没想到........
临时添加防火墙规则,在/etc/sysconfig/iptables文件中没有的,只有/etc/init.d/iptables save,才会有额,测试过了。
wsw13640218682 发表于 2016-2-24 13:35
但你这样不断添加规则,再次查看不是会存在很多条同样规则了吗
已修正这个bug,{:4_91:}
我觉得铭哥写的也不是很完美,有木有更完美的,暂时没想到........
临时添加防火墙规则,在/etc/sysconfig/iptables文件中没有的,只有/etc/init.d/iptables save,才会有额,测试过了。
0
本帖最后由 迷城 于 2016-2-24 17:55 编辑
#!/bin/bash
# check sshd port drop
DROP=`/sbin/iptables -nvL --line-number|grep -E "dpt:22\>"|egrep -iE 'DROP|REJECT'|wc -l``
if [ $n -ge 1 ]
then
/sbin/iptables -I INPUT -p tcp --dport $Port -j ACCEPT
fi
假设iptables 中有2223 2224 grep 'tcp dpt:22' 会过滤所有包含22的端口, 正确的应该是这样grep -E "dpt:22\>
#!/bin/bash
# check sshd port drop
DROP=`/sbin/iptables -nvL --line-number|grep -E "dpt:22\>"|egrep -iE 'DROP|REJECT'|wc -l``
if [ $n -ge 1 ]
then
/sbin/iptables -I INPUT -p tcp --dport $Port -j ACCEPT
fi
假设iptables 中有2223 2224 grep 'tcp dpt:22' 会过滤所有包含22的端口, 正确的应该是这样grep -E "dpt:22\>
0
不知道为什么今晚回到来将你的脚本来测试一下,第一次测试是可以,再来多次测试就不行了..
boy461205160 发表于 2016-2-24 14:03
已修正这个bug,
我觉得铭哥写的也不是很完美,有木有更完美的,暂时没想到........
不知道为什么今晚回到来将你的脚本来测试一下,第一次测试是可以,再来多次测试就不行了..
0
本帖最后由 boy461205160 于 2016-2-25 11:52 编辑
你误封只有一次把,总不会又多次把,你可以把 “3”改成5次也可以,适当多2次,如果多次误封,那就无语了,,,
重写了shell bash,测试完美解决了你说的bug,只要发现port 22 drop,就开启22端口
wsw13640218682 发表于 2016-2-24 23:51
不知道为什么今晚回到来将你的脚本来测试一下,第一次测试是可以,再来多次测试就不行了..
你误封只有一次把,总不会又多次把,你可以把 “3”改成5次也可以,适当多2次,如果多次误封,那就无语了,,,
重写了shell bash,测试完美解决了你说的bug,只要发现port 22 drop,就开启22端口
0
脚本已修正,。你写的也有问题额,你这个会不停的循环添加 -J ACCEPT 22 规则
迷城 发表于 2016-2-24 14:42
#!/bin/bash
# check sshd port drop
DROP=`/sbin/iptables -nvL --line-number|grep -E "dpt:22\>"|egr ...
脚本已修正,。你写的也有问题额,你这个会不停的循环添加 -J ACCEPT 22 规则
0
本帖最后由 rolay8 于 2016-2-28 22:55 编辑
- #!/bin/bash
- result=`/sbin/iptables -nvL|grep "dpt:22"|awk '{print $3}'`
- if [ $? -eq 0 ];then
- case $result in
- DROP|REJECT)
- /sbin/iptables -F;;
- *)
- exit 0;;
- fi
0
- #!/bin/bash
- c =`netstat -lnp |grep 22 |wc -l`
- if [ $c ==0 ]
- then
- /sbin/iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
- service iptables save
- else
- echo "22 is on"
- fi
0
本帖最后由 乐橙306 于 2016-3-3 16:52 编辑
- [root@wh-cnc-51 303]# cat 3.sh
- #!/bin/bash
- # Monitor iptables port 22 .
- while true
- do
- iptables -nvL | grep DROP | grep "dpt:22" > /dev/null
- if [ $? -eq 0 ]
- then
- /sbin/iptables -F
- fi
- sleep 60
- done
- [root@wh-cnc-51 303]#
0
- #!/bin/bash
- a=`/sbin/iptables -nvL --line-number |awk '/dpt:22/{if($4=="DROP" -o $4=="REJECT")print}'|wc -l`
- if [ "$a" -lt 5 ]
- then
- echo "$a" >> /tmp/iptable22.log
- /sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
- #/etc/init.d/iptables restart
- fi
0
本帖最后由 linux-小莫 于 2016-4-7 20:52 编辑
#!/bin/bash
a=`iptables -nvL |awk '/dpt:22\>/ && ($3~"REJECT" || $3~"DROP")'|wc -l`
b=`iptables -nvL |awk '/dpt:22\>/ && $3~"ACCEPT"'|wc -l`
if [ $a -gt 0 ] && [ $b -lt 5 ]
then
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
fi
这样好一点,达到一定次数就不会重复插入了
#!/bin/bash
a=`iptables -nvL |awk '/dpt:22\>/ && ($3~"REJECT" || $3~"DROP")'|wc -l`
b=`iptables -nvL |awk '/dpt:22\>/ && $3~"ACCEPT"'|wc -l`
if [ $a -gt 0 ] && [ $b -lt 5 ]
then
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
fi
这样好一点,达到一定次数就不会重复插入了
0
#!/bin/bash
b=`netstat -lnp|grep ssh|awk -F" " '{print $4}'|awk -F":" '$1~/0.0.0.0/ {print $2}'`
a=`iptables -nL --line-num|grep "$b"|awk -F" " '{print $2}'`
c=`iptables -nL --line-num|grep "$b"|awk -F" " '{print $1}'`
if [ $a == DROP ]
then
iptables -D INPUT $c
else
echo "not this rule"
fi
自动提取ssh端口并自动删除封掉的规则
b=`netstat -lnp|grep ssh|awk -F" " '{print $4}'|awk -F":" '$1~/0.0.0.0/ {print $2}'`
a=`iptables -nL --line-num|grep "$b"|awk -F" " '{print $2}'`
c=`iptables -nL --line-num|grep "$b"|awk -F" " '{print $1}'`
if [ $a == DROP ]
then
iptables -D INPUT $c
else
echo "not this rule"
fi
自动提取ssh端口并自动删除封掉的规则
0
本帖最后由 彭海恒 于 2016-4-12 19:26 编辑
- vim checkport.sh
- #!/bin/bash
- #check ssh port drop or reject
- #writeen by penghh
- num=`iptables -nvL --line | grep -E "dpt:22\>" |awk -F " " '{print $1}'`
- act=`iptables -nvL --line | grep -E "dpt:22\>" |awk -F " " '{print $4}'`
- if [ $act == DROP ] || [ $act == REJECT ]
- then
- iptables -D INPUT $num
- iptables -I INPUT -p tcp --dport 22 -j ACCEPT
- echo "The port 22 in `date` are wrong" >> /tmp/dport.log
- fi
- if [ $1 == first ]
- then
- dir=`pwd`
- echo "* * * * * root bash $dir/$0 2>/dev/null" >> /etc/crontab
- fi
- #执行# bash checkport.sh first
0
总觉得一分钟一次有点太浪费资源了,觉得五分钟也好啊
echo “*/5 * * * * bash $dir/$0" >> /etc/crontab
彭海恒 发表于 2016-4-12 18:21
vim checkport.sh
#!/bin/bash
#check ssh port drop or reject
总觉得一分钟一次有点太浪费资源了,觉得五分钟也好啊
echo “*/5 * * * * bash $dir/$0" >> /etc/crontab
0
本帖最后由 luckytodd 于 2016-5-19 23:40 编辑
#!/bin/bash
ipnum=` iptables -nvL --line-numbers|grep "dpt:22"|awk '{print $1}'`
if iptables -nvL|grep "dpt:22"
then
iptables -D INPUT $ipnum
fi
crontab -e
*/1 * * * * /bin/bash 脚本路径
#!/bin/bash
ipnum=` iptables -nvL --line-numbers|grep "dpt:22"|awk '{print $1}'`
if iptables -nvL|grep "dpt:22"
then
iptables -D INPUT $ipnum
fi
crontab -e
*/1 * * * * /bin/bash 脚本路径
0
本帖最后由 jxcia 于 2016-6-7 19:34 编辑
- #!/bin/bash
- ##written by lin
- ##check port 22
- iptables=/sbin/iptables
- $iptables -P INPUT ACCEPT;
- $iptables -P OUTPUT ACCEPT;
- a=`$iptables -nvL |grep dpt:22|awk '{print $3}'`
- if [ $a == REJECT ]||[ $a == DROP ]
- #if [ "$a" != "ACCEPT" ]
- then $iptables -I INPUT -p tcp --dport 22 -j ACCEPT
- fi
0
#!/bin/bash
for j in `iptables -nvL --line-number|grep "dpt:22 "|awk '{print $4}'`
do
for n in `iptables -nvL --line-number|grep "dpt:22 "|awk '{print $1}'`
do
if [ "$j" = "REJECT" ]||[ "$j" = "DROP" ]
then
/sbin/iptables -D INPUT $n
fi
done
done
~
for j in `iptables -nvL --line-number|grep "dpt:22 "|awk '{print $4}'`
do
for n in `iptables -nvL --line-number|grep "dpt:22 "|awk '{print $1}'`
do
if [ "$j" = "REJECT" ]||[ "$j" = "DROP" ]
then
/sbin/iptables -D INPUT $n
fi
done
done
~
0
#!/bin/bash
port=`iptables -nL|grep 22|awk -F ' ' '{print $NF}'|cut -d: -f2`
if [ $port -eq 22 ];then
iptables -D INPUT -s 192.168.1.188 -p tcp --dport 22 -j DROP
fi
port=`iptables -nL|grep 22|awk -F ' ' '{print $NF}'|cut -d: -f2`
if [ $port -eq 22 ];then
iptables -D INPUT -s 192.168.1.188 -p tcp --dport 22 -j DROP
fi
0
#!/bin/bash
#### by 17-hy
port=22
ipaddr=127.0.0.1
NMAP=`rpm -qa nmap|wc -l`
[ $NMAP -eq 0 ] && yum install -y nmap
STATUS=`nmap "$ipaddr" -p "$port"|awk 'NR==6 {print $2}'`
if [ "$STATUS" != "open" ]
then
/sbin/iptables -t filter -I INPUT -p tcp --dport $port -j ACCEPT
fi
#### by 17-hy
port=22
ipaddr=127.0.0.1
NMAP=`rpm -qa nmap|wc -l`
[ $NMAP -eq 0 ] && yum install -y nmap
STATUS=`nmap "$ipaddr" -p "$port"|awk 'NR==6 {print $2}'`
if [ "$STATUS" != "open" ]
then
/sbin/iptables -t filter -I INPUT -p tcp --dport $port -j ACCEPT
fi
0
DROP 变量怎么成了$n
迷城 发表于 2016-2-24 14:42
#!/bin/bash
# check sshd port drop
DROP=`/sbin/iptables -nvL --line-number|grep -E "dpt:22\>"|egr ...
DROP 变量怎么成了$n
0
#/bin/bash
ipt=/sbin/iptables
num= `$ipt -nvL --line-numbers|grep dpt:22|awk -F " " '{print $1}'`
if { -n $number ]
then $ipt -D INPUT $num
else exit
fi
再cronttab -e * * * * * /bin/bash /tmp/22.sh
ipt=/sbin/iptables
num= `$ipt -nvL --line-numbers|grep dpt:22|awk -F " " '{print $1}'`
if { -n $number ]
then $ipt -D INPUT $num
else exit
fi
再cronttab -e * * * * * /bin/bash /tmp/22.sh
0
本帖最后由 dessler 于 2016-8-31 14:20 编辑
- #!/bin/bash
- abc=`/sbin/iptables -nvL |grep dpt:22 |grep DROP`
- xyz=`/sbin/iptables -nvL |grep dpt:22 |grep REJECT`
- if [ -z $abc -o -z $xyz ]; then
- /sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
- fi
0
#!/bin/bash
ip=192.168.2.88
check_ok () {
if [ $? -ne 0 ]
then
echo "error,please check error messages"
exit 1
fi
}
yum install -y nc >/dev/null 2>&1
check_ok
a=`ps aux|grep sshd|wc -l`
b=`iptables -nvL|grep 'dpt:22'`
nc -t $ip -z 22
if [ $? -ne 0 ]
then
ping www.baidu.com -c5 >/dev/null 2>&1
if [ $? -ne 0 ]
then
service network restart
check_ok
ping www.baidu.com -c5 >/dev/null 2>&1
check_ok
else
if [ $a -le 2 ]
then
service sshd restart
check_ok
else
if [ -n "$b" ]
then
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
fi
fi
fi
else
echo "port 22 is actived"
fi
ip=192.168.2.88
check_ok () {
if [ $? -ne 0 ]
then
echo "error,please check error messages"
exit 1
fi
}
yum install -y nc >/dev/null 2>&1
check_ok
a=`ps aux|grep sshd|wc -l`
b=`iptables -nvL|grep 'dpt:22'`
nc -t $ip -z 22
if [ $? -ne 0 ]
then
ping www.baidu.com -c5 >/dev/null 2>&1
if [ $? -ne 0 ]
then
service network restart
check_ok
ping www.baidu.com -c5 >/dev/null 2>&1
check_ok
else
if [ $a -le 2 ]
then
service sshd restart
check_ok
else
if [ -n "$b" ]
then
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
fi
fi
fi
else
echo "port 22 is actived"
fi
编辑回复