Linux防火墙的iptables命令示例与详细解释
iptables:Linux下的强大防火墙工具
iptables是Linux下一个非常强大的防火墙工具,它主要用于控制防火墙,禁止或允许某个IP访问,也可以用于请求转发等多种场景。通过精心配置iptables规则,系统管理员可以灵活地管理网络流量,确保系统的安全。
一、Linux防火墙体系概述
Linux防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制。它属于典型的包过滤防火墙(也称网络层防火墙),通过检查数据包的头信息来决定是否允许该数据包通过。这种防火墙技术的优点是效率较高,对系统资源的占用较少。
二、iptables的基本功能
iptables提供了丰富的功能,包括但不限于:
查看信息:可以查看当前的IP规则表,以及带编号的规则表,方便管理员进行规则的添加、删除等操作。
禁止访问:可以禁止某个IP或IP网段访问系统,也可以禁止某个IP访问某个特定端口,或者禁止某个端口的访问。此外,还可以禁止其他主机ping此服务器。
允许访问:与禁止访问相反,iptables也可以允许某个IP或IP网段的访问,或者仅允许来自特定网段的用户连接某个服务(如ssh)。
限制连接:iptables可以限制最大的连接数,防止CC攻击等网络威胁。同时,也可以限制单个IP的并发访问。
流量均衡:通过iptables的规则配置,可以将访问流量分流至内网的多台主机,实现流量的负载均衡。
三、iptables的示例与详细解释
查看信息
查看当前的IP规则表:iptables -L -n
查看带编号的IP规则表:iptables -L -n --line-numbers
禁止访问
禁止某个IP访问:iptables -I INPUT -s 192.168.0.232 -j DROP
禁止某个IP网段访问:iptables -I INPUT -s 192.168.0.0/24 -j DROP(注意:原示例中的/240子网掩码可能是一个笔误,这里更正为/24)
禁止某个IP访问某个端口(如8501):iptables -I INPUT -s 192.168.0.232 -p tcp --dport 8501 -j DROP
禁止某个端口访问(如8501):iptables -I INPUT -p tcp --dport 8501 -j DROP
禁止其他主机ping此服务器:需要同时添加两条规则,分别针对ICMP请求的输入和输出。
允许访问
允许某个IP访问:iptables -I INPUT -s 192.168.0.232 -j ACCEPT
仅允许来自特定网段的用户连接ssh服务:iptables -I INPUT -s 172.27.8.0/22 -p tcp --dport 22 -j ACCEPT,并拒绝其他所有ssh连接请求:iptables -A INPUT -p tcp --dport 22 -j REJECT
限制连接
当访问80端口的连接数达到100后,开始限制为最多允许每分钟25个链接:iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
限制单个ip的并发访问(如限制并发访问85端口的数量不超过10个):iptables -I INPUT -p tcp --dport 85 -s 192.168.1.8 -m connlimit --connlimit-above 10 -j REJECT
流量均衡
将访问流量分流至内网三台不同主机:通过配置PREROUTING链的DNAT规则实现。例如,将访问80端口的流量按三分之一的比例分流到172.27.8.10、172.27.8.20和172.27.8.30。这里需要注意的是,原示例中的规则配置可能存在一些问题(如使用了相同的计数器参数),实际配置时需要根据具体情况进行调整。
保存配置
将iptables配置写入文件:sudo iptables-save > /etc/iptables.rules
在网卡启动和关闭时自动加载和保存配置:编辑/etc/network/interfaces文件,添加相应的pre-up和post-down脚本。但需要注意的是,不同的Linux发行版可能使用不同的网络配置文件和脚本机制(如systemd下的network-scripts或NetworkManager配置)。
四、iptables的语法与选项
iptables的语法结构相对复杂,但掌握其基本语法和常用选项对于高效配置防火墙至关重要。iptables的语法格式如下:
iptables [-t table] COMMAND [chain] CRITERIA -j ACTION
其中:
-t table:指定要操作的表(filter、nat、mangle、raw)。
COMMAND:指定要执行的操作(如-A添加规则、-D删除规则等)。
chain:指定要操作的链(如INPUT、OUTPUT、FORWARD等)。
CRITERIA:指定匹配条件(如协议、源地址、目的地址、端口等)。
-j ACTION:指定要执行的动作(如ACCEPT接受、DROP丢弃、REJECT拒绝等)。
iptables提供了丰富的选项和匹配条件,使得管理员可以根据实际需求灵活配置防火墙规则。例如:
-p:指定协议(tcp/udp/icmp等)。
-s:指定源地址。
-d:指定目的地址。
–sport:指定源端口。
–dport:指定目的端口。
-i:指定入口网卡。
-o:指定出口网卡。
–to-source:指定SNAT转换后的地址(用于NAT表)。
-m:使用扩展模块进行数据包匹配(如multiport、tcp、state等)。
此外,iptables还支持多种隐含匹配和显式匹配条件,如TCP标记匹配、ICMP类型匹配、多端口匹配、IP范围匹配、MAC地址匹配和状态匹配等。这些匹配条件可以单独使用或组合使用,以满足复杂的网络流量控制需求。
五、iptables的链与规则顺序
iptables中有五个内置的链:PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING。这些链按照特定的顺序处理数据包:
入站数据包首先经过PREROUTING链,然后根据目的地址决定是进入INPUT链还是FORWARD链。
出站数据包首先经过OUTPUT链