注:爲了便於查看,我把iptables和firewlld的使用總結文檔放到了這個連接(下載),這個文檔若是有新的內容和更正,我會及時更新。python
有須要能夠直接下載查看,應該比在博客(博客作不少格式太耗費時間了)上看到的格式要友好一些。ios
說明:我的認爲此處文章適合已經對firewalld有必定了解,而且但願對實用操做有一篇總結性的文章來方便查閱的受衆,服務器
或者原本對firewalld沒有多少了解,可是想系統地瞭解firewalld及其一些經常使用操做,拿來就能用的受衆。網絡
=====================================華麗的分割線=====================================併發
目錄:ssh
1 區域概念tcp
3 直接規則學習
=====================================華麗的分割線=====================================
說明:在RHEL7系列中,默認使用firewalld做爲防火牆,iptables默認是關閉的(stop),
要使用firewalld建議先關閉並禁用老版本的iptables,ip6tables和ebtables。
systemctl mask iptables systemctl mask ip6tables systemctl mask ebtables systemctl enable firewalld
在firewalld中引入了區域的概念,能夠簡單理解爲一些配置好策略的模板,直接應用便可,若是是學網絡的,
應該很能理解,好比華爲的防火牆,華三的防火牆這些,都是有這種概念的,這裏就不詳細解釋什麼是區域了。
只有firewalld服務啓動了,才能使用相關工具: firewall-config(圖形界面), firewall-cmd,這裏主要介紹命令行方式的。
firewalld有規則兩種狀態
運行時(runtime):修改規則立刻生效,可是臨時生效
持久配置(permanent): 修改後須要重載纔會生效
firewall-cmd --permanent RULE
firewall-cmd --reload
注意:一旦使用了permanent,配置完成後必定要reload,不然只能待防火牆重啓後這些配置才能生效。
配置文件
/etc/firewalld/{services,zones}/*.xml 優先級最高,permanent模式生效的策略會放到這裏
/lib/firewalld/{services,zones}/*.xml 優先級要低些,是一些默認配置,能夠當作模板使用
如下options是能夠組合使用的,具體見man firewall-cmd或者firewall-cmd --help,裏面有詳細的說明,此處只列出一些經常使用的option。
firewall-cmd --permanent --配置寫入到配置文件,不然臨時立刻生效 --reload --重載配置文件,永久生效 --zone= --指定區域 --get-default-zones --獲取默認區域 --set-default-zone= --設置默認區域 --get-zones --獲取全部可用的區域 --get-active-zones --獲取當前激活(活躍)的區域 --add-source= --添加地址,能夠是主機或網段,遵循當前區域的target --remove-source --移除地址,能夠是主機或網段,遵循當前區域的target --add-service= --添加服務,遵循當前區域的target --remove-service= --移除服務,遵循當前區域的target --list-services --顯示指定區域內容許訪問的全部服務 --add-port= --添加端口,遵循當前區域的target --remove-port= --移除端口,遵循當前區域的target --list-ports 顯示指定區域內容許訪問的全部端口號 --add-interface= --zone= --添加網卡到指定區域 --change-interface= --new-zone-name --改變網卡到指定區域 --list-all --列出激活使用的區域的配置 --list-all-zones --列出全部區域的配置 --get-zone-of-interface= --獲取指定接口所在的區域 --list-icmp-blocks --顯示指定區域內拒絕訪問的全部ICMP類型 --add-icmp-block= --爲指定區域設置拒絕訪問的某項ICMP類型 --remove-icmp-block= --移除指定區域內拒絕訪問某項的ICMP類型 經常使用的ICMP類型有 #echo-request:類型0,icmp請求報文 #echo-reply:類型8,icmp響應回覆報文 --list-protocols --列出在指定區域中容許經過的協議 --add-protocol= --在指定區域中添加容許經過的協議 --remove-protocol= --移除在指定區域中的某項協議 --get-target --獲取區域中的默認target --set-target= --設置區域的target
查看默認區域
firewall-cmd --get-default-zone
查看全部可使用的區域
firewall-cmd --get-zones
修改當前的默認區爲work
firewall-cmd --set-default-zone=work
在work區添加http服務並容許別人訪問
firewall-cmd --add-service=http --zone=work
在public區綁定了該地址範圍,只有該範圍的IP的數據包都會路由到該區,由該區的規則進行匹配決定是否放行
firewall-cmd --add-source=172.25.0.10/32 --zone=public
查看活躍的區域
firewall-cmd --get-active-zones
把接口綁定到public區
--change-interface= --zone=
--add-interface= --zone=
查看網卡綁定在了哪一個區域
firewall-cmd --get-zone-of-interface=IFACE
查看區域配置信息
firewall-cmd --list-all --zone=work
firewall-cmd --list-all
查看全部服務
firewall-cmd --get-services
Direct Options --direct --指定將要使用直接規則 --get-all-chains --獲取全部的鏈 --get-chains {ipv4|ipv6|eb} <table> --獲取表中的鏈 --add-chain {ipv4|ipv6|eb} <table> <chain> --添加鏈到表中(自定義的) --remove-chain {ipv4|ipv6|eb} <table> <chain> --移除表中的某條鏈 --query-chain {ipv4|ipv6|eb} <table> <chain> --返回鏈是否已被添加到表 --get-all-rules --獲取全部的策略規則 --get-rules {ipv4|ipv6|eb} <table> <chain> --獲取指定表中指定鏈中的規則 --add-rule {ipv4|ipv6|eb} <table> <chain> <priority> <arg>... --在指定表中的指定鏈添加規則 --remove-rule {ipv4|ipv6|eb} <table> <chain> <priority> <arg>... --優先從指定表中的指定鏈刪除規則條目 --remove-rules {ipv4|ipv6|eb} <table> <chain> --從表中刪除規則條目 --query-rule {ipv4|ipv6|eb} <table> <chain> <priority> <arg>... --返回是否優先的規則已被添加到鏈表中 --passthrough {ipv4|ipv6|eb} <arg>... --直接傳遞iptables的命令 --get-all-passthroughs --獲取全部直接傳遞的規則 --get-passthroughs {ipv4|ipv6|eb} <arg>... --獲取跟蹤直通規則 --add-passthrough {ipv4|ipv6|eb} <arg>... --添加一個直接規則 --remove-passthrough {ipv4|ipv6|eb} <arg>... --移除一個直接規則 --query-passthrough {ipv4|ipv6|eb} <arg>... --查詢直接規則是否添加
除非將直接規則顯式插入到由 fircwa1ld管理的區域, 不然將首先解析直接規則, 而後纔會解析任何fircwalld規則,即直接規則優先於firewalld規則。
示例1:添加一些直接規則以將某個IP範圍列入黑名單的簡短示例:
直接規則主要用於使服務和應用程序可以增長規則。傳遞的參數 與 iptables, ip6tables 以及 ebtables 一致。
全部來自192.168.0.0/24網絡IP,單個IP每分鐘最高鏈接併發是1,超過併發的鏈接都丟棄 firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING O -s 192. 168, 0. 0/24 -j blacklist # 注意,這裏-j 在前面iptables時咱們說過,是能夠指定自定義鏈這一target的 firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist O -m limit --limit 1/min -j LOG --log-prefix "blacklisted " firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP firewall-cmd --reload firewall-cmd --direct --get-all-rules ipv4 raw PREROUTING 0 -s 192.168.0.0/24 -j blacklist ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix blacklisted ipv4 raw blacklist 1 -j DROP 實驗完畢,刪除規則 firewall-cmd --permanent --direct --remove-rules ipv4 raw blacklist firewall-cmd --permanent --direct --remove-rules ipv4 raw PREROUTING firewall-cmd --direct --remove-rules ipv4 raw blacklist firewall-cmd --direct --remove-rules ipv4 raw PREROUTING firewall-cmd --direct --remove-chain ipv4 raw blacklist firewall-cmd --reload
示例2:利用firewalld直接規則來作SNAT和MASQUERADE實現內網共享上網
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth1 -j MASQUERADE -s 172.25.0.0/24 firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth1 -j SNAT -s 172.25.0.0/24 --to-source <外網IP> firewall-cmd --direct --get-all-passthroughs
富規則通常爲了精確控制,用得比較多,因此這裏將重點講解
firewall-cmd --list-rich-rules --列出富規則 --add-rich-rule=<rule> --使用富規則語言添加富規則 --remove-rich-rule=<rule> --移除富規則 --query-rich-rule=<rule> --查詢某條富規則是否存在 --list-rich-rules --列出指定區域中的全部富規則 --list-all 和 --list-all-zones --也能列出存在的富規則
規則的幾乎每一個單一元素都可以以option=value形式來採用附加參數,參考firewalld.richlanguage
rule [source] [destination] service|port|protocol|icmp-block|masquerade|forward-port [log] [audit] [accept|reject|drop]
rule [family="ipv4|ipv6"] source address="address[/mask]" [invert="True"] destination address="address[/mask]" invert="True" service name="service name" port port="port value" protocol="tcp|udp" protocol value="protocol value" forward-port port="port value" protocol="tcp|udp" to-port="port value " to-addr="address" log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"] accept | reject [type="reject type"] | drop
一旦向某個區域(通常是指防火牆)中添加了多個規則, 規則的排序便會在很大程度上影響防火牆的行爲。
對於全部區域, 區域內規則的基本排序是相同的。
1.爲該區域設置的任何端口轉發和假裝規則。
2.爲該區域設置的任何記錄規則。
3.爲該區域設置的任何容許規則。
4.爲該區域設置的任何拒絕規則。
在全部狀況下, 第一個匹配項都將勝出。若是區域中的任何規則與包均不匹配 ,那麼一般會拒絕該包
可是區域可能具備不一樣默認值;例如,可信區域將接受任何不匹配的包。此外,在匹配某個記錄規則後,將繼續正常處理包。
直接規則是個例外。對於大部分直接規則,將首先進行解析,而後再由firewalld進行任何其餘處理 ,
可是直接規則語法容許管理員在任何區域中的任何位置插入任何規則。
爲了便於測試和調試 幾乎全部規則均可以與超時一塊兒添加到運行時配置。
當包含超時的規則到防火牆時,計時器便針對該規則開始倒計時。
一旦規則的計時器達到零秒,便從運行時配置中刪除該規則。
在使用遠程防火牆時,使用超時會是一種極其有用的工具,特別是在測試更復雜的規則集時。
若是規則有效,則管理員能夠再次添加該規則,但使用--permanent選項(或者至少不包含超時)。
若是規則沒有按預期運行,甚至可能將管理員鎖定而使其沒法進入系統,那麼規則將被自動刪除,
以容許管理員繼續其工做。經過在啓用規則的firewall-cmd的結尾添加--timeout=<timeinseconds>便可向運行時規則中添加超時。
調試或監控防火牆時,記錄巳接受或巳拒絕的鏈接頗有用。
firewalld能夠經過兩種方法來實現此目的記錄到syslog, 或者將消息發送到由auditd管理的內核audit子系統。
在這兩種狀況下,記錄可能會受到速率限制。
速率限制確保系統日誌文件填充消息的速率不會使系統沒法跟上或者填充其全部磁盤空間 。
使用富規則記錄到syslog的基本語法爲: log [prefix="<PREFIX TEXT>" [level=<LOGLEVEL>] [limit value="<RATE/DURATION>"] 其中: <LOGLEVEL> 能夠是emerg 、 alert 、 crit 、 error 、 warning 、 notice 、 info或debug之一。 <RATE/DURATION>" 能夠是s(表示秒)、m(表示分鐘)、h(表示小時)或d(表示天)之一。 例如:limit value=3/m會將日誌消息限制爲每分鐘最多三條。 limit value = 3/m 這裏是有BUG 的,經常時間控制會不精準。
port port=4000-5234 用這樣的形式 firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept'
用於記錄到審計子系統的基本語法爲:
audit [limit value="<RATE/DURATION>"]
速率限制的配置方式與syslog記錄相同。
使用富規則進行記錄的某些示例:
1.接受從work區域到SSH的新鏈接, 以notice級別且每分鐘最多三條消息的方式將新鏈接記錄 到syslog。 firewall-cmd --permanent --zone=work --add-rich-rule='rule service name="ssh" log prefix="ssh" level="notice" limit va1ue="3/m" accept 2.在接下來五分鐘內, 將拒絕從默認區域中子網2001: db8: : /64到DNS的新IPv6鏈接, 而且拒絕的鏈接將記錄到audit系統,且每小時最多一條消息。 firewall-crud --add-rich-rule='rule family=ipv6 source address="2001 :db8: :/64" service name=" dns" audit limit va1ue=" 1/h" reject'--timeout=300
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject' firewall-cmd --permanent --zone=public --add-rich-rule='rule service name=ftp limit value=1/m accept' firewall-cmd --permanent --zone=public --add-rich-rule='rule protocol value=esp drop' firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.17.10.0/24 service name=ssh reject' firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 port port=7900-7905 protocol=tcp accept'
針對ssh 連接記錄至日誌中,每分鐘3次
firewall-cmd --permanent --zone=work --add-rich-rule='rule service name=ssh log prefix="ssh " level=notice limit value="3/m" accept'
用於調試,規則在300秒後失效,防止規則設定錯誤致使網絡鏈接斷開
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 service name=ssh reject' --timeout=300
添加富規則,只容許172.25.0.10/32訪問,而且記錄日誌,日誌級別爲notice,日誌前綴爲"NEW HTTP ",限制每秒最多3個併發 ,要求持久化生效
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.25.0.10/32 service name=http log level=notice prefix="NEW HTTP " limit value="3/s" accept'
firewall-cmd --reloa
1)網絡地址轉換(NAT)
firewalld支持兩種類型的網絡地址轉換(NAT) 假裝和端口轉發。能夠在基本級別使用常規
frewall-cmd規則來同時配置這二者,更高級的轉發配置可使用富規則來完成。
這兩種形式的NAT會在發送包以前修改包的某些方面如源或目標。
2)假裝(注意:假裝只能和ipv4一塊兒用,ipv6不行)
經過假裝系統會將並不是直接尋址到自身的包轉發到指定接收方同時將經過的包的源地址更改成其本身的公共TP地址。
防火牆對這些傳入的包應答時會將目標地址修改成原始主機的地址併發送包。這一般在網絡邊緣上使用以便爲內部網絡提供Internet訪問。
假裝是一種形式的網絡地址轉換(NAT)
3)配置假裝
要使用常規的firewall-cmd命令爲區域配置假裝,使用下列語法:
firewall-cmd --permanent --zone=<ZONE> --add-masquerade
這將假裝知足如下條件的任何包從該區域的源(接口及子網)中定義的客戶端發送到防火牆且未尋址到防火牆自身的包,即該區域源的數據包的目標IP不是防火牆自身的IP,都將映射成防火牆的IP。
要在更大程度上控制要進行假裝的客戶端,還可使用富規則。
firewall-cmd --permanent --zone=<ZONE> --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 masquerade'
4)端口轉發
另外一種形式的NAT是端口轉發。
經過端口轉發指向單個端口的流量將轉發到相同計算機上的不一樣端口或者轉發到不一樣計算機上的端口。
此機制一般用於將某個服務器隱藏在另外一個計算機後面,或者用於在備用端口上提供對服務的訪問權限。
重要:
當端口轉發配置爲將包轉發到不一樣計算機時,從該計算機的任何回覆一般將直接從該計算機發送到原始客戶端。
這將在大部分配置上致使無效鏈接,所以轉發到的計算機必須經過執行端口轉發的防火牆來進行假裝。
常見配置是將端口從防火牆計算機轉發到已在防火牆後面假裝的計算機,即這種經過目標端口轉發的方式須要開啓假裝(masquerade)
要使用常規fircwall-cmd命令配置端口轉發,可使用firewalld提供的端口轉發語法:
firewall-cmd --permanent --zone=<ZONE> --add-forward-port=port=<PORTNUMBER>:proto=<PROTOCOL>[:toport=<PORTNUMBER>][:toaddr=<IPADDR>]
toport=和toaddr 兩部分都可選,但須要至少指定這二者之一 。
例如, 對於來自public區域的客戶端,如下命令會將防火牆上經過端口513/TCP傳入的鏈接轉發到IP地址爲192.168.0.254的計算機上的端口132/TCP frewall-cmd --permanent --zone=public --add-forwardport=port=513:proto=tcp:toport=132:toaddr=192.168.0.254
要在更大程度上控制端口轉發規則,能夠將如下語法與富規則配合使用來實現端口轉發,這也是咱們推薦使用的方式
forward-port port=<PORTNUM> protocol=tcp|udp [to-port=<PORTNUM>] [to-addr=<ADDRESS>]
如下示例使用富規則未來自work區域中192.168.0.0/4且傳入到端口80/TCP的流星轉發到防火牆計算機自身上面的和端口8080/TCP:
firewall-cmd --permanent --zone=work --add-rich-rule='rule family=ipv4 source address=l92.168.0.0/24 forward-port port=80 protocol=tcp to-port=8080'
其實這裏是指傳統的目標地址映射,實現外網訪問內網資源
firewall-cmd --zone=external --add-masquerade firewall-cmd --permanent --zone=public --add-forward-port=port=513:proto=tcp:toport=132:toaddr=192.168.0.254 firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 forward-port port=80 protocol=tcp to-port=8080'
例子:
把來自172.25.0.10/32而且訪問的端口爲tcp的443端口的數據包進行端口轉發,轉發到本機的tcp的22端口
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.25.0.10/32 forward-port port=443 protocol=tcp to-port=22' firewall-cmd --reload
本地端口轉發:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.10/32 forward-port port=80 to-port=22 protocol=tcp'
目標地址轉發:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.10/32 forward-port port=80 to-port=80 protocol=tcp to-addr=172.25.0.254'
一鍵斷網
firewall-cmd --panic-off firewall-cmd --panic-on
從新會加載內核中的防火牆模塊和配置文件
firewall-cmd --complete-reload
這裏值得注意的是若是主機開啓了SELinux,須要對對於的端口打上標籤(SELinux context)
semanage port -l semanage port -a -t port_label -p tcp|udp PORTNUMBER semanage port -a -t gopher_port_t -p tcp 71
semanage命令若是是最小化安裝,可能沒有這個工具,因此須要本身安裝,對應的包以下
rpm -qa | grep semanage libsemanage-2.5-8.el7.x86_64 libsemanage-python-2.5-8.el7.x86_64
參照/lib/firewalld/zones/public.xml文件,在/lib/firewalld/zones/下面新建你須要的區域名以.xml結尾,內容格式參照public.xml,trusted.xml等文件便可。
Internal.xml <?xml version="1.0" encoding="utf-8"?> <zone> <short>Internal</short> <description>For use on internal networks. You mostly trust the other computers on the networks to not harm your computer. Only selected incoming connections are accepted.</description> <service name="ssh"/> <service name="mdns"/> <service name="samba-client"/> <service name="dhcpv6-client"/> </zone>
自定義服務可讓防火牆配置更爲簡便,可以直接使用服務名來進行策略配置
參照/usr/lib/firewalld/services/ssh.xml,在/usr/lib/firewalld/services/下面新建你須要的服務名以.xml結尾,內容格式參照ssh.xml,samba.xml文件中的內容便可。
samba.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>Samba</short> <description>This option allows you to access and participate in Windows file and printer sharin g networks. You need the samba package installed for this option to be useful.</description> <port protocol="udp" port="137"/> <port protocol="udp" port="138"/> <port protocol="tcp" port="139"/> <port protocol="tcp" port="445"/> <module name="nf_conntrack_netbios_ns"/> </service>
systemctl stop {ip,eb,ip6}tables #通常默認在RHEL7中是沒有開啓的 systemctl mask {ip,eb,ip6}tables systemctl start firewalld systemctl status firewalld能夠看到firewalld啓動了
配置文件
/etc/firewalld/{services,zones}/*.xml 優先級最高,permanent模式生效的策略會放到這裏
/lib/firewalld/{services,zones}/*.xml 優先級要低些,是一些默認配置,能夠當作模板使用
firewall-cmd --permanent
--使用該option會將配置寫入到/etc/firewalld/{services,zones}/*.xml對應的文件中,可是必須使用firewall-cmd --reload來重載配置才能生效,若是不使用 --permanent,那麼配置將會立刻生效,可是在重啓firewalld和重載(reload) firewalld後不會生效,因此是臨時的。
查看防火牆的運行狀態
firewall-cmd --state
systemctl status firewalld
查看防火牆的配置狀況
firewall-cmd --list-all
應急命令(一鍵斷網)
firewall-cmd --panic-on #拒絕全部流量,遠程鏈接會當即斷開,只有本地能登錄 firewall-cmd --panic-off #取消應急模式,但須要重啓firewalld後才能夠遠程ssh firewall-cmd --query-panic #查看是否爲應急模式
添加服務和端口以及協議
firewall-cmd --add-service=<service name> #添加服務 firewall-cmd --remove-service=<service name> #移除服務 firewall-cmd --add-port=<port>/<protocol> #添加端口/協議(TCP/UDP) firewall-cmd --remove-port=<port>/<protocol> #移除端口/協議(TCP/UDP) firewall-cmd --list-ports #查看開放的端口 firewall-cmd --add-protocol=<protocol> #容許協議 (例:icmp,即容許ping) firewall-cmd --remove-protocol=<protocol> #取消協議 firewall-cmd --list-protocols #查看容許的協議
指定某IP或網段的流量經過
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip/netmask>" accept" firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" accept"
#表示容許來自192.168.2.1的全部流量
指定IP時指定協議
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" protocol value="<protocol>" accept" firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" protocol value="icmp" accept"
#容許192.168.2.208主機的icmp協議,即容許192.168.2.208主機ping
容許指定ip訪問指定服務
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" service name="<service name>" accept" firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="ssh" accept" #容許192.168.2.208主機訪問ssh服務
容許指定ip訪問指定端口
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" port protocol="<port protocol>" port="<port>" accept" firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" port protocol="tcp" port="22" accept" #容許192.168.2.1主機訪問22端口
禁止IP和網段
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" reject" #禁止192.168.2.0/24網段的主機訪問22端口。
本地端口轉發:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.10/32 forward-port port=80 to-port=22 protocol=tcp accept'
目標地址轉發:
firewall-cmd --permanent --add-masquerade firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.10/32 forward-port port=80 to-port=80 protocol=tcp to-addr=172.25.0.254 accept'
要使用常規的firewall-cmd命令爲區域配置假裝,使用下列語法:
firewall-cmd --permanent --zone=<ZONE> --add-masquerade
這將假裝知足如下條件的任何包從該區域的源(接口及子網)中定義的客戶端發送到防火牆且未尋址到防火牆自身的包,即該區域源的數據包的目標IP不是防火牆自身的IP,都將映射成防火牆的IP。
要在更大程度上控制要進行假裝的客戶端,還可使用富規則。
firewall-cmd --permanent --zone=<ZONE> --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 masquerade'
以上不少純屬我的在學習iptables時的筆記和自行拓展內容,若是有不許確之處還但願你們指出!!!
望你們評論交流!!!