前言
預設情況下 vSphere ESXi 防火牆是「啟動」並且採「白名單」策略,也就是僅「允許」的 Port 能夠通過,雖然在 vSphere Client 可以設定某些服務的 啟動/停止,但是若所要開啟的 Port 號「不在」預設清單時該如何手動開啟? 本文,便是練習一些 vSphere ESXi 防火牆的基礎操作,以及該如何手動開啟特殊 Port 號。實作環境
- VMware vSphere ESXi 5.5 (Build 1331820)
啟用/停用 防火牆
請開啟 vSphere ESXi 的 SSH 服務後,使用下列指令便可得知目前 ESXi Firewall 狀態,以及「啟用/停用」防火牆。詳細資訊請參考 VMware KB 2005284 - About the ESXi 5.x firewall。
查詢防火牆運作狀態:
停用 / 啟用 防火牆:
執行後,約需 2 ~ 3 分鐘後才會完全套用生效,因為要等原有的連線完成中斷連接的動作。
查詢防火牆運作狀態:
# esxcli network firewall get
Default Action: DROP //預設阻擋所有封包進入
Enabled: true //啟用防火牆
Loaded: true //載入防火牆規則
停用 / 啟用 防火牆:
執行後,約需 2 ~ 3 分鐘後才會完全套用生效,因為要等原有的連線完成中斷連接的動作。
# esxcli network firewall set --enabled false //停用防火牆
# esxcli network firewall get
Default Action: DROP
Enabled: false
Loaded: true
# esxcli network firewall set --enabled true //啟用防火牆
# esxcli network firewall get
Default Action: DROP
Enabled: true
Loaded: true
查詢連線及封包進出狀態
因為這幾天被 MSM (MegaRAID Storage Manager) 管理工具,搞得有點得不到頭緒的情況下,此時為了確認 MSM 工具是否有發出封包給 ESXi 主機,此時就可以靠下列的指令來協助除錯任務了。
查詢連線狀態:
透過下列指令可以查詢 vSphere ESXi 主機,目前的連線狀態及連接情況。詳細資訊請參考 VMware KB 2020669 - Troubleshooting network and TCP/UDP port connectivity issues on ESX/ESXi。
查詢封包進出狀態:
透過下列指令可以查詢 vSphere ESXi 主機,目前的封包進出狀態並且可以加上排除參數以利檢視 (排除 Port 22 / 53 的資訊)。詳細資訊請參考 VMware KB 1031186 - Capturing a network trace in ESXi using Tech Support Mode or ESXi Shell。
透過下列指令可以查詢 vSphere ESXi 主機,目前的連線狀態及連接情況。詳細資訊請參考 VMware KB 2020669 - Troubleshooting network and TCP/UDP port connectivity issues on ESX/ESXi。
# esxcli network ip connection list
tcp 0 0 127.0.0.1:8307 127.0.0.1:52577 ESTABLISHED 33952 newreno hostd-worker
tcp 0 0 127.0.0.1:52577 127.0.0.1:8307 ESTABLISHED 54044 newreno rhttpproxy-work
tcp 0 0 127.0.0.1:443 127.0.0.1:15979 ESTABLISHED 34244 newreno rhttpproxy-work
tcp 0 0 127.0.0.1:15979 127.0.0.1:443 ESTABLISHED 700353 newreno python
tcp 0 0 127.0.0.1:58523 127.0.0.1:8307 TIME_WAIT 0
tcp 0 0 127.0.0.1:43500 127.0.0.1:443 TIME_WAIT 0
tcp 0 0 127.0.0.1:5988 127.0.0.1:62964 FIN_WAIT_2 34934 newreno sfcb-HTTP-Daemo
tcp 0 0 127.0.0.1:62964 127.0.0.1:5988 CLOSE_WAIT 697295 newreno hostd-worker
透過下列指令可以查詢 vSphere ESXi 主機,目前的封包進出狀態並且可以加上排除參數以利檢視 (排除 Port 22 / 53 的資訊)。詳細資訊請參考 VMware KB 1031186 - Capturing a network trace in ESXi using Tech Support Mode or ESXi Shell。
# tcpdump-uw -v port not 22 and port not 53 | grep 192.168.8.171
tcpdump-uw: listening on vmk0, link-type EN10MB (Ethernet), capture size 96 bytes
192.168.8.171.50018 > 239.255.255.253.svrloc: UDP, length 55
esxi55.weithenn.org.svrloc > 192.168.8.171.50018: UDP, length 73
192.168.8.171.50019 > 239.255.255.253.svrloc: UDP, length 80
esxi55.weithenn.org.svrloc > 192.168.8.171.50019: UDP, length 727
192.168.8.171.50020 > 239.255.255.253.svrloc: UDP, length 94
esxi55.weithenn.org.svrloc > 192.168.8.171.50020: UDP, length 727
192.168.8.171.50021 > 239.255.255.253.svrloc: UDP, length 108
192.168.8.171.50022 > 239.255.255.253.svrloc: UDP, length 108
192.168.8.171.50023 > 239.255.255.253.svrloc: UDP, length 108
tcpdump-uw: pcap_loop: recvfrom: Interrupted system call
214 packets captured
214 packets received by filter
0 packets dropped by kernel
手動新增防火牆規則
預設情況下在 vSphere Client 介面,可以 啟動/停止 相關服務 (如 SSH)。但是有特殊需求要開啟某些「自訂 Port」時該如何處理? 以下將說明如何手動新增防火牆規則,將新增的防火牆規則置於最下方,而此次實作環境中原有的 Service ID 至 37,所以新增的防火牆規則為 38。詳細資訊請參考 VMware KB 2008226 - Creating custom firewall rules in VMware ESXi 5.x。
# cd /etc/vmware/firewall/
# cp service.xml service.xml.orig
# chmod 644 service.xml
# chmod +t service.xml
# vi service.xml
<!-- Weithenn Lab Open Port 16888 -->
<service id='0038'> //因預設規則最後一條為 37
<id>Weithenn Lab</id> //此新增防火牆規則名稱
<rule id='0000'>
<direction>inbound</direction> //封包方向為進入
<protocol>tcp</protocol> //TCP 通訊協定
<porttype>dst</porttype>
<port>16888</port> //Port Number 16888
</rule>
<rule id='0001' >
<direction>outbound</direction>
<protocol>tcp</protocol>
<porttype>dst</porttype>
<port>16888</port>
</rule>
<enabled>true</enabled>
<required>true</required>
</service>
完成防火牆規則修改後,接著恢復防火牆設定檔的原有檔案權限,並且重新載入防火牆規則 (以便套用生效) 後,查詢剛才自訂的防火牆規則是否作用。
# chmod 444 service.xml
# esxcli network firewall refresh
# esxcli network firewall ruleset list | grep Weithenn
Weithenn Lab true
# esxcli network firewall ruleset rule list | grep Weithenn
Weithenn Lab Inbound TCP Dst 16888 16888
Weithenn Lab Outbound TCP Dst 16888 16888
此時,再 vSphere Client 中也可以看到剛才新增的防火牆規則。