ftp软件为vsftpd
增加ftp服务器安全的一个脚本,有很多时候我们并不知道有人在试探性登录自己的ftp服务器,有了这个脚本,就好了。
脚本内容
#cat vsftpd.sh
#!/bin/bash
CONF=/etc/vsftpd/vsftpd.conf
DIR=/var/log/vsftpd
mkdir $DIR 2>/dev/null
VLOG=$DIR/vsftpd.log
touch $DIR/vsftpd.log
USEVLOG=$DIR/use_vsftp.log
FAILIP=$DIR/vsftpd_failipnetstat -antlp |grep vsftpd |awk '{print $4}' |awk -F0. '{print $5}'
DENYIP=$DIR/deny_ip
CONF=/etc/vsftpd/vsftpd.conf
DIR=/var/log/vsftpd
mkdir $DIR 2>/dev/null
VLOG=$DIR/vsftpd.log
touch $DIR/vsftpd.log
USEVLOG=$DIR/use_vsftp.log
FAILIP=$DIR/vsftpd_failipnetstat -antlp |grep vsftpd |awk '{print $4}' |awk -F0. '{print $5}'
DENYIP=$DIR/deny_ip
PORT=`netstat -antlp |grep vsftpd |awk '{print $4}' |awk -F0. '{print $5}'`
BACKDENYIP=$DIR/back_deny_ip
LOGBACK=$DIR/logback
LN1=`wc -l $BACKDENYIP |awk '{print $1}'`
LOGCOMM="(dual_log_enable=YES|vsftpd_log_file=/var/log/vsftpd.log)"
time=`date +"%Y-%m-%d %H-%M-%S"`
egrep $LOGCOMM /etc/vsftpd/vsftpd.conf >/dev/null
if [ $? -gt 0 ] ; then
echo "dual_log_enable=YES" >> $CONF
echo "vsftpd_log_file=/var/log/vsftpd.log" >> $CONF
service vsftpd reload >/dev/null
else
echo "conf ok " >/dev/null
fi
cat $VLOG >> $LOGBACK
cat $VLOG > $USEVLOG
cat $USEVLOG |grep FAIL |awk '{print $12}' |awk -F'"' '{print $2}' > $FAILIP
cat $FAILIP | uniq -c | awk '$1 > 10 {print $1" "$2}' > $DENYIP; cat $DENYIP >> $BACKDENYIP
for ip in `awk '{print $2}' $DENYIP`
do
iptables -I INPUT -s $ip -p tcp --dport $PORT -j REJECT
done
LN2=`wc -l $BACKDENYIP |awk '{print $1}'`
VALUE=`echo $LN2-$LN1 | bc`
if [ $VALUE -gt 0 ] ; then
sendmail -t <<EOF
from: monitor@zhaoyun.com
to:15101507336@139.com
subject: warning
$time 有人正在试图登录您的FTP服务器,系统已经帮你拦截,详情请登录服务器进行查看。
EOF
BACKDENYIP=$DIR/back_deny_ip
LOGBACK=$DIR/logback
LN1=`wc -l $BACKDENYIP |awk '{print $1}'`
LOGCOMM="(dual_log_enable=YES|vsftpd_log_file=/var/log/vsftpd.log)"
time=`date +"%Y-%m-%d %H-%M-%S"`
egrep $LOGCOMM /etc/vsftpd/vsftpd.conf >/dev/null
if [ $? -gt 0 ] ; then
echo "dual_log_enable=YES" >> $CONF
echo "vsftpd_log_file=/var/log/vsftpd.log" >> $CONF
service vsftpd reload >/dev/null
else
echo "conf ok " >/dev/null
fi
cat $VLOG >> $LOGBACK
cat $VLOG > $USEVLOG
cat $USEVLOG |grep FAIL |awk '{print $12}' |awk -F'"' '{print $2}' > $FAILIP
cat $FAILIP | uniq -c | awk '$1 > 10 {print $1" "$2}' > $DENYIP; cat $DENYIP >> $BACKDENYIP
for ip in `awk '{print $2}' $DENYIP`
do
iptables -I INPUT -s $ip -p tcp --dport $PORT -j REJECT
done
LN2=`wc -l $BACKDENYIP |awk '{print $1}'`
VALUE=`echo $LN2-$LN1 | bc`
if [ $VALUE -gt 0 ] ; then
sendmail -t <<EOF
from: monitor@zhaoyun.com
to:15101507336@139.com
subject: warning
$time 有人正在试图登录您的FTP服务器,系统已经帮你拦截,详情请登录服务器进行查看。
EOF
自己研究了个脚本,就是有试图登录ftp的,连续实验密码错误超过10次,将被iptables拒绝掉。
我是在red hat 5.5的环境下实验的,没有问题。脚本第一次执行时会报错,第二次就不会了,因为好几个文件都没有建好。
把这个脚本写好加入到任务计划中,如果是每5分钟执行一次那么这个脚本的作用就是,在5分钟内连续输入10次的错误密码,就会被拒绝掉的。
*/5 * * * * root /root/vsftpd.sh
邮件报警截图
![](https://i-blog.csdnimg.cn/blog_migrate/ad028985284504922f29baacf55c5a72.jpeg)
转载于:https://blog.51cto.com/zhaoyun/620680