应先LOG后DROP,聚焦SYN扫描、UDP探测、恶意IP、INVALID连接等高风险行为,启用--log-tcp-options等字段增强可分析性,并通过rsyslog分离日志、logrotate轮转确保持久可查。

不能也不该记录“所有”非授权连接尝试。真正有效的方式是:精准识别高风险行为、确保日志不被跳过、字段足够支撑判断、后端能持久保存。盲目记录全部 NEW 连接,几小时内就会撑爆磁盘,且淹没真实攻击信号。
规则顺序必须严格:LOG 在 DROP/REJECT 之前
LOG 是非终止动作,包匹配后继续走后续规则;DROP/REJECT 是终止动作,执行后流程结束,后面规则全失效。LOG 写在 DROP 后面,等于没写。
- ❌ 错误示例(LOG 永远不触发):
iptables -A INPUT -p tcp --dport 22 -j DROPiptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-DROP: " - ✅ 正确做法(先记再拦):
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG \--log-prefix "SSH-SCAN: " --log-tcp-options --log-ip-optionsiptables -I INPUT -p tcp --dport 22 -m state --state NEW -j DROP
聚焦真正可疑的行为,而非“所有”
所谓“非授权”,不是指未登录的合法请求,而是扫描、探测、暴力尝试等异常模式。应针对性记录:
- SYN 包(TCP 扫描起点):
iptables -A INPUT -p tcp --syn -m limit --limit 10/sec --burst 20 -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: " - 非法状态连接(如 INVALID、UNTRACKED):
iptables -A INPUT -m state --state INVALID -j LOG \--log-prefix "[INVALID] " --log-level 4
增强日志字段,让每条记录可追溯、可研判
默认 LOG 只输出 IP、端口、协议、TTL、包长,对分析攻击意图几乎无用。必须显式开启关键字段:
- --log-tcp-options:显示 MSS、SACK、Timestamp 等,可识别 Nmap、ZMap 等工具指纹
- --log-ip-options:捕获 Loose Source Route、Record Route 等异常 IP 选项,常见于渗透探测
- --log-prefix:必须设置,带语义前缀(如 "ETCD-2379-BLOCK"),方便 grep 或 rsyslog 路由
- --log-level 4:设为 warning 级别,避免混入 info 日志,便于集中过滤(对应 /var/log/kern.log 或 journalctl -k)
确保日志不丢失、不覆盖、易检索
内核 printk 缓冲区小、rsyslog 默认异步刷盘,高并发下日志极易丢弃且无声无息。
- 调大内核日志缓冲:
echo 'kernel.printk = 4 4 1 7' >> /etc/sysctl.conf && sysctl -p - 配置 rsyslog 分离保存(新建 /etc/rsyslog.d/10-iptables.conf):
:msg, contains, "[INVALID]" /var/log/iptables-invalid.log:msg, contains, "SSH-SCAN" /var/log/iptables-ssh.log& stop - 启用 logrotate 防止单文件过大(/etc/logrotate.d/iptables):
/var/log/iptables-*.log {dailymissingokrotate 30compressdelaycompressnotifempty}










