跳转至

配置 rsyslog 为 iptables 日志单独写入日志文件


2024-11-04 by dongnan

问题描述

iptables 规则中添加了记录 DROP 日志的规则, 以便了解是否有被错误丢弃的流量:

iptables -A INPUT -j LOG --log-prefix "iptables dropped: " --log-level 4

但是带来了新的问题,/var/log/syslog 文件写入大量的关于 DROP 日志:

Nov  4 07:01:50 net180-gateway-254 kernel: [198919.143290] iptables dropped: IN=eth0 OUT= MAC=bc:24:11:xxxx:bc:99:30xxxx8:08:00 SRC=49.xxx.46.209 DST=219.xx.xx.179 LEN=40 TOS=0x00 PREC=0x00 TTL=236 ID=58015 PROTO=TCP SPT=60642 DPT=47598 WINDOW=1024 RES=0x00 SYN URGP=0

环境描述

系统及软件版本

  • OS: Ubuntu Server 20.04
  • rsyslog: 8.2001.0-1ubuntu1.3
  • iptables: 1.8.4-3ubuntu2.1

目标

配置 rsyslog 为 iptables 规则产生的日志单独存放在 /var/log/iptables.log 文件。

步骤

按以下步骤尝试将 iptables 日志写入独立文件:

确认 rsyslog 已安装并运行

先确保它已安装并运行:

apt update
apt install rsyslog
systemctl enable rsyslog
systemctl start rsyslog

配置 rsyslog 接收内核日志

编辑 /etc/rsyslog.conf 文件,确保以下模块已启用:

module(load="imklog")   # 接收内核日志

保存并重启 rsyslog:

systemctl restart rsyslog

创建 iptables 日志文件配置

/etc/rsyslog.d/ 中创建一个新的配置文件来单独记录 iptables 日志:

vim  /etc/rsyslog.d/30-iptables.conf

在该文件中添加以下内容,将带有 iptables dropped 前缀的日志写入 /var/log/iptables.log

:msg, contains, "iptables dropped" /var/log/iptables.log
& stop

这里的 & stop 告诉 rsyslog 在匹配到日志后不再处理,直接写入到指定文件。

重启 rsyslog 服务并测试

重启 rsyslog 服务使更改生效:

systemctl restart rsyslog

设置日志轮转(可选)

为了防止日志文件过大,可以配置日志轮转。

/etc/logrotate.d/ 目录下创建一个新的配置文件 /etc/logrotate.d/iptables,内容如下:

/var/log/iptables.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 640 syslog adm
}

此配置会每日轮转日志文件,保留最近 7 天的日志并压缩旧日志。

验证

查看日志文件:

tail -n1 /var/log/iptables.log

Nov  4 15:08:49 net180-gateway-254 kernel: [ 1739.028760] iptables dropped: IN=eth0 OUT= MAC=bc:24:11:d2:be:7xxxx:6a:d8:08:00 SRC=103.xx.xx.234 DST=219.xx.xx.179 LEN=44 TOS=0x00 PREC=0x00 TTL=243 ID=54321 PROTO=TCP SPT=60238 DPT=50090 WINDOW=65535 RES=0x00 SYN URGP=0

参考

  • ChatGPT
回到页面顶部