在 Linux 系统中,使用iptables添加端口相关规则主要是针对防火墙对特定端口的访问控制,以下为你详细介绍不同场景下添加端口规则的方法:
如果你想让外部网络能够访问服务器上的特定端口(如常见的 Web 服务使用的 TCP 80 端口),可以通过以下命令添加规则到INPUT链:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-A:表示将规则追加到指定链的末尾。这里指定的链是INPUT,即入站规则链。
-p tcp:指定协议为 TCP。
--dport 80:指定目标端口为 80。
-j ACCEPT:表示如果数据包符合前面的条件(TCP 协议且目标端口为 80),则允许通过。
如果你希望服务器能够访问外部网络的特定端口(如 HTTPS 服务使用的 TCP 443 端口),可以添加规则到OUTPUT链:
sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
- 同样,
-A是追加规则到OUTPUT链末尾。
-p tcp指定 TCP 协议。
--dport 443指定目标端口为 443。
-j ACCEPT表示允许符合条件的数据包出站。
如果你只想让某个特定 IP 地址的设备能够访问服务器的特定端口(如 SSH 服务使用的 TCP 22 端口),可以使用如下规则:
sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT
-s 192.168.1.100:指定源 IP 地址为 192.168.1.100,即只有该 IP 地址的设备发出的连接请求会被考虑。
- 其他参数含义与前面示例相同。
若需要开放一段连续的端口范围,可以使用如下规则:
sudo iptables -A INPUT -p tcp --dport 3000:3010 -j ACCEPT
--dport 3000:3010:指定目标端口范围从 3000 到 3010。
上述操作只是临时修改了内存中的iptables规则,系统重启后这些规则会丢失。为了让规则持久化,不同的 Linux 发行版有不同的方法:
可以使用iptables-persistent工具:
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
可以使用iptables-services:
sudo yum install iptables-services
sudo systemctl enable iptables
sudo service iptables save
这样设置后,iptables规则在系统重启时会自动加载。