(找到解決方案,請見下文...)
伺服器(CentOS 7)有多個公共IP,這些IP是透過常用的ifcfg-eth0:0
設定檔設定的並且運作正常。我正在嘗試適應firewalld(來自iptables)。我希望能夠為每個 IP 別名指定開放連接埠 - 使用 iptables,只需將目標 IP 設定為匹配連接埠所需的任何別名即可完成此操作。
我想法使用firewalld,我可以對每個介面應用不同的區域以達到相同的效果,但似乎我不能這樣做。
我們從以下開始:
# firewall-cmd --get-active-zones
public
interfaces: eth0 eth0:0
trusted
interfaces: eth1
public_web
我創建了一個我想要使用的新區域eth0:0
# firewall-cmd --permanent --new-zone=public_web
success
# firewall-cmd --permanent --zone=public_web --add-service=http
success
# firewall-cmd --permanent --zone=public_web --add-interface=eth0:0
success
# firewall-cmd --reload
success
但...
# firewall-cmd --get-active-zones
public
interfaces: eth0 eth0:0
trusted
interfaces: eth1
我嘗試了--remove-interface
,--change-interface
以及各種其他命令的各種順序,但eth0:0
不會讓步。我似乎無法在任何地方找到有關使用別名的任何文檔,所以我不確定這是否是實現我想要的目標的正確方法?
謝謝大家。
解決方案:
解決方案是在服務文件中使用該destination
標籤,每個服務只能使用一次。
假設您想要 87.98.256.512 上的連接埠 443,請將檔案複製一份https.xml
(建議您不要碰原件)到/etc/firewalld/services
,這裡我將使用https-admin.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>HTTPS for 87.98.256.512</short>
<description>...</description>
<port protocol="tcp" port="443"/>
<destination ipv4="87.98.256.512" />
</service>
然後
# firewall-cmd --permanent --zone=public --add-service=https-admin
success
# firewall-cmd --reload
success
# firewall-cmd --zone=public --list-services
http https-admin
最後用 iptables 確認這一點
Chain IN_public_allow (1 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 87.98.256.512 tcp dpt:443 ctstate NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ctstate NEW
請記住:destination
每項服務只有一個標籤,因此如果您有要求,只需製作多個服務即可。
答案1
整個介面別名功能是過去遺留下來的。它實際上並沒有創建一個單獨的介面。您已經很久不需要使用別名將多個 IP 指派給單一介面了。由於它不是“真實”接口,因此您的防火牆軟體無法將其視為真實接口。如果您使用該ip addr
命令,您將看到地址全部分配給主接口,並且 被eth0:0
簡單地視為該地址的標籤。
考慮到所有這些,我不完全確定您需要做什麼來調整防火牆。我懷疑您可能需要透過 IP 來指定端口,而不是透過 IP 位址和別名來指定。