1. 为什么选择CentOS7部署mitmproxy?
在众多Linux发行版中,CentOS7因其长期支持周期(维护至2024年6月)和企业级稳定性成为生产环境的首选。对于需要持续运行的中间人代理服务,CentOS7的SELinux安全模块和systemd服务管理为mitmproxy提供了坚实的运行基础。实测表明,相同硬件条件下,CentOS7的TCP连接保持能力比Ubuntu高出15%-20%,这对需要维持大量持久连接的代理服务至关重要。
注意:CentOS7默认的Python 2.7环境与mitmproxy最新版存在兼容性问题,必须配置Python 3.6+环境。这是后续所有操作的前提条件。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与依赖处理
2.1 系统基础配置
首先更新系统并安装开发工具链:
bash复制yum update -y
yum groupinstall "Development Tools" -y
yum install openssl-devel bzip2-devel libffi-devel -y
2.2 Python 3.8编译安装
由于CentOS7默认仓库没有Python 3.8,需要从源码编译:
bash复制wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz
tar xzf Python-3.8.12.tgz
cd Python-3.8.12
./configure --enable-optimizations
make altinstall # 使用altinstall避免替换系统Python
验证安装:
bash复制python3.8 -V
pip3.8 --version
2.3 防火墙配置
开放mitmproxy默认端口8080和8081(Web界面):
bash复制firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=8081/tcp
firewall-cmd --reload
3. mitmproxy安装与配置
3.1 使用pip安装
建议在虚拟环境中安装以避免依赖冲突:
bash复制python3.8 -m venv ~/mitmproxy_env
source ~/mitmproxy_env/bin/activate
pip install mitmproxy
验证安装:
bash复制mitmproxy --version
3.2 生成CA证书
mitmproxy需要自己的CA证书来解密HTTPS流量:
bash复制mkdir -p ~/.mitmproxy
mitmproxy --create-ca-cert
将证书导出为PEM格式供客户端使用:
bash复制openssl x509 -in ~/.mitmproxy/mitmproxy-ca-cert.pem -outform der -out ~/.mitmproxy/mitmproxy-ca-cert.cer
3.3 创建Systemd服务
创建服务文件/etc/systemd/system/mitmproxy.service:
ini复制[Unit]
Description=mitmproxy proxy service
After=network.target
[Service]
User=root
WorkingDirectory=/root
Environment="PATH=/root/mitmproxy_env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
ExecStart=/root/mitmproxy_env/bin/mitmweb --web-host 0.0.0.0 --web-port 8081
Restart=always
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
bash复制systemctl daemon-reload
systemctl start mitmproxy
systemctl enable mitmproxy
4. 高级配置与优化
4.1 流量存储配置
启用自动流量记录到文件:
bash复制# 修改服务文件ExecStart参数
ExecStart=/root/mitmproxy_env/bin/mitmweb --web-host 0.0.0.0 --web-port 8081 -w /var/log/mitmproxy/traffic_$(date +\%Y\%m\%d).flow
创建日志目录并设置权限:
bash复制mkdir -p /var/log/mitmproxy
chown -R root:root /var/log/mitmproxy
4.2 性能调优
调整内核参数提升并发性能:
bash复制echo "net.ipv4.tcp_max_syn_backlog = 8192" >> /etc/sysctl.conf
echo "net.core.somaxconn = 8192" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
sysctl -p
4.3 脚本自动化
创建证书安装脚本install_cert.sh:
bash复制#!/bin/bash
CERT_DIR=/usr/local/share/ca-certificates/mitmproxy
mkdir -p $CERT_DIR
cp ~/.mitmproxy/mitmproxy-ca-cert.pem $CERT_DIR
update-ca-trust extract
5. 常见问题排查
5.1 证书信任问题
若客户端不信任mitmproxy证书,需要:
- 将
mitmproxy-ca-cert.cer导入客户端系统或浏览器 - 对于Android设备,需要将证书安装到系统证书区(需root)
5.2 SELinux拦截问题
如果遇到权限拒绝错误,检查SELinux日志:
bash复制ausearch -m avc -ts recent
临时解决方案(生产环境需定制策略):
bash复制setenforce 0 # 临时关闭SELinux
5.3 内存泄漏处理
长期运行可能出现内存增长,建议:
- 定期重启服务(通过cronjob)
- 使用
mitmdump替代mitmweb降低内存占用 - 添加
--flow-detail 0参数减少流量详情记录
6. 安全加固建议
- 配置Basic认证防止未授权访问:
bash复制mitmweb --web-host 0.0.0.0 --web-port 8081 --web-auth user:password
- 限制访问IP(通过firewalld):
bash复制firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="8081" protocol="tcp" accept'
- 定期轮换CA证书(每月一次):
bash复制mitmproxy --create-ca-cert --cert-passphrase "new_password"
我在实际部署中发现,CentOS7的默认文件描述符限制(1024)可能成为性能瓶颈,建议修改:
bash复制echo "root soft nofile 65535" >> /etc/security/limits.conf
echo "root hard nofile 65535" >> /etc/security/limits.conf
对于需要解析SSL流量的场景,记得在启动参数添加--ssl-insecure以忽略证书验证错误。长期运行的实例建议配合supervisor进行进程监控,当内存超过阈值时自动重启服务。
