以下是在不同 Linux 发行版中通过命令行开启(放行)指定端口的教程,涵盖 **firewalld
(CentOS/RHEL/Fedora)、ufw
**(Ubuntu/Debian)和 **iptables
**(传统工具)三种常见防火墙工具的操作方法:
方法1:使用 firewalld
(CentOS/RHEL/Fedora)
1. 检查防火墙状态
sudo systemctl status firewalld # 确保防火墙已运行
sudo firewall-cmd --state # 显示防火墙状态(应为 "running")
2. 开放指定端口
3. 重新加载防火墙配置
sudo firewall-cmd --reload
4. 验证端口是否开放
sudo firewall-cmd --list-ports # 列出所有开放的端口
sudo firewall-cmd --zone=public --list-all # 查看详细配置
方法2:使用 ufw
(Ubuntu/Debian)
1. 检查防火墙状态
sudo ufw status # 若显示 "Status: inactive" 需先启用防火墙
sudo ufw enable # 启用防火墙(若未启用)
2. 开放指定端口
-
开放TCP端口(示例:开放 22
端口):
sudo ufw allow 22/tcp
-
开放UDP端口(示例:开放 1194
端口):
sudo ufw allow 1194/udp
-
同时开放TCP/UDP(示例:开放 443
):
sudo ufw allow 443
3. 验证端口规则
sudo ufw status numbered # 显示所有规则(带编号)
方法3:使用 iptables
(传统方法,适用于所有系统)
1. 开放TCP端口(示例:开放 3306
)
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
2. 开放UDP端口(示例:开放 123
)
sudo iptables -A INPUT -p udp --dport 123 -j ACCEPT
3. 保存规则(避免重启后丢失)
# 根据系统选择保存命令:
sudo apt-get install iptables-persistent -y # Debian/Ubuntu
sudo netfilter-persistent save # 保存规则
# 或 CentOS/RHEL:
sudo service iptables save
4. 验证规则
sudo iptables -L -n -v # 查看所有规则
通用验证方法
无论使用哪种工具,最终确认端口是否开放:
# 检查端口监听状态(本地)
sudo netstat -tuln | grep <端口号> # 示例:grep 80
sudo ss -tuln | grep <端口号> # 更现代的替代命令
# 外部测试(从另一台机器执行)
telnet <端口号> # 测试TCP连通性
nc -zv <端口号> # 测试TCP(示例:nc -zv 192.168.1.1 80)
nc -zuv <端口号> # 测试UDP
注意事项
-
协议类型
TCP
:适用于HTTP、SSH、MySQL等需要可靠连接的协议。
UDP
:适用于DNS、视频流、VoIP等实时性要求高的协议。
-
服务依赖
- 开放端口后,确保服务已启动并在监听该端口(如Nginx监听80端口)。
-
防火墙默认策略
- 如果防火墙默认拒绝所有流量(
deny
策略),需明确放行所需端口。
-
安全风险
- 仅开放必要的端口,避免暴露敏感服务(如数据库端口
3306
不应公开暴露)。
操作示例
场景:在 CentOS 上开放 8080
端口(TCP)
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports # 确认输出包含 8080/tcp
场景:在 Ubuntu 上开放 27017
端口(MongoDB)
sudo ufw allow 27017/tcp
sudo ufw status # 检查规则是否添加成功