快捷搜索:  汽车  科技

firewall服务无法启动(ServiceFirewalld中的一大杀器)

firewall服务无法启动(ServiceFirewalld中的一大杀器)[root@freeops services]# cat /etc/firewalld/services/tomcat.xml # 查看服务配置文件 <?xml version="1.0" encoding="utf-8"?> <service> <short>Tomcat</short> <description>Tomcat Service</description> </service> [root@freeops services]# firewall-cmd --service=tomcat --add-port=8080/tcp --permanent # 定义服务端口 success [root@freeops services]# cat

firewall服务无法启动(ServiceFirewalld中的一大杀器)(1)

前言

服务器设备对外提供服务是其基本工作之一。服务包含系统内置服务和用户服务等多种情况,如何通过系统防火墙合理限制服务被访问情况,是系统维护者需要关注的问题。通常我们可以将服务所启用的端口通过防火墙开放或者通过详细规则限制可以访问的源地址。如果通过firewalld开放端口,则可能需要添加多条策略,降低系统可维护性,在firewalld中给我们提供了另外的一种实现方案--service。Firewalld中的service是内置的功能选项,是基于服务的一种防火墙管理策略。本文将基于CentOS7.x系统聊聊firewalld中service选项的那些事。

Service基础参数详解

Firewalld的service提供了丰富的命令参数,可以通过service参数调整service配置文件以实现service的基础功能。命令行中使用firewall-cmd工具可以查询service功能选项相关参数。Firewalld服务的service相关参数解析如下:

Service Options --new-service=<service> Add a new service [P only] # 新增service,并指定名称 --new-service-from-file=<filename> [--name=<service>] Add a new service from file with optional name [P only] # 新增service,并指定源文件及名称 --delete-service=<service> Delete an existing service [P only] # 删除一个已存在的service --load-service-defaults=<service> Load service default settings [P only] # 加载service默认配置 --info-service=<service> Print information about a service # 获取service配置信息 --path-service=<service> Print file path of a service [P only] # 获取service文件路径 --service=<service> --set-description=<description> Set new description to service [P only] # 设置service描述信息 --service=<service> --get-description Print description for service [P only] # 获取service描述信息 --service=<service> --set-short=<description> Set new short description to service [P only] # 设置service简短描述信息 --service=<service> --get-short Print short description for service [P only] # 获取service简短描述信息 --service=<service> --add-port=<portid>[-<portid>]/<protocol> Add a new port to service [P only] # 向service中添加端口及协议 --service=<service> --remove-port=<portid>[-<portid>]/<protocol> Remove a port from service [P only] # 移除service中已存在端口及协议 --service=<service> --query-port=<portid>[-<portid>]/<protocol> Return whether the port has been added for service [P only] # 查询端口信息是否存在 --service=<service> --get-ports List ports of service [P only]Service配置文件

Firewalld中service的配置文件存储在系统的不同位置,系统默认备用配置将会存储在/usr/lib/firewalld/services/路径中,而用户创建和自定义配置的配置文件将会保存在/etc/firewalld/service/中,Firewalld在读取配置文件时优先读取/etc/firewalld/service/路径值的内容,若该路径下不存在相应配置文件,将会再次读取/usr/lib/firewalld/services/路径内容。

Firewalld支持用户自定义服务,用户从/usr/lib/firewalld/services/路径内复制相应配置文件到/etc/firewalld/service/中,用于实际环境的自定义配置。Firewalld中service配置文件解析如下:

[root@freeops ~]# /usr/lib/firewalld/services/ # 用于默认和备用配置 [root@freeops ~]# [root@freeops ~]# /etc/firewalld/services/ # 用于用户创建和自定义配置文件覆盖默认配置 [root@freeops ~]# [root@freeops ~]# cat /usr/lib/firewalld/services/MySQL.xml # 系统Mysql默认配置 <?xml version="1.0" encoding="utf-8"?> <service> <short>MySQL</short> # 服务简介 <description>MySQL Database Server</description> # 服务介绍信息 <port protocol="tcp" port="3306"/> # 服务端口信息 </service> 查看默认service信息

