2021-05-23 05:37:24
Linux防火墙日志管理主要通过rsyslog服务实现日志的重定向与滚动配置,结合iptables/firewalld规则记录并处理攻击行为,最终通过日志分析识别恶意IP并封禁。
一、日志重定向配置日志来源与默认路径
Linux内核生成的防火墙相关日志默认存储在/var/log/kern.log中。
若需将日志重定向至其他文件(如/var/log/firewalld.log),需通过rsyslog服务配置实现,而非直接修改iptables规则。
rsyslog服务配置步骤
启用配置文件加载:确保/etc/rsyslog.conf中以下行取消注释,以加载/etc/rsyslog.d/目录下的配置文件:
include(file="/etc/rsyslog.d/*.conf" mode="optional")创建自定义配置文件:在/etc/rsyslog.d/目录下新建firewalld.conf文件,写入以下内容将内核日志重定向至指定文件:
kern.* /var/log/firewalld.log
配置目的
防止日志文件无限增长占用磁盘空间,通过logrotate工具实现日志按时间或大小滚动存储。
具体操作
编辑/etc/logrotate.d/syslog文件,添加或修改滚动规则(示例配置需根据实际需求调整):
/var/log/firewalld.log { weekly rotate 4 compress missingok notifempty create 0640 root adm sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript}
自定义攻击类型链(Chain)
使用firewall-cmd命令添加针对不同攻击类型的链,例如:
firewall-cmd --permanent --direct --add-chain ipv4 filter PORT_SCANNINGfirewall-cmd --permanent --direct --add-chain ipv4 filter SPOOFINGfirewall-cmd --permanent --direct --add-chain ipv4 filter SYN_ATTACKfirewall-cmd --permanent --direct --add-chain ipv4 filter TCP_FLOOD规则定义与日志记录
每条链需定义两个目标动作:
-j LOG:将匹配规则的数据包信息写入日志文件(如/var/log/firewalld.log)。
-j DROP:丢弃匹配规则的数据包。
示例规则:
端口扫描防护:
ipv4 mangle PORT_SCANNING 0 -m recent --name portscan --rcheck --seconds 25200 -j DROPipv4 mangle PORT_SCANNING 1 -m recent --name portscan --removeipv4 mangle PORT_SCANNING 2 -p tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "port_scan:"ipv4 mangle PORT_SCANNING 3 -p tcp --dport 139 -m recent --name portscan --set -j DROPIP欺骗防护:
ipv4 mangle SPOOFING 0 -j LOG --log-prefix "ip_spoofing:"ipv4 mangle SPOOFING 1 -j DROP完整规则集示例
以下规则组合实现了对无效TCP状态、异常MSS值、伪造TCP标志、IP欺骗、端口扫描及TCP洪泛的防护:
# 无效TCP状态处理ipv4 mangle ANTI_TCP_INVALID 0 -m conntrack --ctstate INVALID -j DROPipv4 mangle ANTI_TCP_INVALID 1 -p tcp '!' --syn -m conntrack --ctstate NEW -j DROP# 异常MSS值处理ipv4 mangle ANTI_TCP_UNORMAL_MSS 0 -p tcp -m conntrack --ctstate NEW -m tcpmss '!' --mss 536:65535 -j DROP# 伪造TCP标志处理ipv4 mangle ANTI_FORGE_TCP_FLAG 0 -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j SYN_ATTACKipv4 mangle ANTI_FORGE_TCP_FLAG 1 -p tcp --tcp-flags FIN,SYN FIN,SYN -j SYN_ATTACK# ...(其他标志规则省略)# IP欺骗防护ipv4 mangle ANTI_IP_SPOOF 0 -s 224.0.0/3 -j SPOOFINGipv4 mangle ANTI_IP_SPOOF 1 -s 192.0.2.0/24 -j SPOOFING# ...(其他IP范围规则省略)# TCP洪泛防护ipv4 filter ANTI_TCP_FLOOD 0 -p tcp -m connlimit --connlimit-above 80 -j REJECT --reject-with tcp-resetipv4 filter ANTI_TCP_FLOOD 1 -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT日志收集与验证
重启firewalld服务后,运行数天,syslog服务会记录所有攻击尝试至/var/log/firewalld.log。
通过日志分析可识别恶意IP,例如:
Jun 10 14:30:22 server1 port_scan: IN=eth0 OUT= MAC=00:11:22:33:44:55 SRC=192.168.1.100 DST=192.168.1.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=12345 DF PROTO=TCP SPT=54321 DPT=139 WINDOW=64240 RES=0x00 SYN URGP=0自动封禁机制
规则中通过recent模块实现临时封禁(如端口扫描封禁25200秒,即7天):
ipv4 mangle PORT_SCANNING 0 -m recent --name portscan --rcheck --seconds 25200 -j DROP