当前位置:首页 > 休闲

防火墙开放80端口

服务器上装好Nginx,防火放端浏览器里敲IP,墙开连接被拒。防火放端十有八九是墙开防火墙没放行80端口。这事儿我碰过不下二十次,防火放端每次帮人排查,墙开最后都落到同一行命令上。防火放端

Linux世界里有好几套防火墙在打架。墙开CentOS 7往后默认用firewalld,防火放端Ubuntu系通常裸奔着ufw,墙开还有更底层的防火放端iptables在暗处盯着。你得先搞清楚自己面对的墙开是哪个。

firewalld:CentOS/RHEL系的防火放端常客

先看状态:

systemctl status firewalld

如果显示active (running),那它就是墙开当前管事儿的。放行80端口:

firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload

第一行写入永久规则,防火放端第二行重载生效。少敲--permanent的话,重启后规则就没了,这个坑我踩过。有次帮朋友配服务器,当时测试通了,第二天他说又挂了,就是因为只加了临时规则。

想确认是否生效:

firewall-cmd --list-ports

输出里看到80/tcp就对了。如果用的是HTTP服务,也可以直接放行服务名:

firewall-cmd --permanent --add-service=http firewall-cmd --reload

效果一样,但语义更清晰。我个人偏好后者,因为https、ssh这些服务名比端口号好记。

ufw:Ubuntu用户的顺手工具

Ubuntu上默认可能没启用ufw,先查:

ufw status

如果显示inactive,那80端口不通的原因就不在它身上,得往上层或下层找。如果显示active,放行命令很直白:

ufw allow 80/tcp

完事。ufw不用reload,规则即时生效。想删掉规则就用ufw delete allow 80/tcp。查看已有规则ufw status numbered,带编号,删起来方便。

iptables:老派但还在服役

有些老系统或者Docker环境里,iptables直接管着规则。放行80端口:

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

注意是-I不是-A。用-A追加到末尾,前面要是有REJECT规则拦着,照样不通。-I插到最前面,优先级最高。这个细节很多人栽过跟头。

保存规则取决于发行版。CentOS 7之前用service iptables save,现在一般配合iptables-save和iptables-restore手动管理。Debian/Ubuntu上装iptables-persistent包来固化。

云服务器还有一层安全组

别忘了,如果用的是阿里云、腾讯云、AWS,除了系统防火墙,还有一层安全组。我第一次用阿里云的时候,firewalld关了,ufw没装,80端口死活不通,折腾半小时才想起来控制台里安全组没放行。那感觉就像钥匙插对了锁孔,但门后面还有一道链子拴着。

安全组在云厂商的控制台里配置,找到实例对应的安全组,添加入方向规则:协议TCP,端口80,来源0.0.0.0/0。确认保存,立刻生效。

验证

规则加完了,本机验证:

curl -I http://localhost

返回HTTP头就说明Web服务正常。外部验证用另一台机器:

curl -I http://你的IP

或者直接浏览器打开。如果本机通、外部不通,八成是云安全组的问题。如果本机都不通,检查Web服务本身有没有起来:ss -tlnp | grep :80。

防火墙这玩意儿,说穿了就是一层过滤。80端口被拦,原因无非就那么几个:firewalld、ufw、iptables、安全组。按顺序排查,十分钟内基本能定位。怕的是不知道有几层在起作用,东改一下西改一下,最后自己也忘了改过什么。

分享到: