Debian 10에서 SSL 범핑을 사용하여 Squid 투명 프록시 설정

Debian 10에서 SSL 범핑을 사용하여 Squid 투명 프록시 설정

데비안 10은 오징어를 투명 프록시로 사용합니다. 이제 SSL을 추가하고 싶습니다.

# apt-get install openssl
# mkdir -p /etc/squid/cert
# cd /etc/squid/cert
# openssl req -new -newkey rsa:4096 -sha256 -days 365 -nodes -x509 -keyout myCA.pem -out myCA.pem
# openssl x509 -in myCA.pem -outform DER -out myCA.der
# 

# iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to 192.168.1.51:3129
# iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j REDIRECT --to-port 3129
# iptables-save > /etc/iptables/rules.v4

질문 1: 이제 내가 읽은 내용에 따르면 다음에는 다음을 수행해야 합니다.

/usr/lib/squid/security_file_certgen -c -s /var/cache/squid/ssl_db -M 4MB

security_file_certgen하지만 내 시스템에서는 찾을 수 없습니다.

질문 2: 이제 다음을 추가하면 다음과 같습니다 squid.conf.

https_port 3129 intercept ssl-bump cert=/etc/squid/cert/myCA.pem generate-host-certificates=on

그런 다음 Squid가 시작되지 않습니다.

2020/10/07 14:09:27| FATAL: Unknown https_port option 'ssl-bump'.
2020/10/07 14:09:27| FATAL: Bungled /etc/squid/squid.conf line 5: https_port 3129 int
2020/10/07 14:09:27| Squid Cache (Version 4.6): Terminated abnormally.
CPU Usage: 0.017 seconds = 0.017 user + 0.000 sys
Maximum Resident Size: 57792 KB
Page faults with physical i/o: 0
FATAL: Bungled /etc/squid/squid.conf line 5: https_port 3129 intercept ssl-bump cert=
squid.service: Control process exited, code=exited, status=1/FAILURE
squid.service: Failed with result 'exit-code'.
Failed to start Squid Web Proxy Server.

squid -v포함되지 --enable-ssl-crtd도 포함되지도 않음 을 확인했지만 --with-openssl어떻게 해야 할지 모르겠습니다.

고쳐 쓰다

이 글을 쓰는 시점에는 인터넷의 모든 가이드가 최신 버전이 아닙니다. https://wiki.squid-cache.org/Features/SslBump ssl-bump
다음으로 대체됨 https://wiki.squid-cache.org/Features/BumpSslServerFirst server-first 그리고 server-first 다음으로 대체되었습니다. https://wiki.squid-cache.org/Features/SslPeekAndSplice peek-n-splice.

이것이 효과가 있기를 바랍니다. 시작하겠습니다.https://serverfault.com/questions/743483/transparent-http-https-domain-filtering-proxy :

https_port 3129 intercept ssl-bump
ssl_bump peek all
ssl_bump splice all

하지만:

2020/10/08 09:57:49| FATAL: Unknown https_port option 'ssl-bump'.
2020/10/08 09:57:49| FATAL: Bungled /etc/squid/squid.conf line 6: https_port 3129 int
2020/10/08 09:57:49| Squid Cache (Version 4.6): Terminated abnormally.
CPU Usage: 0.017 seconds = 0.008 user + 0.008 sys
Maximum Resident Size: 57152 KB
Page faults with physical i/o: 0
FATAL: Bungled /etc/squid/squid.conf line 6: https_port 3129 intercept ssl-bump
squid.service: Control process exited, code=exited, status=1/FAILURE
squid.service: Failed with result 'exit-code'.
Failed to start Squid Web Proxy Server.

업데이트: SSL을 사용하여 Squid 컴파일하기

# cd ~
# mkdir squid-build
# cd squid-build
# apt-get install openssh-server net-tools
# apt-get install openssl devscripts build-essential fakeroot libdbi-perl libssl-dev# libssl1.0-dev
# apt-get install dpkg-dev
# apt-get source squid
# apt-get build-dep squid
# cd squid-4.6/
# vi debian/rules
# dpkg-source --commit

debian/rules파일 에 플래그 추가 DEB_CONFIGURE_EXTRA_FLAGS:

--with-default-user=proxy \
--enable-ssl \
--enable-ssl-crtd \
--with-openssl \
--disable-ipv6

...그리고 빌드...

# debuild -us -uc

...설치하고...

# cd ..
# pwd 
/root/squid-build
# mv squid3*.deb squid3.deb.NotIncluded
# dpkg -i *.deb

그러나 아직 아무것도 없습니다 ssl_crtd.

이미 이름을 바꾸셨나요 security_file_certgen? (https://bugzilla.redhat.com/show_bug.cgi?id=1397644)

업데이트: 오징어 컴파일하기

HTTP용 Squid를 컴파일하고 실행했지만 HTTPS로 무엇을 해야할지 모릅니다. 분명히 다른 사람도 마찬가지입니다. 가능하지 않나요? 이것은 인증서와 관련된 것 같습니다 squid.conf.

답변1

나는 오징어를 로컬 캐싱 프록시로 사용하고 있으므로 이것은 귀하의 질문에 대한 직접적인 대답이 아닙니다. 어쨌든, 귀하의 문제가 제가 필요로 했던 문제와 가장 가까웠기 때문에 여기에 게시했으며 이제 문제를 해결했으므로 공유하고 싶습니다.

Debian 11/Bullseye에서 설치하려는 패키지는 다음과 같습니다.오징어 openssl(Squid v4.x 컴파일 --with-openssl).

apt install -y squid-openssl

그런 다음 (자체 서명된) 신뢰할 수 있는 CA 인증서를 설정합니다.

CERT_D=/etc/squid/cert
CERT=$CERT_D/squid_proxyCA.pem
rm -rf $CERT
mkdir -p $CERT_D
# Generate local self-signed CA certificate/key (in the same file)
openssl req -new -newkey rsa:4096 -sha256 -days 365 -nodes -x509 -keyout $CERT -out $CERT
chown -R proxy:proxy $CERT_D
chmod 0400 $CERT

# add squid_proxyCA cert to system so it's trusted by default
CA_CERT_D=/usr/local/share/ca-certificates
rm -rf $CA_CERT_D/*
mkdir -p $CA_CERT_D
openssl x509 -inform PEM -in $CERT -out $CA_CERT_D/squid_proxyCA.crt
update-ca-certificates

인증서를 동적으로 생성하도록 Squid를 구성합니다.

/usr/lib/squid/security_file_certgen -c -s /var/spool/squid/ssl_db -M 4MB
chown -R proxy:proxy /var/spool/squid

그런 다음 내가 가진 것은 다음과 같습니다 /etc/squid/squid.conf(매우 최소한이며 localhost의 연결만 허용하고 IPv4에서만 수신 대기합니다).

acl SSL_ports port 443

acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 1025-65535  # unregistered ports

acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager

http_access allow purge localhost
http_access deny purge

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access allow localhost
http_access deny all

http_port 127.0.0.1:3128 ssl-bump cert=/etc/squid/cert/squid_proxyCA.pem generate-host-certificates=on options=NO_SSLv3,NO_TLSv1,NO_TLSv1_1,SINGLE_DH_USE,SINGLE_ECDH_USE
ssl_bump bump all

coredump_dir /var/spool/squid
logfile_rotate 0

refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern .       0   20% 4320

cache_dir ufs /var/spool/squid 200 16 256

마지막으로 오징어를 다시 시작하세요.

systemctl reload squid

언급할 가치가 있는 또 다른 사항은 프록시 URL을 http://127.0.0.1:3028다음 용도로 사용해야 한다는 것입니다.둘 다이것 http_proxy,그리고( https_proxy알아채다http-아니요; https 프록시로 사용되는 경우에도 마찬가지입니다. Squid는 https와 함께 사용되는 경우 TLS/SSL을 사용하도록 연결을 업그레이드합니다.

답변2

# apt-get install openssl
# mkdir -p /etc/squid/cert
# cd /etc/squid/cert
# openssl req -new -newkey rsa:4096 -sha256 -days 365 -nodes -x509 -keyout myCA.pem -out myCA.pem
# openssl x509 -in myCA.pem -outform DER -out myCA.der
# chown -R proxy:proxy /etc/squid/cert
# chmod 700 /etc/squid/cert

# /usr/lib/squid/security_file_certgen -c -s /var/spool/squid/ssl_db -M 4MB
# chown -R proxy:proxy /var/spool/squid/ssl_db/

그리고 squid.conf:

https_port 3129 intercept ssl-bump cert=/etc/squid/cert/myCA.pem generate-host-certificates=on dynamic_cert_mem_cache_si
ze=4MB
ssl_bump peek all
ssl_bump splice all

가로채기의 경우:

iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to 192.168.1.51:3129
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j REDIRECT --to-port 3129

(이것은 br0내 내부 네트워크입니다.)

다음은 가장 일반적으로 캐시된 도메인을 보는 명령입니다. SSL이 비어 있는 것으로 나타납니다.

awk 'BEGIN {FS="[ ]+"}; {print $7}' < /var/log/squid/access.log | awk 'BEGIN {FS="/"}; {print $3}' | sort | uniq -c |sort -k1,1nr -k2,2 | head

답변3

귀찮게 하지 마세요. 시간 낭비입니다.

  • 엄밀히 말하면 이것은중간 사람공격하고,
  • 캐시 적중 횟수는 미미합니다(브라우저 캐시가 이미 Google 로고 등을 잘 처리하고 있는 것 같습니다).

관련 정보