使用 SSH 通过 Squid 与 SSL 碰撞连接到 Git

Posted

技术标签:

【中文标题】使用 SSH 通过 Squid 与 SSL 碰撞连接到 Git【英文标题】:Connect to Git using SSH through Squid with SSL bump 【发布时间】:2021-08-10 12:20:58 【问题描述】:

我的目标是设置 squid 代理以仅允许访问某些 git 存储库(路径)

我将 Squid 配置为使用 SSL Bump 跟踪并允许基于路径的一些 URL,我需要允许通过 SSH 进行 git clone,我的 squid 配置如下

http_access allow all
acl localnet src 0.0.0.1-0.255.255.255  # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8     # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10      # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16     # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12      # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16     # RFC 1918 local private network (LAN)
acl localnet src fc00::/7           # RFC 4193 local private network range
acl localnet src fe80::/10          # RFC 4291 link-local (directly plugged) machines
acl whitelist url_regex "/etc/squid/whitelist.txt"
acl SSL_ports port 443
acl SSL_ports port 22
acl Safe_ports port 80      # http
acl Safe_ports port 21      # ftp
acl Safe_ports port 22          # ssh
acl Safe_ports port 443     # https
acl ssh_port port 22 # ssh
http_access allow ssh_port
acl Safe_ports port 70      # gopher
acl Safe_ports port 210     # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280     # http-mgmt
acl Safe_ports port 488     # gss-http
acl Safe_ports port 591     # filemaker
acl Safe_ports port 777     # multiling http
acl CONNECT method CONNECT
acl all src 0.0.0.0/0
http_access allow all
http_access allow ssh_port
http_access deny CONNECT !SSL_ports
http_access deny all
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl_cert/myCA.pem  options=NO_SSLv2
sslcrtd_program /usr/local/squid/libexec/security_file_certgen -s /var/lib/ssl_db -M 4MB
always_direct allow all
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all
ssl_bump splice all
coredump_dir /var/spool/squid
refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern .       0   20% 4320
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
strip_query_terms off
coredump_dir /var/spool/squid
refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern .       0   20% 4320

在 Windows 上,我使用以下 openssh 客户端配置设置 mingw

Host github.com
ServerAliveInterval 60
IdentitiesOnly yes
ProxyCommand /usr/bin/corkscrew 192.10.2.84 3128 %h %p ~/.ssh/id_rsa
IdentityFile   ~/.ssh/id_rsa
User           github
ForwardAgent   yes

我假设 ~/.ssh/id_rsa 是 github ssh 密钥? 这个配置是对还是错?我不想将代理的 ssh 密钥放在客户端配置中

这是我的 git ssh 的输出

ssh git@github.com -Tvvv
OpenSSH_8.5p1, OpenSSL 1.1.1f  31 Mar 2020
debug1: Reading configuration data /home/developer/.ssh/config
debug1: /home/developer/.ssh/config line 1: Applying options for github.com
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/developer/.ssh/known_hosts'
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/developer/.ssh/known_hosts2'
debug1: Executing proxy command: exec /usr/bin/corkscrew 172.16.2.84 3128 github.com 22 ~/.ssh/id_rsa
debug1: identity file /home/developer/.ssh/id_rsa type 0
debug1: identity file /home/developer/.ssh/id_rsa-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.5
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535

【问题讨论】:

这个编程有什么关系?这是系统管理。 这是 git 相关的 当然,但并不是所有与 git 相关的东西都是编程。托管您自己的 git 服务器也不是主题,这看起来您正在对代理进行故障排除,而不是专门针对 git 的任何事情。而且我告诉你这不仅仅是为了强制执行一些任意规则:老实说,我认为你在 SE 网络中的其他网站上获得答案的机会更大。 我不知道是github的限制还是我错误配置了(代理/客户端),你会怎么做,我全神贯注?我真的卡住了 我强烈建议您不要尝试实现此过滤。损坏的代理(HTTP 代理、防病毒和防火墙软件、TLS 中间盒等)是 Git 的一个大问题,因为 Git 严重依赖 HTTPS 和 SSH 的标准功能,而代理会破坏该功能。您可能会破坏功能并降低安全性。不要这样做。 【参考方案1】:

将此行添加到配置中:

acl SSL_ports port 22

【讨论】:

以上是关于使用 SSH 通过 Squid 与 SSL 碰撞连接到 Git的主要内容,如果未能解决你的问题,请参考以下文章

如何从本地使用 SSL 加密连接到 AWS RDS?

RHEL7--第十六章 Squid

使用 Auth 将 pfsense Squid 代理连接到父 Bluecoat

如何通过 SSL 连接到 Amazon RDS?

无法使用应用程序网关通过 SSH 连接到规模集实例

Squid 代理服务器的构建与访问控制