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 流量监控架构
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保证传输安全,流量监控提供审计证据。我在每个项目里都会把这四块做成自动化脚本,上线前跑一遍,心里才踏实。