Firewalld默认存在较多的服务,各服务配置具有自己独立配置文件,配置文件存储在/usr/lib/firewalld/services/中。可以执行命令查看当前firewalld系统内已存在的service信息。具体如下所示:

[root@freeops ~]# firewall-cmd --get-services RH-Satellite-6 airissue amanda-client amanda-k5-client bacula bacula-client bitcoinbitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tomcat tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server创建service

系统默认存在的服务可以直接使用,在不满足实际情况时可以用户可以根据需求自定义服务。firewalld中提供两种用户自定义服务的方法,具体分析如下:

例1:firewall-cmd使用--new-service-from-file=<path>参数调用原有的服务配置文件自定义service [root@freeops ~]# firewall-cmd --new-service-from-file=/usr/lib/firewalld/services/mysql.xml --name=airissue –permanent # 利用原有服务配置文件自定义airissue服务 success 利用原有服务的配置文件新建服务时,命令执行成功后将会把//usr/lib/firewalld/services/内的文件复制到/etc/firewalld/services/内,需要根据生产需求自定义服务信息。 [root@freeops ~]# vim /etc/firewalld/services/airissue.xml # 编辑airissue配置文件 <?xml version="1.0" encoding="utf-8"?> <service> <short>AirIssue</short> # 定义airissue服务简介 <description>AirIssue Server</description> # 定义airissue服务介绍 <port protocol="tcp" port="8899"/> # 定义airissue服务端信息 <port protocol="tcp" port="8889"/> # 定义airissue服务端信息 </service> 例1:firewall-cmd使用--new-service=<service name>参数自定义service [root@freeops ~]# firewall-cmd --zone=public --new-service=tomcat --permanent # 直接创建Tomcat服务 success [root@freeops services]# cat /etc/firewalld/services/tomcat.xml <?xml version="1.0" encoding="utf-8"?> <service> </service> 添加service描述信息

使用firewall-cmd工具调用--new-service参数自定义添加service时,系统将会在/etc/firewalld/services/内创建与service同名的.xml配置文件。但此时添加的配置文件仅满足基本格式,并无其他信息。firewall-cmd工具提供参数编辑配置文件,可以为service添加简介和描述信息。具体分析如下所示:

[root@freeops services]# cat /etc/firewalld/services/tomcat.xml # 查看服务配置文件 <?xml version="1.0" encoding="utf-8"?> <service> </service> [root@freeops services]# firewall-cmd --service=tomcat --set-short=Tomcat --permanent # 添加服务简介 success [root@freeops services]# firewall-cmd --service=tomcat --set-description="Tomcat Service" --permanent success #添加服务描述信息 [root@freeops services]# cat /etc/firewalld/services/tomcat.xml # 查看服务配置文件 <?xml version="1.0" encoding="utf-8"?> <service> <short>Tomcat</short> # 服务简介 <description>Tomcat Service</description> # 服务描述信息 </service> 添加端口

使用firewall-cmd工具调用--new-service参数自定义添加service时,文件内并没有写入服务所使用的端口信息,完成服务基础信息配置后,可以使用--add-port参数定义该服务的端口信息。服务定义端口信息,具体如下所示:

[root@freeops services]# cat /etc/firewalld/services/tomcat.xml # 查看服务配置文件 <?xml version="1.0" encoding="utf-8"?> <service> <short>Tomcat</short> <description>Tomcat Service</description> </service> [root@freeops services]# firewall-cmd --service=tomcat --add-port=8080/tcp --permanent # 定义服务端口 success [root@freeops services]# cat /etc/firewalld/services/tomcat.xml # 查看服务配置文件 <?xml version="1.0" encoding="utf-8"?> <service> <short>Tomcat</short> <description>Tomcat Service</description> <port protocol="tcp" port="8080"/> # 已成功添加TCP类型8080端口 </service> 查看service端口信息

