返回顶部

pzzning

导航

iptables log日志记录功能扩展应用:iptables自动配置临时访问策略,任意公网登录服务器

一、修改日志记录:

1. 修改配置文件:

vi /etc/rsyslog.conf
添加以下内容
#iptables log
kern.=notice                                             /var/log/iptables.log

2. 重启rsyslog

service rsyslog restart

二、防火墙配置:

iptables -A INPUT -p tcp --dport 11000 -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

 

posted on 2019-04-08 21:21  pzzning  阅读(1357)  评论(0编辑  收藏  举报