CentOS 7 下 Firewalld 折腾记

字数 646阅读 353

用女票的学生账号申请了阿里云的ECS机器,操作系统是CentOS 7 。之前有过CentOS 6 的操作经验,从6到7基本上也没大变化。感觉变化最大的就是防火墙的设置了:从iptables变成Firewalld。

Firewalld管理端口明显变得比之前复杂许多,命令也异常繁琐,但是如果从配置文件的角度去理解Firewalld的基本原理,记不住繁琐的命令也能玩转Firewalld。

基本的三个命令是还是要掌握的,即开启、关闭、查询状态:

systemctl start/stop/status firewalld

Firewalld启动的时候会加载一系列配置文件,从配置文件中读取需要被开放的服务,一个服务会对应一个端口。默认情况下只有服务ssh的端口22是被开放的。

那么如何开放http服务使用的80端口呢?下面就来了解Firewalld的配置文件的具体信息:

  • /usr/lib/firewalld是Firewalld的默认配置文件的存储路径,这里的文件不应该被修改,因为Firewalld升级后会覆盖掉所有的更改。其中有如下目录
    • icmptypes
    • ipsets
    • services
    • xmlschema
    • zones

services目录下存放的是一些系统预定义好的服务,文件名就是服务名,比如ssh.xml、http.xml. 以http服务为例,XML中的内容就定义了端口为80:

<?xml version="1.0" encoding="utf-8"?>
<!-- http.xml -->
<service>
    <short>WWW (HTTP)</short>
    <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
    <port protocol="tcp" port="80"/>
</service>

zones目录下会存放系统预定义的zone(类似区域的概念),比如有home.xml、public.xml等,同样是文件名代表zone名。

  • /etc/firewalld是可以用于自定义的配置文件存储地址,** 这里的配置会优先被使用 **,和上面的目录基本相同,其中services目录可以存放用户自定义的服务,zones目录可以存放自定义的区域。

在目录/etc/firewalld下还有一个主要的配置文件firewalld.conf,这个是Firewalld加载配置的入口,firewalld.conf定义的default zone如果是public的话,那么设置的服务就在/etc/firewalld/zones/public.xml下:

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  <service name="http"/>
</zone>

可以看到ssh是被默认加入到public zone中了,所以22端口默认就是被开放的,现在只需要添加一句<service name="http"/>(因为http服务已经在系统默认配置/usr/lib/firewalld/services中指定过了),然后重启Firewalld就可以开放80端口了。

参考 : http://www.firewalld.org/documentation/configuration/directories.html

推荐阅读更多精彩内容