服务端口配置后,firewall-cmd工具可以使用--get-ports参数获取当前service所配置的端口信息,该参数执行成功后将会返回service中所包含的所有端口信息。查看service端口信息,具体如下所示:

[root@freeops ~]# firewall-cmd --service=airissue --get-ports --permanent # 查看airissue服务端口 8899/tcp 8889/tcp [root@freeops ~]# firewall-cmd --service=tomcat --get-ports --permanent # 查看tomcat服务端口 8080/tcp查看service中是否存在端口

上面提到firewall-cmd工具可以使用--get-ports参数获取当前service中所包含的所有端口信息,而firewall-cmd工具的--query-port参数将可以查看当前服务中是否存在某一端口信息。使用--query-port参数查看端口信息时,若该service中包含端口,则返回‘yes’,否则将会返回‘no’。查看service中是否存在端口,具体如下所示:

[root@freeops ~]# firewall-cmd --service=tomcat --query-port=8080/tcp --permanent yes [root@freeops ~]#移除端口

在service中添加端口后,firewall-cmd工具提供移除端口的功能。使用--remove-port参数可以移除service中所包含的端口。使用--remove-port参数移除service中所存在的端口,具体如下所示:

[root@freeops ~]# firewall-cmd --service=tomcat --get-ports --permanent # 查看tomcat服务端口 8080/tcp [root@freeops ~]# firewall-cmd --service=tomcat --remove-port=8080/tcp --permanent # 移除tomcat服务8080/TCP端口 success [root@freeops ~]# [root@freeops ~]# firewall-cmd --service=tomcat --get-ports --permanent # 查看tomcat服务端口 # 因tomcat中不存在端口,该命令返回为空值 [root@freeops ~]# firewall-cmd --service=tomcat --query-port=8080/tcp --permanent # 查看tomcat服务端口 no查看service信息

系统中存在的service较多时,系统维护者合理定义使用service将会变得越来越复杂,firewall-cmd工具中提供了--info-service参数可以查看服务的相关信息,通过该参数查看service信息将会一目了然。使用--info-service查看service信息,具体如下所示:

[root@freeops ~]# firewall-cmd --info-service=tomcat tomcat ports: 8080/tcp protocols: source-ports: modules: destination: [root@freeops ~]# firewall-cmd --path-service=tomcat --permanent /etc/firewalld/services/tomcat.xml 删除service

Service增加和删除是系统维护者常常需要关注的问题,firewall-cmd工具中提供了--delete-service参数删除系统中已存在的service信息。使用--delete-service参数删除service时,firewalld中已引用的service的策略也会同步删除。删除service,具体如下所示:

[root@freeops ~]# firewall-cmd --zone=public --delete-service=tomcat --permanent success Firewalld动作

通过fireall-cmd工具可以使用针对service的增删改查工作,但系统中所存在的service需要配合firewalld策略才能使用防火墙功能。使用service结合防火墙动作实现防火墙基础功能存在多种方案,读者可以根据实际需求选择相应动作添加防火墙策略。firewalld动作添加,具体如下所示:

例1:系统开放airissue服务,所有外部主机均可以访问airissue服务 [root@freeops ~]# firewall-cmd --zone=public --add-service=airissue --permanent success 例2:系统禁止airissue服务对外开放,所有外部主机均禁止访问airissue服务 [root@freeops ~]# firewall-cmd --zone=public --remove-service=airissue --permanent success 例3:系统仅允许192.168.241.0/24网段地址访问airissue服务 开放192.168.241.0/24访问 [root@freeops ~]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.241.0/24" service name=airissue accept" success 例4:系统禁止允许192.168.241.0/24网段地址访问airissue服务 [root@freeops ~]# firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.241.0/24" service name=airissue accept" success 例5:系统仅允许白名单内设备访问airissue服务 创建whitelist [root@freeops ~]# firewall-cmd --permanent --add-rich-rule="rule source ipset=whitelist service name=airissue accept" success


--- THE END ---

firewall服务无法启动(ServiceFirewalld中的一大杀器)(2)

猜您喜欢: