作者kenduest (小州)
看板Linux
標題Re: [問題] Centos7 firewalld GUI設定問題
時間Sat Feb 3 03:13:06 2018
※ 引述《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