看板 Linux 關於我們 聯絡資訊
※ 引述《easytry (放空)》之銘言: : Centos7 Firewalld 在設定阻擋與允許來源ip失敗 : 想請教一下了解這塊的前輩們 : 狀況如下 : 在使用GUI模式設定時 : : 目的是要允許192.168.0.0/24 & 172.20.1.0/24 網段通過 , deny others : 以正常firewall來說 , 應該是允許192.168 與172.20 , 最後再加一筆deny all即可 : 但在Centos7 的firewalld 下卻不行 (by rich rules) : 還是其實跟本不是在rich rules下做? : 在rich rules下設定 , 不管怎麼設 , 都只吃deny all那筆 : 如果設為deny !172.20.1.0/24 , 的確會允許172.20.1.0/24 deny others : 但這狀況下也沒辦法再設定允許192.168.0.0/24 了 : 先感謝幫忙!!感恩! 這邊直接回文,原本推文內容我好像說錯,所以這邊重新回應一篇,不好意思 firewalld 本身底層還是使用 iptables,所以結合 iptables 的 chain 概念, 所以可能要先瞭解底層怎麼產生的。下面敘述前面省略 iptables 這個命令: -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j INPUT_direct -A INPUT -j INPUT_ZONES_SOURCE -A INPUT -j INPUT_ZONES -A INPUT_ZONES -i eth0 -g IN_public -A INPUT_ZONES -i eth1 -g IN_public -A INPUT_ZONES -g IN_public -A IN_public -j IN_public_log -A IN_public -j IN_public_deny -A IN_public -j IN_public_allow -A IN_public -p icmp -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited 整個來看,INPUT chains 最後順序 IN_public_log, IN_public_deny 與 IN_public_allow,最後跑拒絕存取。 1. 在 public zone 裡面,就你說的要允許某些 ip 或是拒絕某些 ip,我想 你大概這樣用? firewall-cmd --add-rich-rule="rule family=ipv4 \ source address=192.168.0.0/24 accept" firewall-cmd --add-rich-rule="rule family=ipv4 \ source address=10.0.0.0/8 reject" 那 accept 部分是放在 IN_public_allow 這個 chain, reject 部分放在 IN_public_deny。 那依據這個來看: -A IN_public -j IN_public_log -A IN_public -j IN_public_deny -A IN_public -j IN_public_allow -A INPUT -j REJECT --reject-with icmp-host-prohibited IN_public_log ---> IN_public_deny ---> IN_public_allow --> REJECT ALL 上面規則來說 reject 是多打的,因為最後就是都阻擋,所以只要新增 accept 部分就好。 那這樣用呢? firewall-cmd --add-rich-rule="rule family=ipv4 \ source address=192.168.0.0/24 reject" firewall-cmd --add-rich-rule="rule family=ipv4 \ source address=192.168.0.1 accept" 這兩行執行之後,其實 192.168.0.1 也無法連入,因為 reject 優先比較高 2. 依據你描述情況若有複雜需求,個人建議用傳統 iptables 來弄停用 firewalld 可能比較簡單,但若還是要用 firewalld 的話看起來就是 在 INPUT 的 INPUT_direct 這個 chain 動手腳,那語法大概是: firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 1 \ -s 192.168.0.1 -j ACCEPT 那就等於傳統直接呼叫 iptables 語法: iptables -I INPUT 1 -s 192.168.0.1 -j ACCEPT 3. 傳統 iptables 對你需求可能簡單多 iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT iptables -A INPUT -s 192.168.0.1 -j REJECT iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited 這樣就是允許 192.168.0.0/24,但是 192.168.0.1 卻例外被拒絕 提供給你參考. -- 如果真的愛一個作業系統 怎能不害怕不再能使用它 而我們必須接受現實 於是長大了 寂寞就是沒有了機會再用它 比沒有電腦還要寂寞 而那些點亮我們生命的作業系統 就彷彿電影中發生在暹邏的愛情故事 即使短暫使用也會刻骨銘心 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.39.204.146 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1517598790.A.CA6.html ※ 編輯: kenduest (114.39.204.146), 02/03/2018 03:19:52
ddtsatan: 推 02/03 07:20
easytry: 推 大感謝阿!! 謝謝您! 02/03 08:33