service是firewalld中另外一个非常重要的概念。还是拿门卫的例子来解释。
在iptables的时代我们给门卫下达规则时需要告诉他“所有到22号楼的人全部予以放行”、“所有到80号楼的人全部予以放行”等等,
不过到了firewalld的时代就不需要这样了,
而是可以直接下达像“到销售部的全部予以放行”这样的命令,然后门卫再一查发现销售部在80号楼,那么所有到80号楼的人门卫就都会放行了。
这里的楼牌号和端口号相对应,部门名和服务名相对应,
这样就可以理解service的作用了。
从端口号改为服务名主要有两个好处:首先是使用服务名配置的语义清晰,不容易出错;其次在对某个服务的端口号进行修改的时候只需要修改相应的service文件就可以了,而不需要再修改防火墙方案——zone。这其实跟DNS将ip地址和域名关联了起来是一样的道理。下面学生再来给大家介绍一下service的配置文件。
service配置文件的命名规则是<服务名>.xml,比如ssh的配置文件是ssh.xml,http的配置文件是http.xml等,他们默认保存在“/usr/lib/firewalld/services/”目录下,
常见的服务其中都可以找到,
如果我们想修改某个服务的配置,那么可以复制一份到“/etc/firewalld/services/”目录下然后进行修改就可以了,要想恢复默认配置直接将我们自己的配置文件删除就可以了。
例:ssh.xml文件
<?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines.
It provides secure encrypted communications.
If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option.
You need the openssh-server package installed for this option to be useful.
</description> <port protocol="tcp" port="22"/> </service>
可以看到这里配置了tcp的22号端口,所以将ssh服务配置到所使用的zone(默认public)中后tcp的22号端口就开放了。
如果想将ssh的端口修改为222,那么只需要将ssh.xml复制一份到“/firewalld/services
”中,然后将端口号修改为222就可以了。
当然直接修改“/usr/lib/firewalld/services/”中的配置文件也可以实现,但是强烈建议不要那么做。
明白原理之后使用起来就可以非常灵活了,
比如我们将“/etc/firewalld/
services/ssh.xml”文件复制一份到“/etc/firewalld/
services/”中,然后将名字改为abc.xml,
并且将abc这个服务配置到所使用的zone中,这时22端口就会开放。
也就是说在zone中所配置的服务其实跟实际的服务并不存在直接联系,而是和相应配置文件中配置的内容有关系。