Linux 防火墙开放指定端口
Linux防火墙的命令和使用,特别是开放某一个特定的端口。
简介
刚开始在linux上部署项目的时候,往往会出现某些带端口的项目可以运行,但是实际却无法打开页面访问。这里出现的问题有可能是你没有以生产模式启动应用,以nodejs应用举例的话你可能没有npm start --production
,但是大多数情况下还是linux防火墙的锅,接下来我们就来讲讲linux防火墙如何开启指定的端口。本文将主要讲解服务器环境为centos6.x下的配置,文章最后补充了关于centos7.x的防火墙配置。
Centos6.x
iptables,请记住这个单词,它既是linux中一个服务,也是一个配置文件,当然作用就是管理防火墙的。
服务
- service iptables status 查看防火墙状态
- service iptables start 启用防火墙
- service iptables stop 关闭防火墙
- service iptables restart 重启防火墙
首先查看当前所有的防火墙规则
$ iptables -L -n
开启某个端口,例如开启3000端口:
$ iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
简单的解释下这里的几个参数:
- -A 参数表示添加规则,此外-D表示删除规则
- -p 表示协议,一般都是tcp
- --dport 就是指定端口号
- -j 指定是ACCEPT还是DROP,接收还是抛弃
关于命令的更多细节可以通过iptables -h
查看。
配置文件
防火墙的配置文件在/etc/sysconfig/iptables
同样的,我们想要开启某个端口也可以编辑该文件并添加规则,例如开启3000端口:
$ vi /etc/sysconfig/iptables
...
-A INPUT -p tcp --dport 8000 -j ACCEPT
...
在我们添加完指定端口号后,最后保存配置以及重启防火墙:
$ service iptables save
$ service iptables restart
Centos7.x
centos7.x对于6.x的一个比较大的变化在于服务这一块,就是7将6的服务功能整合成了一个命令systemctl,systemctl很强大,可以干很多事情。在防火墙上也有变化,7的防火墙服务名为firewalld.service
,以及防火墙命令为firewall-cmd
。同样的开启8000端口,在7上的操作如下。
$ firewall-cmd --zone=public --add-port=8000/tcp --permanent
防火墙服务的开关以及重启:
$ systemctl stop firewalld.service
$ systemctl start firewalld.service
$ systemctl restart firewalld.service