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