一、修改日志记录:
1. 修改配置文件:
vi /etc/rsyslog.conf 添加以下内容 #iptables log kern.=notice /var/log/iptables.log
2. 重启rsyslog
service rsyslog restart
二、防火墙配置:
iptables -A INPUT -p tcp --dport 110110 -j LOG --log-level notice --log-prefix "IPTABLES TCP-IN: "
注意:
1. 根据防火墙执行顺序,靠前的策略先生效
2. 故iptables日志记录的策略放在所有白名单的后面。
三、扩展应用:跳过防火墙限制,任意公网登录服务器。
【需求前提】1. 服务器iptables访问限制,只允许白名单才能访问;2. 公司VPN地址在白名单里,登录VPN访问服务器。
【存在问题】 公司VPN登录需要短信验证,有时网络不稳定。
【实现思路】
(非原本白名单IP,ssh登录只允许密码尝试一次,登录错误需要另外换IP尝试。)
流程图如下:
1. 记录防火墙非白名单ip的ssh登录的被拒绝ssh日志(如一、二配置);
2. 脚本实现:
添加crond任务:
*/1 * * * * /bin/bash /root/iptables.sh
脚本内容:
#!/bin/bash #20190408 #zhengning time=`date +"%Y%m%d %H:%M:%S"` cmdlog=/var/log/iptables.log #ssh的端口号 DPORT=122 iptablesAddIp(){ /sbin/iptables -I INPUT -s $log_ip -j ACCEPT echo "$time | /sbin/iptables -I INPUT -s $log_ip -j ACCEPT" >>$cmdlog } iptablesAddIpPort(){ /sbin/iptables -I INPUT -s $log_ip -p tcp --dport $DPORT -j ACCEPT echo "$time | /sbin/iptables -I INPUT -s $log_ip -p tcp --dport $DPORT -j ACCEPT" >>$cmdlog # sleep 5 # /bin/bash $0 } #一、还原防火墙配置,筛选日志中ssh的端口被拒绝10次的ip /sbin/service iptables restart echo "$time | /sbin/service iptables restart" >>$cmdlog log_ip=`cat /var/log/iptables.log|grep "DPT=$DPORT" | grep -Eo 'SRC=[0-9\.]+' |grep -Eo [0-9\.]+{8} |tail -n10|uniq -c|awk '$1==10{print $2}'` [ $log_ip ] || exit #二、登录错误判断 # 1: 重启防火墙,终止脚本 # 0: 向下执行脚本 [ `/usr/bin/lastb |grep $log_ip -c` -gt 0 ] && exit #三、登录成功判断 # 1: 将 ip 临时加入白名单 # 0: 将 ip指定端口 临时加入白名单 [ `/usr/bin/last|grep "$(date|awk -F\: '{print $1}')" |grep $log_ip -c` -gt 0 ] && iptablesAddIp || iptablesAddIpPort