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 python=3.8 -y conda activate mitm选择Python 3.8版本是因为在实测中,mitmproxy 9.x版本在此环境下表现最稳定。太新的Python版本可能遇到依赖兼容性问题。
2. mitmproxy核心安装
2.1 使用国内镜像加速安装
激活conda环境后,使用阿里云镜像安装:
pip install mitmproxy==9.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 cryptography==3.3.2 - 证书验证失败:临时关闭SSL验证
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org
3. 服务部署与配置
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_global=false \ --listen-port 8080 \ --mode transparent \ >> /home/work/job/nlp/mitp/logs/mitm.log 2>&1 &参数说明:
--ssl-insecure:允许自签名证书--set block_global=false:允许全局流量--mode transparent:透明代理模式- 日志重定向便于问题排查
4. 系统服务集成
4.1 systemd服务单元配置
创建服务文件/etc/systemd/system/mitmproxy.service:
[Unit] Description=mitmproxy transparent proxy After=network.target [Service] User=nobody Group=nobody Environment="PATH=/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_global=false \ --listen-port 8080 \ --mode transparent Restart=always RestartSec=5 WorkingDirectory=/home/work/job/nlp/mitp StandardOutput=journal StandardError=journal [Install] WantedBy=multi-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-port=8080/tcp firewall-cmd --reload5.2 性能调优建议
- 连接数限制:在mitm.py中添加
--set connection_limit=100防止过载 - 内存优化:对于大流量场景,设置
--set stream_large_bodies=1m - 线程模型:高并发环境使用
--set mode=upstream:http://backend:port
5.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警告中断连接。