具有 IP 別名 (eth0:0) 的 Firewalld

具有 IP 別名 (eth0:0) 的 Firewalld

(找到解決方案,請見下文...)

伺服器(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 位址和別名來指定。

相關內容