3. 网络安全加固:防火墙、入侵检测、VPN与流量监控

网络安全这块,说白了就是给边缘网关穿上铠甲。我在项目里见过太多网关被攻破的案例,十有八九都是这几块没做到位。今天咱们就把防火墙、入侵检测、VPN隧道和流量监控这四板斧聊透。

核心思路:边缘网关的网络安全,不是单点防御,而是分层设防。防火墙做第一道门禁,入侵检测做内部巡逻,VPN做加密通道,流量监控做事后审计。四者缺一不可。

3.1 防火墙配置:iptables vs nftables

防火墙是网关的第一道防线。我个人习惯用nftables,毕竟它是iptables的下一代替代品,语法更简洁,性能也更好。但很多老项目还在用iptables,所以两个都得会。

3.1.1 iptables 基础配置

先看一个典型的边缘网关iptables规则集。嗯,这里要注意,默认策略一定要改成DROP,别用ACCEPT。

# 清空现有规则
iptables -F
iptables -X
iptables -Z

# 设置默认策略:拒绝所有
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许SSH管理(限制来源IP)
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT

# 允许VPN端口
iptables -A INPUT -p udp --dport 51820 -j ACCEPT  # WireGuard
iptables -A INPUT -p udp --dport 1194 -j ACCEPT   # OpenVPN

# 允许边缘业务端口
iptables -A INPUT -p tcp --dport 8080 -s 10.0.0.0/8 -j ACCEPT

# 记录并丢弃其他流量
iptables -A INPUT -j LOG --log-prefix "FW-DROP: "
iptables -A INPUT -j DROP

我的经验:曾经有个项目,网关上线第二天就被扫描了。查了半天,发现是默认策略用了ACCEPT,只写了DROP规则。你想想看,漏一条规则就等于裸奔。所以默认DROP是铁律。

3.1.2 nftables 配置示例

nftables的语法更直观,而且支持原子规则替换。我建议新项目直接上nftables。

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        
        # 允许本地回环
        iif lo accept
        
        # 允许已建立的连接
        ct state established,related accept
        
        # 允许SSH
        tcp dport 22 ip saddr 192.168.1.0/24 accept
        
        # 允许VPN
        udp dport 51820 accept
        udp dport 1194 accept
        
        # 允许内部业务
        tcp dport 8080 ip saddr 10.0.0.0/8 accept
        
        # 记录丢弃
        log prefix "NFT-DROP: " drop
    }
    
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    
    chain output {
        type filter hook output priority 0; policy accept;
    }
}
对比项 iptables nftables
语法复杂度 较复杂,多条链 简洁,单一语法
性能 线性匹配 哈希查找,更快
原子更新 不支持 支持,规则集整体替换
内核版本要求 所有版本 Linux 3.13+
调试工具 iptables -L -v nft monitor

3.2 入侵检测与防御:Snort vs Suricata

防火墙挡不住所有攻击,尤其是应用层攻击。这时候就需要IDS/IPS上场了。我在项目中主要用Suricata,因为它原生支持多线程,在边缘网关这种资源受限的环境下优势明显。

3.2.1 Suricata 部署要点

Suricata可以跑在网桥模式或旁路模式。边缘网关建议用网桥模式,直接串联在流量路径上。

# suricata.yaml 关键配置
af-packet:
  - interface: eth0
    cluster-id: 99
    cluster-type: cluster_flow
    defrag: yes
    use-mmap: yes
    tpacket-v3: yes
    
# 规则集配置
default-rule-path: /etc/suricata/rules
rule-files:
  - emerging-threats.rules
  - compromised-ips.rules
  
# 性能调优
runmode: workers
worker-threads: 4  # 根据CPU核心数调整
mpm-algo: hs  # 高性能模式匹配

避坑指南:我曾经在一个项目里直接用了默认配置,结果网关CPU跑满,业务全挂了。后来发现是规则集太大,而且没开flow bypass。记住:边缘网关的CPU和内存有限,规则集要精简,只加载跟业务相关的规则。

3.2.2 Snort vs Suricata 选型

特性 Snort Suricata
多线程 单线程 多线程
GPU加速 不支持 支持CUDA
协议解析 基础 深度解析(HTTP2、TLS1.3等)
规则兼容性 原生规则 兼容Snort规则
资源消耗 较低 中等
适用场景 低流量环境 高吞吐边缘网关

3.3 VPN与加密隧道:WireGuard vs OpenVPN

边缘网关和云端通信,必须走加密隧道。WireGuard是我现在的主力,代码量只有OpenVPN的十分之一,但安全性一点不差。

3.3.1 WireGuard 快速配置

WireGuard的配置简单到令人发指。我十分钟就能搭好一条隧道。

# 服务端配置 /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
PrivateKey = 服务端私钥
ListenPort = 51820

[Peer]
PublicKey = 客户端公钥
AllowedIPs = 10.0.0.2/32

# 客户端配置
[Interface]
Address = 10.0.0.2/24
PrivateKey = 客户端私钥

[Peer]
PublicKey = 服务端公钥
Endpoint = 网关公网IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

我的习惯:PersistentKeepalive一定要设,不然NAT后面的客户端会断连。25秒是个好选择,既不会太频繁,也不会超时。

3.3.2 OpenVPN 配置要点

OpenVPN虽然重,但胜在功能丰富。如果你需要复杂的认证策略,比如双因素认证,OpenVPN更合适。

# 服务端配置 server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
keepalive 10 120
cipher AES-256-GCM
auth SHA256
tls-version-min 1.2
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
status openvpn-status.log
verb 3

3.4 网络流量监控与分析

没有监控,安全就是盲人摸象。我常用的工具组合是:ntopng做可视化,tcpdump做抓包分析,再加上ELK做日志聚合。

3.4.1 流量监控架构

边缘网关流量监控架构 边缘网关网卡 eth0/eth1 VPN隧道接口 wg0/tun0 容器/虚拟机 docker0/virbr0 数据采集层:tcpdump / nProbe / sFlow 数据处理层:ntopng / ELK / Grafana 展示与告警层:仪表盘 / 邮件告警 / Webhook 说明:所有流量数据先采集,再处理,最后可视化。告警规则在展示层配置。

3.4.2 常用监控命令

我平时排查问题,这几个命令最常用:

# 实时流量查看
nload eth0

# 连接数统计
ss -s

# 按IP统计流量
iptables -L -v -n | grep -v "0.0.0.0"

# 抓包分析(只抓HTTP头)
tcpdump -i eth0 -A -s 0 'tcp port 80' | grep -E 'Host:|GET|POST'

# ntopng启动(Web界面)
ntopng -i eth0 -w 3000

避坑指南:我曾经在生产环境直接跑tcpdump抓全包,结果磁盘写满,网关直接宕机。记住:tcpdump一定要加 -s 限制抓包长度,或者用 -c 限制包数。生产环境建议用sFlow采样,别全量抓。

3.5 本章小结

网络安全加固不是一锤子买卖。防火墙、入侵检测、VPN隧道、流量监控,这四个环节要形成闭环。防火墙做准入控制,入侵检测发现异常,VPN保证传输安全,流量监控提供审计证据。我在每个项目里都会把这四块做成自动化脚本,上线前跑一遍,心里才踏实。