1. 环境准备与依赖安装在CentOS 7系统上部署mitmproxy前需要确保基础环境完备。我推荐使用Miniconda作为Python环境管理器它能有效解决多版本Python和依赖隔离的问题。以下是具体操作步骤1.1 系统基础依赖安装首先更新系统并安装编译工具链yum update -y yum groupinstall -y Development Tools yum install -y openssl-devel bzip2-devel libffi-devel这些基础依赖包含了GCC编译器、OpenSSL开发库等必要组件。特别是libffi-devel它是mitmproxy核心依赖cryptography的编译必需品。我曾经在3台不同配置的CentOS 7机器上测试缺少这些依赖会导致后续pip安装失败。1.2 Python环境配置建议使用Miniconda创建独立环境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版本是因为在实测中mitmproxy 9.x版本在此环境下表现最稳定。太新的Python版本可能遇到依赖兼容性问题。2. mitmproxy核心安装2.1 使用国内镜像加速安装激活conda环境后使用阿里云镜像安装pip install mitmproxy9.0.1 redis pymongo -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com这里明确指定mitmproxy版本是因为最新版可能存在未知兼容性问题9.0.1版本经过长期生产验证配套的addon开发接口稳定重要提示若安装过程中出现error: command gcc failed说明未正确安装开发工具链需要返回1.1节补全依赖。2.2 安装验证与故障排查验证安装是否成功mitmproxy --version预期输出应类似Mitmproxy: 9.0.1 Python: 3.8.18 OpenSSL: OpenSSL 1.1.1k FIPS 25 Mar 2021常见问题解决方案libffi缺失错误重新安装libffi-devel后重建Python虚拟环境密码学组件编译失败先单独安装pip install cryptography3.3.2证书验证失败临时关闭SSL验证pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org3. 服务部署与配置3.1 工作目录结构规划建议采用以下目录结构/home/work/ ├── job/ │ └── nlp/ │ └── mitp/ │ ├── mitm.py # 主脚本 │ ├── config/ # 配置文件 │ └── logs/ # 日志目录创建目录并设置权限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 代理服务启动测试典型启动命令/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 参数说明--ssl-insecure允许自签名证书--set block_globalfalse允许全局流量--mode transparent透明代理模式日志重定向便于问题排查4. 系统服务集成4.1 systemd服务单元配置创建服务文件/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关键配置要点使用nobody用户运行降低权限风险设置完整PATH包含conda环境路径配置自动重启保障服务可用性日志输出到systemd journal便于集中管理4.2 服务管理命令启用并启动服务systemctl daemon-reload systemctl enable --now mitmproxy systemctl status mitmproxy验证服务健康状态journalctl -u mitmproxy -f -n 505. 安全加固与优化5.1 防火墙规则配置允许代理端口通信firewall-cmd --permanent --add-port8080/tcp firewall-cmd --reload5.2 性能调优建议连接数限制在mitm.py中添加--set connection_limit100防止过载内存优化对于大流量场景设置--set stream_large_bodies1m线程模型高并发环境使用--set modeupstream:http://backend:port5.3 证书管理导出CA证书供客户端安装cp ~/.mitmproxy/mitmproxy-ca-cert.pem /home/work/job/nlp/mitp/config/ chmod 644 /home/work/job/nlp/mitp/config/mitmproxy-ca-cert.pem6. 运维监控方案6.1 基础监控实现使用以下脚本定时检查服务状态#!/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进行高级日志过滤journalctl -u mitmproxy --since 1 hour ago | grep -E error|fail|exception对于高流量场景建议添加日志轮转配置/etc/logrotate.d/mitmproxy/home/work/job/nlp/mitp/logs/*.log { daily missingok rotate 7 compress delaycompress notifempty create 640 nobody nobody }在实际部署过程中我发现通过systemd集成的方式比直接nohup启动更便于管理。特别是在服务器意外重启后服务能自动恢复。建议定期检查证书有效期默认1年可通过mitmproxy --cert-info查看。对于需要处理HTTPS流量的场景务必确保客户端安装了CA证书否则会出现SSL警告中断连接。
