如何通过Iptables Log模块详尽记录并审计非法连接尝试过程?

2026-04-30 14:362阅读0评论SEO教程
  • 内容介绍
  • 相关推荐

本文共计869个文字,预计阅读时间需要4分钟。

如何通过Iptables Log模块详尽记录并审计非法连接尝试过程?

要使iptables的LOG模块正确记录非法连接尝试,关键不在于记录所有,而是要精确定位异常行为。确保日志不被遗漏、丢弃,并能快速检索。核心在于规则顺序、参数组合和日志后端协同。

一、LOG 规则必须放在 DROP/REJECT 之前

LOG 是非终止动作,它只写日志,不阻断包;而 DROP/REJECT 是终止动作,执行后包即消失,后续规则不再匹配。如果 LOG 写在 DROP 后面,永远不会触发。

  • ❌ 错误写法(LOG 失效):
    iptables -A INPUT -p tcp --dport 22 -j DROP
    iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-BLOCKED: "
  • ✅ 正确写法(先记再拦):
    iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG \
    --log-prefix "SSH-SCAN: " --log-tcp-options --log-ip-options
    iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j DROP

二、只记录真正可疑的连接,避免日志爆炸

盲目记录所有 NEW 连接会迅速填满磁盘。应聚焦高风险行为:非常用端口访问、扫描特征包、高频失败连接等。

  • 记录 SYN 包(常见扫描起点):
    iptables -A INPUT -p tcp --syn -j LOG --log-prefix "SYN-SCAN: " --log-tcp-options
  • 记录 UDP 全端口探测:
    iptables -A INPUT -p udp -m limit --limit 5/min -j LOG --log-prefix "UDP-PROBE: "
  • 记录来自已知恶意 IP 段的请求(需配合 ipset):
    iptables -A INPUT -m set --match-set badips src -j LOG --log-prefix "BADIP-ATTEMPT: "

三、增强日志字段,提升审计价值

默认 LOG 只输出 IP、端口、协议,缺少判断依据。加上关键选项才能识别攻击意图:

  • --log-tcp-options:显示 TCP MSS、Timestamp、SACK 等,可识别 Nmap 扫描指纹
  • --log-ip-options:捕获 Loose Source Route、Record Route 等异常 IP 选项
  • --log-uid:仅 OUTPUT 链有效,记录本地发起连接的用户 ID
  • --log-level 4:设为 warning 级别,便于 rsyslog 分级过滤
  • --log-prefix 必须设置,且建议带语义(如 "PORT-8080-SCAN"),方便 grep 和 rsyslog 路由

四、确保日志不丢失、可持久、易查找

内核 printk 缓冲区小、rsyslog 默认异步刷盘,高并发下极易丢日志。

  • 调大内核日志缓冲:
    编辑 /etc/sysctl.conf,添加
    kernel.printk_ratelimit = 0
    kernel.printk = 4 4 1 7
    运行 sysctl -p 生效
  • 配置 rsyslog 持久化:
    新建 /etc/rsyslog.d/50-iptables.conf
    $template IptablesFormat,"%timestamp% %fromhost-ip% %syslogtag%%msg%\n"
    :msg, contains, "SSH-SCAN" /var/log/iptables/ssh-scan.log;IptablesFormat
    & stop
    重启:systemctl restart rsyslog
  • 实时监控示例:
    tail -f /var/log/iptables/ssh-scan.log | grep -E "(SYN|FIN|URG)"

不复杂但容易忽略:LOG 不是万能审计器,它只是第一道线索。真正有效的防御需要结合 conntrack 状态、recent 模块限速、ipset 黑名单,以及 fail2ban 等工具做闭环响应。

本文共计869个文字,预计阅读时间需要4分钟。

如何通过Iptables Log模块详尽记录并审计非法连接尝试过程?

要使iptables的LOG模块正确记录非法连接尝试,关键不在于记录所有,而是要精确定位异常行为。确保日志不被遗漏、丢弃,并能快速检索。核心在于规则顺序、参数组合和日志后端协同。

一、LOG 规则必须放在 DROP/REJECT 之前

LOG 是非终止动作,它只写日志,不阻断包;而 DROP/REJECT 是终止动作,执行后包即消失,后续规则不再匹配。如果 LOG 写在 DROP 后面,永远不会触发。

  • ❌ 错误写法(LOG 失效):
    iptables -A INPUT -p tcp --dport 22 -j DROP
    iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-BLOCKED: "
  • ✅ 正确写法(先记再拦):
    iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG \
    --log-prefix "SSH-SCAN: " --log-tcp-options --log-ip-options
    iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j DROP

二、只记录真正可疑的连接,避免日志爆炸

盲目记录所有 NEW 连接会迅速填满磁盘。应聚焦高风险行为:非常用端口访问、扫描特征包、高频失败连接等。

  • 记录 SYN 包(常见扫描起点):
    iptables -A INPUT -p tcp --syn -j LOG --log-prefix "SYN-SCAN: " --log-tcp-options
  • 记录 UDP 全端口探测:
    iptables -A INPUT -p udp -m limit --limit 5/min -j LOG --log-prefix "UDP-PROBE: "
  • 记录来自已知恶意 IP 段的请求(需配合 ipset):
    iptables -A INPUT -m set --match-set badips src -j LOG --log-prefix "BADIP-ATTEMPT: "

三、增强日志字段,提升审计价值

默认 LOG 只输出 IP、端口、协议,缺少判断依据。加上关键选项才能识别攻击意图:

  • --log-tcp-options:显示 TCP MSS、Timestamp、SACK 等,可识别 Nmap 扫描指纹
  • --log-ip-options:捕获 Loose Source Route、Record Route 等异常 IP 选项
  • --log-uid:仅 OUTPUT 链有效,记录本地发起连接的用户 ID
  • --log-level 4:设为 warning 级别,便于 rsyslog 分级过滤
  • --log-prefix 必须设置,且建议带语义(如 "PORT-8080-SCAN"),方便 grep 和 rsyslog 路由

四、确保日志不丢失、可持久、易查找

内核 printk 缓冲区小、rsyslog 默认异步刷盘,高并发下极易丢日志。

  • 调大内核日志缓冲:
    编辑 /etc/sysctl.conf,添加
    kernel.printk_ratelimit = 0
    kernel.printk = 4 4 1 7
    运行 sysctl -p 生效
  • 配置 rsyslog 持久化:
    新建 /etc/rsyslog.d/50-iptables.conf
    $template IptablesFormat,"%timestamp% %fromhost-ip% %syslogtag%%msg%\n"
    :msg, contains, "SSH-SCAN" /var/log/iptables/ssh-scan.log;IptablesFormat
    & stop
    重启:systemctl restart rsyslog
  • 实时监控示例:
    tail -f /var/log/iptables/ssh-scan.log | grep -E "(SYN|FIN|URG)"

不复杂但容易忽略:LOG 不是万能审计器,它只是第一道线索。真正有效的防御需要结合 conntrack 状态、recent 模块限速、ipset 黑名单,以及 fail2ban 等工具做闭环响应。