firewalld詳解
注:為了便於查看,我把iptables和firewlld的使用總結文檔放到了這個鏈接(下載),這個文檔如果有新的內容和更正,我會及時更新。
有需要可以直接下載查看,應該比在博客(博客做很多格式太耗費時間了)上看到的格式要友好一些。
說明:個人認為此處文章適合已經對firewalld有一定了解,並且希望對實用操作有一篇總結性的文章來方便查閱的受眾,
或者本來對firewalld沒有多少了解,但是想系統地了解firewalld及其一些常用操作,拿來就能用的受眾。
=====================================華麗的分割線=====================================
目錄:
=====================================華麗的分割線=====================================
說明:在RHEL7系列中,默認使用firewalld作為防火牆,iptables默認是關閉的(stop),
要使用firewalld建議先關閉並禁用老版本的iptables,ip6tables和ebtables。
systemctl mask iptables
systemctl mask ip6tables
systemctl mask ebtables
systemctl enable firewalld
1 區域概念
在firewalld中引入了區域的概念,可以簡單理解為一些配置好策略的模板,直接應用即可,如果是學網絡的,
應該很能理解,比如華為的防火牆,華三的防火牆這些,都是有這種概念的,這里就不詳細解釋什么是區域了。
2 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
3 直接規則
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
4 firewalld防火牆富規則
富規則一般為了精確控制,用得比較多,所以這里將重點講解
4.1 富規則常用的options
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 --也能列出存在的富規則
4.2 富規則language語法
規則的幾乎每個單一元素都能夠以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
4.3 一些常用配置規則
4.3.1 規則排序
一旦向某個區域(一般是指防火牆)中添加了多個規則, 規則的排序便會在很大程度上影響防火牆的行為。
對於所有區域, 區域內規則的基本排序是相同的。
1.為該區域設置的任何端口轉發和偽裝規則。
2.為該區域設置的任何記錄規則。
3.為該區域設置的任何允許規則。
4.為該區域設置的任何拒絕規則。
在所有情況下, 第一個匹配項都將勝出。如果區域中的任何規則與包均不匹配 ,那么通常會拒絕該包
但是區域可能具有不同默認值;例如,可信區域將接受任何不匹配的包。此外,在匹配某個記錄規則后,將繼續正常處理包。
直接規則是個例外。對於大部分直接規則,將首先進行解析,然后再由firewalld進行任何其他處理 ,
但是直接規則語法允許管理員在任何區域中的任何位置插入任何規則。
4.3.2 測試和調試
為了便於測試和調試 幾乎所有規則都可以與超時一起添加到運行時配置。
當包含超時的規則到防火牆時,計時器便針對該規則開始倒計時。
一旦規則的計時器達到零秒,便從運行時配置中刪除該規則。
在使用遠程防火牆時,使用超時會是一種極其有用的工具,特別是在測試更復雜的規則集時。
如果規則有效,則管理員可以再次添加該規則,但使用--permanent選項(或者至少不包含超時)。
如果規則沒有按預期運行,甚至可能將管理員鎖定而使其無法進入系統,那么規則將被自動刪除,
以允許管理員繼續其工作。通過在啟用規則的firewall-cmd的結尾添加--timeout=<timeinseconds>即可向運行時規則中添加超時。
4.3.3 使用富規則進行日志記錄
調試或監控防火牆時,記錄巳接受或巳拒絕的連接很有用。
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 的,常常時間控制會不精准。
4.3.4 批量加端口
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
4.4 一些配置示例
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
5 firewalld的NAT和端口轉發
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
6 firewalld自定義區域和服務
6.1 自定義的區域
參照/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>
6.2 自定義服務
自定義服務可以讓防火牆配置更為簡便,能夠直接使用服務名來進行策略配置
參照/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>
7 firewalld的一些實用操作
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時的筆記和自行拓展內容,如果有不准確之處還希望大家指出!!!
望大家評論交流!!!