
正文
Ubuntu通过iptables防止ssh暴力破解
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
步骤
- 安装iptables-persistent用于保存iptables规则
- 配置iptables规则
- 实时更新iptables规则以拦截IP访问
安装iptables-persistent
sudo aptitude install iptables-persistent
配置iptables规则
# 先查看网卡的名称,修改脚本中的$EXTIF变量
ip addrsudo mkdir -p /usr/local/feng/iptables/cat << 'EOF' | sudo tee /usr/local/feng/iptables/iptables.rule
#!/bin/bashEXTIF="ens4"INIF=""INNET=""export EXTIF INIF INNET# 设置核心的网络功能:echo "1" > /proc/sys/net/ipv4/tcp_syncookiesecho "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts# 清除规则,设定预设政策以及开放lo与相关的设定值PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATHiptables -F ; iptables -X ; iptables -Ziptables -P INPUT DROPiptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPTiptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT# 启动额外的防火墙scriptif [ -f /usr/local/feng/iptables/iptables.deny ]; thensh /usr/local/feng/iptables/iptables.denyfiif [ -f /usr/local/feng/iptables/iptables.allow ]; thensh /usr/local/feng/iptables/iptables.allowfiif [ -f /usr/local/feng/httpd-err/iptables.http ]; thensh /usr/local/feng/httpd-err/iptables.httpfiAICMP="0 3 3/4 4 11 12 14 16 18"for tyicmp in $AICMPdoiptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPTdoneiptables -A INPUT -p TCP -i $EXTIF --dport 22 --sport 1024:65534 -j ACCEPT
iptables -A INPUT -p TCP -i $EXTIF --dport 80 --sport 1024:65534 -j ACCEPT
iptables -A INPUT -p TCP -i $EXTIF --dport 443 --sport 1024:65534 -j ACCEPT
iptables -A INPUT -p TCP -i $EXTIF --dport 2333 --sport 1024:65534 -j ACCEPT# ubuntu
/usr/sbin/netfilter-persistent save
EOF## 执行脚本
sudo bash /usr/local/feng/iptables/iptables.rule
实时更新iptables
编写脚本
cat << 'EOF' | sudo tee /usr/local/feng/iptables/secure_iptables.sh
cat /var/log/auth.log|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' | sort -g -t '=' -k2 > /tmp/black.txt #尝试登录的次数和ip
DEFINE="3" #单个ip尝试登录最大值for i in `cat /tmp/black.txt`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt $DEFINE ]; then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ]; then
grep "$IP" /usr/local/feng/iptables/iptables.deny > /dev/null
if [ $? -gt 0 ];then
if [ ! "$IP" == "127.0.0.1" ]; then
echo "iptables -A INPUT -s $IP -j DROP" >> /usr/local/feng/iptables/iptables.deny
sh /usr/local/feng/iptables/iptables.rule
fi
fi
fi
fi
done
EOF
配置crontab
# 涉及防火墙,需要root权限
echo "* * * * * root bash /usr/local/feng/iptables/secure_iptables.sh" | sudo tee -a /etc/crontab
查看被拦截IP
# 通过iptables
sudo iptables-save# 查看iptables.deny文件
sudo cat /usr/local/feng/iptables/iptables.deny
释放被拦截IP
# 设置IP变量
IP=112.27.168.236# 把IP从iptables.deny移除
sudo sed -i "/${IP}/d" /usr/local/feng/iptables/iptables.deny# 把IP从auth.log移除
sudo sed -i "/${IP}/d" /var/log/auth.log# 更新iptables规则
sudo bash /usr/local/feng/iptables/iptables.rule# 检查防火墙规则,检查auth.log文件
sudo iptables-save | grep $IP
cat /var/log/auth.log|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' | grep ${IP}# 由于 rsyslogd 的登录文件(auth.log)只要“被编辑过”就无法继续记录,需要重启rsyslog服务
sudo systemctl restart rsyslog.service








