有个需求,公司用的是动态ADSL上网的,ip地址每次断线后就变了。所以在22端口的连接IP上一直没做限制
但这样感觉有很多地址扫描端口进行口令测试的。所以写了个python脚本对远程的IP进行更改。
运行脚本之前,一定要保证iptables里22端口那行要有指定的IP连接。代码如下:
#!/bin/env python
#write by andy.zhang
import os
of=file('/etc/sysconfig/iptables','r')
old_ip=''
while True:
line=of.readline()
if '/32' in line and '--dport 22' in line:
''' print len(line) '''
fir=0
for i in range(len(line)):
if line[i] in '0123456789':
fir=i
break
for i in range(len(line)):
if line[i] == '/':
old_ip= line[fir:i].lstrip().rstrip()
break
if line =='' or old_ip != '':
of.close()
break
if old_ip == '':
'''print "Setting Is Erroy!Please check IPTABLES!!!" '''
exit
if os.system('dig +short yhzxq.eicp.net >/tmp/new_ip.txt') != 0:
''' print 'IP Error,Exit' '''
exit
of_new_ip=file('/tmp/new_ip.txt','r')
new_ip=of_new_ip.readline().lstrip().rstrip()
of_new_ip.close()
if old_ip != new_ip:
of=file('/etc/sysconfig/iptables','r')
new_file=file('/etc/sysconfig/new_iptables','w')
while True:
line=of.readline()
if old_ip in line:
wline=line.replace(old_ip,new_ip)
''' print wline,'\n' '''
new_file.write(wline)
else:new_file.write(line)
if line == '':
new_file.flush()
new_file.close()
of.close()
break
os.system('rm -f /etc/sysconfig/iptables')
os.system('mv /etc/sysconfig/new_iptables /etc/sysconfig/iptables')
os.system('/etc/init.d/iptables restart')
说明:1,dig命令是要先安装的,具体可以先百度。
2,以上红色的字替换成你的动态域名。建议用花生壳。
3,iptables里要先有类似这个:
-A INPUT -s 14.156.29.204/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
4,支行之前请备份iptables,测试好之后可加入到crontab里。
百度网盘下载链接:链接:http://pan.baidu.com/s/1jGThjc6 密码:gahy
有想过改写代码,python里有一段换字符的代码很不错。但是,这里,能用,咱就不换了。
发表评论