在Linux 7防火墻中提供了Firewalld管理工具。因為普通用戶無法直接操作內核空間的Netfilter組件,所以需要使用以上工具來進行管理。Firewalld是Linux 7默認的管理工具,為了防止和Iptables產生沖突,可以編寫一個簡單的腳本,包含“#!/bin/bash”、“for SERVICE in iptables ip6tables ebtables”、“s y s t e m c t l m a s k${SERVICE}.service”以 及“done”等行,執行“chmod 755 xxx.sh”、“./xxx.sh”命令,名稱可以假設為“xxx.sh”,就可以禁用之前的管理工具了。Linux 7支持trusted、home、internal、work、public等區域。
FireWalld提 供 了“Direct rules”(直接規則)和“Rich Rules”(富 規 則)兩個選項。前者主要用于使服務和應用程序能夠增加規則,但靈活性較差,難以管理。富規則提供了更為復雜和精細的配置,其語法相對來說比較復雜,能夠對數據包的源地址、目標地址進行過濾,針對服務、端口、協議、ICMP攔截、偽裝、端口轉發等動作進行控制,對流量可以進行更加精細的管控。并且可以將流量信息記錄到日志和審計中,根據具體情況可以執行接受、拒絕和丟棄等操作。
例如執行“firewallc m d --p e r m a n e n t--zone=classroom -add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'”命令,對自定義區域“classroom”增加一條富規則,作用是針對IPv4流量進行控制,拒絕源地址為192.168.0.11的連接。執行“firewall-cmd --reload”、“firewall-cmd --list-richrules -zone=xxx”命令,列出“xxx”區域中的所有的富規則。執行firewall-cmd--remove-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'”命令,可以移除指定的富規則。
執 行“firewall-cmd--add-rich-rule='rule service name=ftp limit value=2/m accept'” 命令,對于當前區域增加一條富規則,作用是針對FTP連接進行控制,只允許在每分鐘內接受兩個新連接。 執 行“firewall-cmd--permanent --zone=xxx-add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 p o r t=7 9 0 0-8 0 0 0 protocol=tcp accept'”命令,對區域“xxx”增加一條富規則,作用是針對IPv4流量進行控制,允許源地址為192.168.1.0/24,端 口 來 自7900到8000的TCP連接通過防火墻。
為便于監控流量信息,還可將其記錄到日志中。例 如 執 行“firewall-cmd--permanent --zone=xxx-add-rich-rule='rule service name="ssh" log prefix="ssh " level="notice" limit value="3/m" accept'”命令,表示針對區域“xxx”添加一條富規則,將服務名為“ssh”的流量放行,并記錄到日志中。日志的級別包括emerg(恐慌)、alert(報警)、crit(緊急)、error(錯誤)等。執行“grep ssh /var/log/message”命令即可檢索到這些日志信息。
執 行“firewall-cmd--add-rich-rule='rule family=ipv6 source address="2001:db8::/64"service name="dns" audit limt value="1/h" reject'-timeout=300” 命 令,可以為當前區域添加一條富規則,作用是針對IPv6流量進行控制,拒絕源地址為“2001:db8::/64”,服 務名為“dns”的流量,并對其進行審計,速率為每小時處理一條消息,該規則超時時間為300毫秒。當安裝了HTTPD之后,執行“systemctl start https”命令,啟動Web服務。執行“firewall-cmd--permanent --zone=public--add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=http log p r e f i x="N E W H T T P"level="notice" limit value="3/s" accept'”命令添加一條富規則,對源地址為172.16.1.0/24,服務名為“http”的連接進行記錄,前日志前綴為“NEW HTTP”,速率為每秒3條,對這樣的放行。執行“firewall-cmd --reload”命令加載,執行“tail -f /var/log/messages”命令,監視日志變化情況。
Linux 7防火墻機制中提供了地址偽裝和端口轉發功能。在防火墻主機上至少需要安裝兩塊網卡,分別連接內網和外網。執行“firewall-cmd -listall”命令,在默認情況下當前區域的規則列表中的“masquerade:”欄 中 顯示“no”,說明偽裝并未打開。 執 行“firewall-cmd--permanent --zone=public-add-masquerade”命令,為Public區域添加偽裝。
執 行“firewall-cmd--reload”和“firewall-cmd-list-all”命令,顯示偽裝功能已打開。因為在上面的例子中,已經為Public區域設置了相應富規則,允許172.16.1.0/24網段主機通過防火墻訪問外網,而且將連接內外網的接口添加到了Public區域的“interrface”接口列表中,這樣偽裝效果就發揮了出來,內網中該網段內的主機就可以通過防火墻訪問外網Web主機了。對端口轉發來說,即可從本機的端口轉發到另一個端口,也可轉發到另一個系統,這只是在偽裝接口下有用。注意,端口轉發只是用于Ipv4。
處理使用系統自帶的區域和服務外,Linux 7的防火墻也允許用戶自定義所需的區域和服務。防火墻配置文件分別存儲在“/usr/lib/firewalld” 和“/etc/firewalld”目錄中。前者是系統默認,后者是當前使用的。如果要自定義區域和服務,需要以前者為模版。防火墻區域的定義信息存儲在“.xml”格式文件中,進入“/etc/firewalld/zones”目錄中,執行“cat public.xml”命令,顯示Public區域的配置信息,其中包含該區域的所有規則信息。可以直接添加規則,實現靈活編輯。
進 入“/u s r/l i b/firewalld/zones”目錄,其中顯示了各種默認的區域配置信息。執行“cat public.xml”命令,查看默認的區域配置信息,但并未包含任何規則。了解了這些內容,實現自定義區域操作就很簡單了。例如執行“firewall-cmd--new-zone --permanent--new-zone=workzone”,“firewall-cmd --reload”命令,可以自定義一個名為“workzone”的區域。進入“/etc/firewalld/zones”目錄中,可以看到該區域配置文件。當然,該文件默認配置信息為空。
執 行“f i r e w a l lc m d --l i s t-a l l--zone=workzone”命令,顯示不包含任何規則信息。之后可以按照上面的方法為其添加所需規則。例如執行“firewall-cmd --changeinterface=enoxxxxxx -zone=workzone”命令,將指定的網絡接口添加到該自定義區域。執行“firewall-cmd-zone=workzone --addservice=ssh --permanent”,“firewall-cmd --reload”命令添加SSH服務,即允許連接SSH服務。這樣,在客戶端連接與之相關的IP時,即可訪問該機的SSH服務了。
當然,也可以進入“/etc/firewalld/zones” 目錄中,執行“vi workzone.xml”命令進行編輯,添加“