【Azure 應用服務】App Service For Linux 如何在 Web 應用例項上住抓取網路日誌
阿新 • • 發佈:2021-10-25
問題描述
在App Service For Windows的環境中,我們可以通過ArmClient 工具傳送POST請求在Web應用的例項中抓取網路日誌,但是在App Service For Linux的環境中如何抓取網路包呢?
抓取Windows的網路包可參考博文:【應用服務 App Service】App Service中抓取網路日誌
問題解決
通過SSH方式登入到Linux例項,使用tcpdump的工具抓取網路包, 通過IP地址和埠443來進行過濾,生成的網路包寫入到tmp目錄下的appnetworktrace.pcap 檔案。 命令如下:
tcpdump -i any host <your app service inbound ip address> and tcp port 443-n -v -s 0 -w /tmp/appnetworktrace.pcap
- 如果在登入SSH的時候出現SSH CONNECTION CLOSE - Error: Timed out while waiting for handshakeError: connect ECONNREFUSED 錯誤,則是因為使用自定義容器的方式釋出的Docker映象中沒有啟動SSH。只需要根據官方文件啟動即可。
啟用 SSH
SSH 實現容器和客戶端之間的安全通訊。 為了使自定義容器支援 SSH,你必須將其新增到 Docker 映像本身。
1) 將sshd_config 檔案新增到儲存庫,如以下示例中所示。
Port 2222 ListenAddress 0.0.0.0 LoginGraceTime 180 X11Forwarding yes Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr MACs hmac-sha1,hmac-sha1-96 StrictModes yes SyslogFacility DAEMON PasswordAuthentication yes PermitEmptyPasswords no PermitRootLogin yes Subsystem sftpinternal-sftp
備註:此檔案配置 OpenSSH 並且必須包括以下項:
Port
必須設定為 2222。Ciphers
必須至少包含此列表中的一項:aes128-cbc,3des-cbc,aes256-cbc
。MACs
必須至少包含此列表中的一項:hmac-sha1,hmac-sha1-96
。
2) 向儲存庫新增 ssh_setup 指令碼檔案,以使用 ssh-keygen建立 SSH 金鑰。
#!/bin/sh if [ ! -f "/etc/ssh/ssh_host_rsa_key" ]; then # generate fresh rsa key ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa fi if [ ! -f "/etc/ssh/ssh_host_dsa_key" ]; then # generate fresh dsa key ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa fi if [ ! -f "/etc/ssh/ssh_host_ecdsa_key" ]; then # generate fresh ecdsa key ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t dsa fi if [ ! -f "/etc/ssh/ssh_host_ed25519_key" ]; then # generate fresh ecdsa key ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -N '' -t dsa fi #prepare run dir if [ ! -d "/var/run/sshd" ]; then mkdir -p /var/run/sshd fi
3) 在 Dockerfile 中,新增以下命令:
# Install OpenSSH and set the password for root to "Docker!". In this example, "apk add" is the install instruction for an Alpine Linux-based image. RUN apk add openssh \ && echo "root:Docker!" | chpasswd # Copy the sshd_config file to the /etc/ssh/ directory COPY sshd_config /etc/ssh/ # Copy and configure the ssh_setup file RUN mkdir -p /tmp COPY ssh_setup.sh /tmp RUN chmod +x /tmp/ssh_setup.sh \ && (sleep 1;/tmp/ssh_setup.sh 2>&1 > /dev/null) # Open port 2222 for SSH access EXPOSE 80 2222
4) 在容器的啟動指令碼中啟動 SSH 伺服器。
/usr/sbin/sshd
參考資料
為 Azure 應用服務配置自定義容器, 啟動SSH:https://docs.microsoft.com/zh-cn/azure/app-service/configure-custom-container?pivots=container-linux#enable-ssh
當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!