tables用于Linux防火墙配置,通过指定规则链(如INPUT、OUTPUT、FORWARD)
iptables命令详解
iptables简介
iptables
是Linux系统中用于配置IPv4网络防火墙规则的命令行工具,它基于内核的Netfilter框架,能够对进出网络接口的数据包进行过滤、修改和转发等操作,从而实现网络安全策略、流量控制等功能。
(一)基本功能
- 数据包过滤:根据源地址、目的地址、协议类型、端口号等多种条件,决定是否允许数据包通过防火墙。
- 网络地址转换(NAT):实现私有网络与公有网络之间的地址转换,如将内网的私有IP地址转换为公网IP地址,以实现内网主机访问外网。
- 端口转发(Port Forwarding):将特定端口的流量转发到指定的内部主机或服务。
- 连接跟踪(Connection Tracking):记录数据包的连接状态,以便更好地处理相关的数据包,例如允许已建立连接的后续数据包通过,而阻止新的未经授权的连接。
iptables基本语法
iptables [选项] [链名称] [匹配条件] [-j 目标动作]
(一)常用选项
选项 | 说明 |
---|---|
-A |
向指定链中添加规则 |
-D |
删除指定链中的规则 |
-I |
在指定链的顶部插入规则 |
-R |
替换指定链中的某条规则 |
-L |
列出指定链中的所有规则 |
-F |
清除指定链中的所有规则 |
-P |
设置链的默认策略 |
-s |
指定源地址 |
-d |
指定目的地址 |
-p |
指定协议类型(如tcp、udp等) |
--sport |
指定源端口 |
--dport |
指定目的端口 |
(二)链名称
- INPUT链:处理进入本机的数据包。
- FORWARD链:处理转发的数据包,即通过本机转发到其他网络的数据包。
- OUTPUT链:处理本机发出的数据包。
(三)目标动作
目标动作 | 说明 |
---|---|
ACCEPT |
接受数据包 |
DROP |
丢弃数据包 |
REJECT |
拒绝数据包,并发送拒绝信息给源地址 |
SNAT |
源地址转换 |
DNAT |
目的地址转换 |
MASQUERADE |
用于动态源地址转换,常用于NAT场景 |
iptables规则示例
(一)简单数据包过滤规则
- 允许本地回环地址(127.0.0.1)的所有流量通过:
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
- 拒绝来自特定IP地址(如192.168.1.100)的所有TCP流量:
iptables -A INPUT -s 192.168.1.100 -p tcp -j DROP
(二)端口相关规则
- 允许外部访问本机的80端口(HTTP服务):
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- 拒绝外部访问本机的22端口(SSH服务),但允许本地访问:
iptables -A INPUT -p tcp --dport 22 -j DROP iptables -A INPUT -s 127.0.0.1 -p tcp --dport 22 -j ACCEPT
(三)网络地址转换(NAT)规则
-
将内网(假设为192.168.1.0/24)的所有对外访问的源地址转换为公网IP地址(如203.0.113.1):
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.1
-t nat
表示操作的是NAT表,POSTROUTING
链用于处理即将离开本机的数据包,eth0
是外网网络接口。 -
端口转发示例:将外部访问的8080端口的流量转发到内网192.168.1.10的80端口:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -d 203.0.113.1 -j DNAT --to-destination 192.168.1.10:80
这里,
PREROUTING
链用于处理即将进入本机的数据包。
iptables规则管理
(一)查看规则
使用iptables -L
命令可以列出各链中的规则:
iptables -L
输出示例:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all 127.0.0.1 anywhere
DROP tcp 192.168.1.100 anywhere tcp dpt:80
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
(二)删除规则
如果知道规则在链中的位置(从0开始计数),可以使用iptables -D
命令删除:
iptables -D INPUT 1
上述命令将删除INPUT链中的第1条规则,如果不知道位置,可以根据匹配条件删除,例如删除之前添加的拒绝特定IP访问的规则:
iptables -D INPUT -s 192.168.1.100 -p tcp -j DROP
(三)保存和恢复规则
- 保存规则:在不同的Linux发行版中,保存iptables规则的方法可能有所不同,常见的是将规则保存到
/etc/iptables/rules.v4
文件中(对于IPv4规则),例如在Ubuntu系统中,可以使用以下命令:sudo sh -c "iptables-save > /etc/iptables/rules.v4"
- 恢复规则:使用
iptables-restore
命令从保存的文件中恢复规则:sudo iptables-restore < /etc/iptables/rules.v4
相关问题与解答
(一)问题1:如何允许特定的外部网络访问本机的某个服务?
解答:假设要允许外部网络(如192.168.2.0/24)访问本机的3306端口(MySQL服务),可以添加以下规则:
iptables -A INPUT -s 192.168.2.0/24 -p tcp --dport 3306 -j ACCEPT
如果本机有防火墙默认策略为DROP,还需要确保默认策略允许相关流量或者添加相应的规则来处理其他情况。
(二)问题2:如何实现内网多台主机共享一个公网IP上网?
解答:这需要结合NAT和iptables的MASQUERADE功能,假设内网网段为192.168.3.0/24,公网网络接口为eth0,公网IP为203.0.113.2,开启IP转发功能(在大多数Linux系统中,可以通过修改/etc/sysctl.conf
文件,将net.ipv4.ip_forward = 1
,然后执行sysctl -p
命令生效),然后添加以下iptables规则:
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth0 -j MASQUERADE
这条规则将内网主机发送的数据包的源地址转换为公网IP,使得内网主机可以通过公网IP访问外网。
小伙伴们,上文介绍iptables命令怎么用的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/11825.html