简介:本文系统梳理Linux防火墙核心工具(iptables/nftables/firewalld)的实践应用,通过配置示例与安全策略设计,帮助读者掌握从基础规则编写到动态防护的完整技能。
Linux防火墙以Netfilter框架为核心,通过内核模块实现数据包过滤、NAT转换和流量控制。当前主流工具呈现三足鼎立态势:iptables凭借成熟生态占据传统市场,nftables作为新一代工具提供更高效的规则集处理,firewalld则以动态区域管理简化企业级配置。三者均基于Netfilter钩子函数,但语法结构和适用场景存在显著差异。
# 允许已建立连接和相关数据包iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT# 开放SSH服务(限制源IP)iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPTiptables -A INPUT -p tcp --dport 22 -j DROP# 防止SYN洪水攻击iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROPiptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-m multiport --ports 80,443,8080-m iprange --src-range 192.168.1.100-192.168.1.200-m limit --limit 10/min --limit-burst 20
# 记录被丢弃的数据包iptables -N LOGGINGiptables -A INPUT -j LOGGINGiptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPT_DROP: " --log-level 4iptables -A LOGGING -j DROP
通过journalctl -u iptables或grep IPT_DROP /var/log/syslog查看日志
table ip filter {chain input {type filter hook input priority 0;# 使用集合提高效率ip saddr @trusted_ips tcp dport {ssh, http, https} accept# 状态跟踪优化ct state {established, related} accept# 速率限制示例limit rate 10/second burst 20 packets drop}}# 定义集合add set ip filter trusted_ips { type ipv4_addr; flags interval; }add element ip filter trusted_ips { 192.168.1.100, 10.0.0.0/24 }
| 测试场景 | iptables规则数 | nftables规则数 | 处理延迟(ms) |
|---|---|---|---|
| 100条简单规则 | 100 | 85 | 0.12 |
| 1000条复杂规则 | 1000 | 320 | 1.8 |
| 混合测试 | 1500 | 580 | 2.3 |
# 创建自定义区域firewall-cmd --new-zone=dmz --permanentfirewall-cmd --reload# 配置区域接口绑定firewall-cmd --zone=dmz --change-interface=eth1 --permanent# 服务白名单管理firewall-cmd --zone=dmz --add-service={http,https,smtp} --permanentfirewall-cmd --zone=dmz --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" service name="ssh" accept' --permanent
# 临时开放端口(重启失效)firewall-cmd --zone=public --add-port=8080/tcp# 永久规则+即时生效firewall-cmd --zone=public --add-port=8080/tcp --permanentfirewall-cmd --reload# 查看活动规则firewall-cmd --zone=public --list-all
# iptables默认策略iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT ACCEPT # 根据需求调整# firewalld默认区域设置firewall-cmd --set-default-zone=drop --permanent
# 丢弃异常分片包iptables -A INPUT -f -j DROP# nftables等效规则nft add rule ip filter input ip fragment drop
# 允许必要ICMP类型iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPTiptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPTiptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPTiptables -A INPUT -p icmp -j DROP
nf_conntrack参数
# 增大连接跟踪表echo 524288 > /sys/module/nf_conntrack/parameters/hashsize# 调整超时时间echo 1800 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
nf_conntrack表是否溢出(cat /proc/net/nf_conntrack)iptables -L -v --line-numbers)nft monitor trace跟踪规则匹配过程tcpdump -i eth0 host 192.168.1.100ss -s / netstat -siptables -t nat -L PREROUTING -n -v通过系统化的规则设计和动态管理策略,Linux防火墙可构建多层次的安全防护体系。建议根据实际业务需求,结合iptables的精细控制、nftables的性能优势和firewalld的便捷管理,形成定制化的安全解决方案。定期进行安全审计(建议每月一次)和规则优化,确保防火墙始终处于最佳防护状态。