防火墙是保障Linux系统网络安全的核心组件,而iptables作为Linux系统中最经典的防火墙工具,其灵活性和强大功能深受运维人员青睐。本文将全面解析iptables的核心概念、配置方法及实战技巧,助你构建安全的网络防护体系。
一、防火墙基础概念
1. 防火墙的分类
-
按保护范围:
-
主机防火墙:保护单台主机(如iptables)。
-
网络防火墙:保护局域网(如部署在网关的防火墙)。
-
-
按实现方式:
-
硬件防火墙:基于专用硬件(如Cisco ASA)。
-
软件防火墙:运行在通用硬件上的软件(如iptables)。
-
-
按协议层级:
-
网络层防火墙:基于IP/TCP/UDP等协议过滤(包过滤)。
-
应用层防火墙:基于应用协议(如HTTP代理)。
-
2. Linux防火墙架构:Netfilter与iptables
-
Netfilter:Linux内核的子系统,负责数据包过滤、NAT等核心功能。
-
iptables:用户空间的命令行工具,用于配置Netfilter规则。
二、iptables核心组成
1. 五表五链
-
表(Tables):定义功能类型。
-
filter
:默认表,用于数据包过滤。 -
nat
:网络地址转换(NAT)。 -
mangle
:修改数据包标记。 -
raw
:关闭连接跟踪。 -
security
:SELinux相关安全策略。
-
-
链(Chains):定义规则生效位置。
-
INPUT
:处理入站数据。 -
OUTPUT
:处理出站数据。 -
FORWARD
:处理转发数据。 -
PREROUTING
/POSTROUTING
:NAT处理前后。
-
2. 报文流向与链的调用顺序
-
入站流程:
PREROUTING
->INPUT
-
出站流程:
OUTPUT
->POSTROUTING
-
转发流程:
PREROUTING
->FORWARD
->POSTROUTING
三、iptables规则语法与配置
1. 规则组成
-
匹配条件:源IP、目标IP、协议、端口等。
-
处理动作:
ACCEPT
(允许)、DROP
(丢弃)、REJECT
(拒绝)、LOG
(记录日志)等。
2. 基本命令格式
iptables -t <表名> <命令> <链名> [规则条件] -j <动作>
示例:禁止来自192.168.1.100
的SSH访问
iptables -t filter -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j DROP
3. 扩展匹配模块
-
隐式扩展:直接通过协议指定(如
--dport
)。iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-
显式扩展:需通过
-m
加载模块(如multiport
、state
)。iptables -A INPUT -m multiport --dports 22,80,443 -j ACCEPT
四、实战案例:NAT与端口转发
1. SNAT(源地址转换)
场景:内网主机通过防火墙访问外网。
# 启用IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 配置SNAT规则
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.1.10
2. DNAT(目标地址转换)
场景:将外网请求转发到内网服务器。
iptables -t nat -A PREROUTING -d 192.168.1.10 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.11:8080
3. REDIRECT(端口重定向)
场景:将本机80端口的请求转发到8080端口。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
五、规则优化与持久化
1. 规则优化原则
-
状态放行:优先允许
ESTABLISHED
状态连接。 -
精确匹配:范围小的规则放前面。
-
合并同类规则:减少冗余条目。
2. 规则持久化
# 保存规则
iptables-save > /etc/sysconfig/iptables
# 开机自动加载
systemctl enable iptables
systemctl start iptables
六、高级技巧:自定义链与日志记录
1. 创建自定义链
iptables -N WEB_RULES
iptables -A WEB_RULES -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j WEB_RULES
2. 记录日志
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH Attempt: "
# 查看日志
tail -f /var/log/messages
七、总结与最佳实践
-
定期备份规则:防止误操作导致配置丢失。
-
最小化放行策略:遵循“默认拒绝,按需放行”原则。
-
监控与审计:结合日志分析工具(如ELK)实时监控流量。