端口开启原理
Linux通过防火墙(如firewalld
或iptables
)控制端口访问,开启端口需添加规则允许数据通过,同时确保服务监听该端口(如Nginx默认监听80端口)。
操作步骤
方法1:使用firewalld(推荐用于CentOS/RHEL/Fedora)
-
检查防火墙状态
sudo systemctl status firewalld # 确认服务运行 sudo firewall-cmd --state # 查看活动状态
-
开启端口(以TCP端口8080为例)
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
--permanent
:永久生效(重启后保留)- 若需UDP端口,替换
tcp
为udp
-
重载防火墙生效
sudo firewall-cmd --reload
-
验证端口
sudo firewall-cmd --list-ports # 查看已开放端口
方法2:使用iptables(适用于Debian/Ubuntu或旧版系统)
-
允许端口(以TCP端口3306为例)
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
-
保存规则(避免重启失效)
sudo apt install iptables-persistent # Debian/Ubuntu sudo netfilter-persistent save
- CentOS用户使用:
sudo service iptables save
- CentOS用户使用:
-
验证规则
sudo iptables -L -n -v # 查看所有规则
方法3:直接修改配置文件(备用)
- firewalld:编辑
/etc/firewalld/zones/public.xml
,添加:<port protocol="tcp" port="8080"/>
- iptables:编辑
/etc/sysconfig/iptables
,添加:-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
验证端口是否开启
-
本地检测
ss -tuln | grep <端口号> # 查看服务是否监听
-
外部测试
telnet <服务器IP> <端口号> # 或使用nmap工具
常见问题解决
-
端口未生效?
- 检查防火墙是否运行:
sudo systemctl status firewalld
- 确认服务已绑定端口:
netstat -tuln
- 云服务器需配置安全组(如阿里云/ AWS安全组规则)。
- 检查防火墙是否运行:
-
拒绝连接?
- 服务未启动:重启服务(如
sudo systemctl restart nginx
)。 - SELinux拦截:临时禁用
setenforce 0
或添加策略。
- 服务未启动:重启服务(如
安全建议
- 最小化开放:仅开启必要端口,避免
--add-port=1-65535
这类危险操作。 - 限制来源IP(增强安全):
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="8080" protocol="tcp" accept' --permanent
- 定期审计:使用
sudo firewall-cmd --list-all
或sudo iptables -S
检查规则。
引用说明:
- 防火墙命令参考Red Hat官方文档:firewalld.org
- iptables指南基于Linux Man Pages(
man iptables
)- 安全建议遵循CIS Linux安全基准标准。
操作提示:生产环境修改前建议备份配置(如
cp /etc/firewalld/zones/public.xml public.xml.bak
)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7267.html