CentOS 7下禁用firewalld后如何全量记录iptables事件?
我明白你在Debian里习惯用dmesg查看iptables事件,但CentOS 7的日志处理逻辑略有不同,下面一步步教你配置,实现全量iptables事件记录:
1. 添加iptables全局日志规则
首先要给iptables的核心链(INPUT、OUTPUT、FORWARD)添加日志规则,确保所有经过的流量都会被记录。这些规则要放在链的最顶端,避免被后续规则跳过:
# 给INPUT链添加日志规则,前缀标记为iptables-input: iptables -I INPUT 1 -j LOG --log-prefix "iptables-input: " --log-level info # 给OUTPUT链添加日志规则 iptables -I OUTPUT 1 -j LOG --log-prefix "iptables-output: " --log-level info # 给FORWARD链添加日志规则(如果用到转发功能的话) iptables -I FORWARD 1 -j LOG --log-prefix "iptables-forward: " --log-level info
这里用--log-level info是为了让日志级别更合理,默认LOG target用的是warning级别,容易和其他系统警告混淆;--log-prefix则能帮你快速区分不同链的日志内容。
2. 配置rsyslog捕获iptables日志
CentOS 7默认用rsyslog处理系统日志,内核产生的iptables日志会通过kern设施发送,我们可以配置rsyslog把这些日志单独存到一个专属文件里,方便后续查看:
编辑rsyslog配置文件/etc/rsyslog.conf,在文件末尾添加以下内容:
# 捕获所有带iptables前缀的内核日志 :msg,contains,"iptables-" /var/log/iptables.log # 避免这些日志重复写入其他日志文件(比如/var/log/messages) & stop
添加完成后重启rsyslog服务让配置生效:
systemctl restart rsyslog
3. 持久化iptables规则
因为你已经禁用了firewalld,应该是用iptables-services来管理iptables规则的,所以要把刚才添加的日志规则保存下来,避免系统重启后丢失:
service iptables save
执行后规则会被保存到/etc/sysconfig/iptables文件里,下次系统启动时会自动加载这些规则。
4. 查看日志的方法
现在所有iptables事件都会被记录到/var/log/iptables.log里,你可以用以下命令实时监控日志:
tail -f /var/log/iptables.log
也可以通过journalctl查看内核日志中的iptables相关内容:
journalctl -k | grep iptables-
和Debian的区别说明
Debian默认可能会把内核日志(包括iptables事件)直接输出到dmesg,但CentOS 7的rsyslog默认会把内核日志统一收集到/var/log/messages,我们上面的配置是把iptables日志单独分离出来,更方便针对性查看和管理。
内容的提问来源于stack exchange,提问作者debek

