ESXi 5.5 防火牆基礎操作

前言

預設情況下 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


查詢防火牆運作狀態:
# 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
# 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)。


也可以 啟用/停用 某些防火牆規則,甚至僅允許某些 IP 網段。



但是有特殊需求要開啟某些「自訂 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 中也可以看到剛才新增的防火牆規則。