集成指南)
1. 環(huán)境準(zhǔn)備與依賴(lài)安裝在CentOS 7系統(tǒng)上部署mitmproxy前需要確?;A(chǔ)環(huán)境完備。我推薦使用Miniconda作為Python環(huán)境管理器它能有效解決多版本Python和依賴(lài)隔離的問(wèn)題。以下是具體操作步驟1.1 系統(tǒng)基礎(chǔ)依賴(lài)安裝首先更新系統(tǒng)并安裝編譯工具鏈y(cè)um update -y yum groupinstall -y Development Tools yum install -y openssl-devel bzip2-devel libffi-devel這些基礎(chǔ)依賴(lài)包含了GCC編譯器、OpenSSL開(kāi)發(fā)庫(kù)等必要組件。特別是libffi-devel它是mitmproxy核心依賴(lài)cryptography的編譯必需品。我曾經(jīng)在3臺(tái)不同配置的CentOS 7機(jī)器上測(cè)試缺少這些依賴(lài)會(huì)導(dǎo)致后續(xù)pip安裝失敗。1.2 Python環(huán)境配置建議使用Miniconda創(chuàng)建獨(dú)立環(huán)境wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3 echo export PATH/opt/miniconda3/bin:$PATH /etc/profile source /etc/profile conda create -n mitm python3.8 -y conda activate mitm選擇Python 3.8版本是因?yàn)樵趯?shí)測(cè)中mitmproxy 9.x版本在此環(huán)境下表現(xiàn)最穩(wěn)定。太新的Python版本可能遇到依賴(lài)兼容性問(wèn)題。2. mitmproxy核心安裝2.1 使用國(guó)內(nèi)鏡像加速安裝激活conda環(huán)境后使用阿里云鏡像安裝pip install mitmproxy9.0.1 redis pymongo -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com這里明確指定mitmproxy版本是因?yàn)樽钚掳婵赡艽嬖谖粗嫒菪詥?wèn)題9.0.1版本經(jīng)過(guò)長(zhǎng)期生產(chǎn)驗(yàn)證配套的addon開(kāi)發(fā)接口穩(wěn)定重要提示若安裝過(guò)程中出現(xiàn)error: command gcc failed說(shuō)明未正確安裝開(kāi)發(fā)工具鏈需要返回1.1節(jié)補(bǔ)全依賴(lài)。2.2 安裝驗(yàn)證與故障排查驗(yàn)證安裝是否成功mitmproxy --version預(yù)期輸出應(yīng)類(lèi)似Mitmproxy: 9.0.1 Python: 3.8.18 OpenSSL: OpenSSL 1.1.1k FIPS 25 Mar 2021常見(jiàn)問(wèn)題解決方案libffi缺失錯(cuò)誤重新安裝libffi-devel后重建Python虛擬環(huán)境密碼學(xué)組件編譯失敗先單獨(dú)安裝pip install cryptography3.3.2證書(shū)驗(yàn)證失敗臨時(shí)關(guān)閉SSL驗(yàn)證pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org3. 服務(wù)部署與配置3.1 工作目錄結(jié)構(gòu)規(guī)劃建議采用以下目錄結(jié)構(gòu)/home/work/ ├── job/ │ └── nlp/ │ └── mitp/ │ ├── mitm.py # 主腳本 │ ├── config/ # 配置文件 │ └── logs/ # 日志目錄創(chuàng)建目錄并設(shè)置權(quán)限mkdir -p /home/work/job/nlp/mitp/{config,logs} chown -R nobody:nobody /home/work/job/nlp/mitp chmod 755 /home/work/job/nlp/mitp3.2 代理服務(wù)啟動(dòng)測(cè)試典型啟動(dòng)命令/opt/miniconda3/envs/mitm/bin/python \ /opt/miniconda3/envs/mitm/bin/mitmdump \ -s /home/work/job/nlp/mitp/mitm.py \ --ssl-insecure \ --set block_globalfalse \ --listen-port 8080 \ --mode transparent \ /home/work/job/nlp/mitp/logs/mitm.log 21 參數(shù)說(shuō)明--ssl-insecure允許自簽名證書(shū)--set block_globalfalse允許全局流量--mode transparent透明代理模式日志重定向便于問(wèn)題排查4. 系統(tǒng)服務(wù)集成4.1 systemd服務(wù)單元配置創(chuàng)建服務(wù)文件/etc/systemd/system/mitmproxy.service[Unit] Descriptionmitmproxy transparent proxy Afternetwork.target [Service] Usernobody Groupnobody EnvironmentPATH/opt/miniconda3/envs/mitm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin ExecStart/opt/miniconda3/envs/mitm/bin/mitmdump \ -s /home/work/job/nlp/mitp/mitm.py \ --ssl-insecure \ --set block_globalfalse \ --listen-port 8080 \ --mode transparent Restartalways RestartSec5 WorkingDirectory/home/work/job/nlp/mitp StandardOutputjournal StandardErrorjournal [Install] WantedBymulti-user.target關(guān)鍵配置要點(diǎn)使用nobody用戶(hù)運(yùn)行降低權(quán)限風(fēng)險(xiǎn)設(shè)置完整PATH包含conda環(huán)境路徑配置自動(dòng)重啟保障服務(wù)可用性日志輸出到systemd journal便于集中管理4.2 服務(wù)管理命令啟用并啟動(dòng)服務(wù)systemctl daemon-reload systemctl enable --now mitmproxy systemctl status mitmproxy驗(yàn)證服務(wù)健康狀態(tài)journalctl -u mitmproxy -f -n 505. 安全加固與優(yōu)化5.1 防火墻規(guī)則配置允許代理端口通信firewall-cmd --permanent --add-port8080/tcp firewall-cmd --reload5.2 性能調(diào)優(yōu)建議連接數(shù)限制在mitm.py中添加--set connection_limit100防止過(guò)載內(nèi)存優(yōu)化對(duì)于大流量場(chǎng)景設(shè)置--set stream_large_bodies1m線(xiàn)程模型高并發(fā)環(huán)境使用--set modeupstream:http://backend:port5.3 證書(shū)管理導(dǎo)出CA證書(shū)供客戶(hù)端安裝cp ~/.mitmproxy/mitmproxy-ca-cert.pem /home/work/job/nlp/mitp/config/ chmod 644 /home/work/job/nlp/mitp/config/mitmproxy-ca-cert.pem6. 運(yùn)維監(jiān)控方案6.1 基礎(chǔ)監(jiān)控實(shí)現(xiàn)使用以下腳本定時(shí)檢查服務(wù)狀態(tài)#!/bin/bash if ! pgrep -f mitmdump /dev/null; then systemctl restart mitmproxy echo $(date): mitmproxy restarted /var/log/mitm_monitor.log fi添加到crontab(crontab -l 2/dev/null; echo */5 * * * * /usr/local/bin/mitm_monitor.sh) | crontab -6.2 日志分析技巧使用journalctl進(jìn)行高級(jí)日志過(guò)濾journalctl -u mitmproxy --since 1 hour ago | grep -E error|fail|exception對(duì)于高流量場(chǎng)景建議添加日志輪轉(zhuǎn)配置/etc/logrotate.d/mitmproxy/home/work/job/nlp/mitp/logs/*.log { daily missingok rotate 7 compress delaycompress notifempty create 640 nobody nobody }在實(shí)際部署過(guò)程中我發(fā)現(xiàn)通過(guò)systemd集成的方式比直接nohup啟動(dòng)更便于管理。特別是在服務(wù)器意外重啟后服務(wù)能自動(dòng)恢復(fù)。建議定期檢查證書(shū)有效期默認(rèn)1年可通過(guò)mitmproxy --cert-info查看。對(duì)于需要處理HTTPS流量的場(chǎng)景務(wù)必確??蛻?hù)端安裝了CA證書(shū)否則會(huì)出現(xiàn)SSL警告中斷連接。