文章目录
一、基础概念
iptables是Linux系统中的一个用户空间工具,用于配置Linux内核中的netfilter防火墙规则。它可以对进出本机的网络流量进行过滤、转发、地址转换等操作。
二、优势
强大的过滤功能:可以根据源IP、目的IP、端口号等多种条件进行精确的流量控制。
灵活性高:可以自定义规则来满足不同的网络需求。
性能开销小:作为内核级防火墙,处理速度快,对系统资源的占用较少。
三、类型
iptables规则主要分为以下几种类型:
INPUT链:处理进入本机的数据包。
OUTPUT链:处理从本机发出的数据包。
FORWARD链:处理通过本机转发的数据包。
四、应用场景
网络安全防护:阻止未经授权的访问和恶意流量。
流量控制:限制某些类型或来源的流量,保障关键服务的正常运行。
网络地址转换(NAT):实现内部网络与外部网络的通信。
服务器故障模拟:模拟服务器网络断连场景
五、iptables设置示例
示例1:初始化与默认配置
# 清空现有规则
iptables -F
iptables -X
iptables -Z
# 设置默认策略(谨慎操作!避免远程连接丢失)
iptables -P INPUT DROP # 默认拒绝入站
iptables -P FORWARD DROP # 默认拒绝转发
iptables -P OUTPUT ACCEPT # 允许所有出站[2,4](@ref)
示例2:关键安全配置
# 允许本地回环(避免服务自访问中断)
iptables -A INPUT -i lo -j ACCEPT
# 放行已建立连接及关联流量(避免中断活跃会话)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 按需开放端口(示例:SSH, HTTP, HTTPS)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS[2,6](@ref)
示例3:精细化访问控制
# 仅允许特定IP访问SSH(替换为你的管理IP)
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
# 拒绝特定IP段(如恶意来源)
iptables -A INPUT -s 10.0.0.0/24 -j DROP
# 允许ICMP(Ping)但限制速率(防洪水攻击)
iptables -A INPUT -p icmp -m limit --limit 5/sec -j ACCEPT[6,8](@ref)
示例4:允许SSH远程登录并拒绝其他所有入站连接
以下是一个简单的iptables设置示例,允许SSH远程登录并拒绝其他所有入站连接:
# 清除现有规则
iptables -F
iptables -X
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许SSH远程登录(假设SSH端口为22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许已建立的连接和相关的数据包通过
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 保存规则(具体命令可能因Linux发行版而异)
service iptables save
示例5:多端口与IP范围
# 同时开放多个端口(如FTP被动模式)
iptables -A INPUT -p tcp -m multiport --dports 21,20,30000:31000 -j ACCEPT
# 允许特定IP段访问数据库(3306)
iptables -A INPUT -p tcp --dport 3306 -m iprange --src-range 192.168.1.50-192.168.1.100 -j ACCEPT[6,7](@ref)
示例6:连接数限制(防DDoS/暴力破解)
# 限制每IP对SSH的并发连接(≤3)
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT
# 限制HTTP每秒新连接数(≤50)
iptables -A INPUT -p tcp --dport 80 -m limit --limit 50/sec --limit-burst 100 -j ACCEPT[1,6](@ref)
示例7:NAT地址转换
# SNAT(内网机器通过本机公网IP访问外网)
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
# DNAT(将公网80端口转发到内网Web服务器)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:8080[1,7](@ref)
六、常见问题及解决方法
规则未生效:
确保iptables服务已启动并正在运行。
检查规则是否正确保存并应用。
使用iptables -L -v或iptables -nL --line-numbers命令查看当前规则列表,确认规则是否存在。
无法远程登录:
确认SSH端口(默认22)是否在iptables规则中被允许。
检查是否存在其他防火墙或安全组规则阻止了访问。
规则冲突:
仔细检查每条规则的顺序和条件,确保没有相互矛盾的规则。
使用iptables -I命令在特定位置插入规则,以控制规则的优先级。
七、注意事项
在修改iptables规则之前,建议备份现有规则,以便出现问题时能够迅速恢复。
不熟悉iptables的用户应谨慎操作,避免误删或误改重要规则导致网络中断。