firewalld默認給咱們提供的ftp的service配置文件ftp.xmlhtml
<?xml version="1.0" encoding="utf-8"?> <service> <short>FTP</short> <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description> <port protocol="tcp" port="21"/> <module name="nf_conntrack_ftp"/> </service>
service相對於zone來講結構要簡單的多,其總體配置文件結構以下bash
<service [version="string"]> [<short>short description</short>] [<description>description</description>] [<port [port="portid[-portid]"] protocol="protocol"/>] [<module name="helper"/>] [<destination ipv4="address[/mask]" ipv6="address[/mask]"/>] </service>
firewall-cmd分別提供了兩個命令來建立和刪除servicetcp
firewall-cmd --permanent --new-service='service' firewall-cmd --permanent --delete-service='service'
若是直接編輯xml文件應該更簡單,this
大部分服務在「/usr/lib/firewalld/services/」目錄下均可以找到,不過咱們不要直接修改而要複製一份到「/etc/firewalld/services/」中而後再進行修改,server
更好的作法是在「/usr/lib/firewalld/services/」中找一個相似的服務複製一份到「/etc/firewalld/services/」目錄中,而後修改文件名和其中的內容。xml
version是service節點的一個可選屬性,用於表示service的版本。htm
short在zone、icmptype等配置文件中也存在,其做用是簡介,主要是讓咱們對所配置的內容有所瞭解,相似於註釋的做用。blog
做用跟short相同,不過描述信息更加詳細。ip
服務所對應的端口,這項是service中很是重要的一個配置項,大部分service主要就是對port進行綁定的,當一個service綁定了指定端口以後,該端口接收到的鏈接就會當成這個service,而後到所對應的zone中去查詢規則,從而判斷是否能夠放行。utf-8
一個service中能夠配置多個port節點,這在有的時候是很是有用的,好比
port節點有兩可個配置的屬性:port和protocol
port用來配置所使用的端口號,能夠是單個端口也能夠是一個端口段,好比port=100-105表示100到105之間的端口號,另外,port屬性是個可選屬性,能夠不進行設置。
protocol屬性用於指定所對應的協議,若是port屬性不爲空,那麼protocol應該設置爲tcp或者udp,若是port屬性爲空(沒設置),那麼protocol能夠設置爲/etc/protocols中所包含的任意協議。
module用於設置netfilter的helper。學生前面給你們介紹過,firewalld實際上是基於netfilter進行工做的,netfilter中的helper主要用於鏈接的跟蹤,這樣就能夠實現「有狀態的防火牆」,也就是將相關的鏈接管理到一塊兒。一個典型的例子就是ftp的鏈接,咱們知道通常來講ftp使用的是21號端口,不過21號端口主要是用來傳輸命令的,實際傳輸文件又會使用一個其餘的端口,不過這兩個鏈接還有內在的聯繫,這種狀況就可使用netfilter中的helper來處理,在咱們這裏service中就是module節點。
destination很是簡單,他就表示目標地址,也就是根據目標地址來綁定服務,他有兩個屬性:ipv4和ipv6,分別用於綁定ipv4和ipv6的地址,可使用單個地址也可使用掩碼。
另外,在一個service中destination最多隻能出現一次。