温馨提示×

如何用Linux防火墙进行入侵检测

小樊
44
2025-12-12 12:24:58
栏目: 网络安全

用 Linux 防火墙做入侵检测的可行路径

一、核心思路

  • 仅靠 iptables/nftables 无法“识别攻击语义”,但可通过“异常流量特征→日志→告警/处置”的方式实现基础入侵检测。
  • 推荐组合:用 iptables 日志与连接限制 发现扫描/暴力迹象,用 fail2ban 自动封禁,用 Snort/Suricata 做深度检测,必要时与防火墙做 联动阻断(IDS/IPS 思路)。

二、基于防火墙日志的检测与告警

  • 记录被丢弃/拒绝的数据包
    • 记录所有入站被拒包:iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
    • 记录所有出站被拒包:iptables -A OUTPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
    • 查看:grep “IPTables-Dropped” /var/log/syslog(或 /var/log/kern.log)。
  • 发现端口扫描与异常握手
    • 记录新 SYN 尝试(潜在扫描):iptables -A INPUT -p tcp --syn -j LOG --log-prefix "SYN-Attempt: "
    • 限制 SYN 速率并仅放行低频正常:iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT;iptables -A INPUT -p tcp --syn -j DROP
    • 说明:limit 模块用于抑制告警风暴,避免日志被刷爆。
  • 保存规则(持久化)
    • Debian/Ubuntu 系列:iptables-save > /etc/iptables/rules.v4;或使用 netfilter-persistent 保存/重载。

三、自动封禁与联动阻断

  • 自动封禁:fail2ban + iptables
    • 安装:sudo apt install fail2ban
    • 配置 /etc/fail2ban/jail.local(示例):
      • [DEFAULT] bantime = 600;findtime = 600;maxretry = 3
      • [ssh] enabled = true;port = ssh;filter = sshd;logpath = /var/log/auth.log
    • 启动:systemctl start fail2ban && systemctl enable fail2ban
    • 作用:自动解析日志(如 SSH 暴力),调用 iptables 封禁恶意 IP,减少人工响应时间。
  • 联动阻断:IDS/防火墙协同
    • 思路:当 Snort/Suricata 检测到规则命中的攻击时,由脚本调用 iptables 动态插入 DROP/REJECT 规则,形成 IDS→防火墙 的自动阻断闭环(生产可用消息队列/签名命中回调实现)。

四、深度检测与可视化分析

  • 网络层 IDS:Snort
    • 用法示例:sudo snort -r listen.pcap -c /etc/snort/snort.conf -K ascii -A full
    • 输出:/var/log/snort/alert 生成告警日志,可结合 BASE/其他可视化工具做聚合分析。
  • 主机层加固与检测
    • rootkit 检测:运行 chkrootkitrkhunter 定期排查后门与可疑内核模块。
    • 文件完整性:部署 Tripwire 建立基线并周期性校验关键系统文件是否被篡改。

五、最小可用配置清单

  • 仅开放必要端口(示例:放行 22/80/443
    • iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    • iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    • iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    • iptables -A INPUT -j DROP(务必先确保已放行 SSH,避免锁死)
  • 记录与限速
    • iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
    • iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
    • iptables -A INPUT -p tcp --syn -j DROP
  • 自动封禁
    • 部署 fail2ban(如上),对 SSH 等高频攻击面自动拉黑。
  • 持久化
    • iptables-save > /etc/iptables/rules.v4(或 netfilter-persistent 保存)。

0