荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Yeats (懒懒的暖暖的叶子), 信区: NetResource
标  题: proftpd 自动禁封匿名尝试连接 脚本
发信站: 荔园晨风BBS站 (Fri Dec 22 14:34:07 2006), 站内

zz

发信人: hetun (河豚), 信区: Comic
标  题: neo启动匿名用户尝试连接自动封禁脚本

rt,研究了一个上午最后搞定了一个自动封禁的脚本,贴出来给大家参考
脚本内容如下:
#---------------------------------------------------------------------------
/usr/local/bin/ftpwho -f /usr/local/var/proftpd/proftpd.scoreboard -vo oneline
 | grep "(authenticating)"|
 awk '{print "iptables -I INPUT -s "$7" -p tcp --dport 8021 -j DROP";}'
>>ban_ip_list_history

/usr/local/bin/ftpwho -f /usr/local/var/proftpd/proftpd.scoreboard -vo oneline
 | grep "(authenticating)"|
 awk '{print "iptables -I INPUT -s "$7" -p tcp --dport 8021 -j DROP";}'
>ban_ip_list

/usr/local/bin/ftpwho -f /usr/local/var/proftpd/proftpd.scoreboard -vo oneline
 | grep "(authenticating)"|
 awk '{print  "kill -9 "$1;}' >kill_pid_list

chmod 755 kill_pid_list
chmod 755 ban_ip_list
source kill_pid_list
source ban_ip_list
#----------------------------------------------------------
下面来解释一下这个脚本每句话的含义
/usr/local/bin/ftpwho -f /usr/local/var/proftpd/proftpd.scoreboard -vo oneline
用于列出当前所有正在连接或者已经连接的ftp用户信息,包括IP等等,ftpwho是一个PROFT
PD自带的命令,如果用GLFTPD,那么也可以找到对应的命令
如果单独执行这条命令,得到结果其中某一行如下:
21275 (none)   [  0m4s] (authenticating) client: 202.206.97.48 [202.206.97.48]
 server: 59.66.118.96:8021 (neo.Blueink.Org Server)

我们可以看到,返回的是一串字符串
其中第一个子字符串21275是pid,对应的变量代表是$1
第七个子字符串202.206.97.48是ip,对应变量是$7

所以说,这句话返回了当前FTP连接用户的信息
而grep grep "(authenticating)" 是把其中有(authenticating)的字符串行抓出来
对于proftpd而言,用户出于这种状态就是因为错误的用户名和密码引起的
所以前面两句话写在一起,作用就是返回ftp用户中处于(authenticating)状态的用户信息
awk '{print "iptables -I INPUT -s "$7" -p tcp --dport 8021 -j DROP";}'
这句话的作用是输出一个字符串,其中$7代表ip
这句话如果在命令行中执行,那么意思是把$7对应的ip的8021端口的所有数据包丢弃
>>ban_ip_list_history的意思是往当前目录下的ban_ip_list_history文件尾部追加
这句话,作为历史纪录

同理,第二段话是把当前要封禁的IP写入一个新文件ban_ip_list
注意>写入的话每次都是把源文件清空,然后写入
第三句话则是把对应的连接的线程写入一个新文件kill_pid_list


chmod 755是把文件改为可执行文件
source的意思是执行该文件.注意一定要先执行KILL_PID_LIST 然后在执行BAN_IP_LIST
因为BAN_IP_LIST可能会很长(如果同时有很多个不正确的用户试图连接),而此时
执行IPTABLES规则需要一定的时间,可能在这段时间内,原来的IP对应的PID已经
超过FTP服务段规定的范围,自动断开了,也就是PID已经不存在了。这时候再KILL_PID_L
IST,很可能会误杀线程


恩,总之目前这是对付错误用户名反复重新连接的好办法
我把这个脚本丢到cron里面每分钟运行一次,然后取消了proftpd的ip限制
结果经过若干次执行后,基本上就清理干净了



--

※ 来源:.BTBBS btbbs.org.[FROM: 166.111.77.231]

--

以上所示言论不代表本人观点


※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.111.27]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店