squid + ssl bump
Доброго дня. Ситуация такая - есть vps за бугром, есть домашняя сеть с ubuntu в качестве шлюза. Домашний шлюз и vps соединены openvpn туннелем. Хочется часть сайтов пускать через vps, так как есть ограничения и обходить их установкой на каждую машину vpn не подходит. А те ресурсы, которые не подпадают под «ограничения», чтобы работали напрямую.
squid подошел идеально, но, видимо, я его настроить нормально не могу и работает «кривенько». шлюз с ubuntu(далее просто ubuntu) имеет named, который форвардит запросы на 1.1.1.1 через туннель vps, чтобы в днс траф никто не лазил.
squid version:
squid --version
Squid Cache: Version 4.13
Service Name: squid
Ubuntu linux
This binary uses OpenSSL 1.1.1f 31 Mar 2020. For legal restrictions on distribution see https://www.openssl.org/source/license.html
configure options: '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--disable-silent-rules' '--libdir=${prefix}/lib/x86_64-linux-gnu' '--runstatedir=/run' '--disable-maintainer-mode' '--disable-dependency-tracking' 'BUILDCXXFLAGS=-g -O2 -fdebug-prefix-map=/home/builder/ubuntu20/build/squid/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now ' 'BUILDCXX=g++' '--with-build-environment=default' '--enable-build-info=Ubuntu linux' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--libexecdir=/usr/lib/squid' '--mandir=/usr/share/man' '--enable-inline' '--disable-arch-native' '--enable-async-io=8' '--enable-storeio=ufs,aufs,diskd,rock' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-icap-client' '--enable-ssl' '--enable-follow-x-forwarded-for' '--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos,wrapper' '--enable-auth-ntlm=fake,SMB_LM' '--enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,time_quota,unix_group,wbinfo_group' '--enable-security-cert-validators=fake' '--enable-storeid-rewrite-helpers=file' '--enable-url-rewrite-helpers=fake' '--enable-eui' '--enable-esi' '--enable-icmp' '--enable-zph-qos' '--enable-ecap' '--disable-translation' '--with-swapdir=/var/spool/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/run/squid.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-linux-netfilter' '--with-systemd' '--with-openssl' '--enable-ssl-crtd' 'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -fdebug-prefix-map=/home/builder/ubuntu20/build/squid/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security -Wall' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now ' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -fdebug-prefix-map=/home/builder/ubuntu20/build/squid/squid-4.13=. -fstack-protector-strong -Wformat -Werror=format-security'
на vps squid является parent proxy с конфигом:
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 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
shutdown_lifetime 5 seconds
dns_nameservers 1.1.1.1
http_port 3128
http_port 3129 intercept
https_port 1080 intercept cert=/etc/squid/cert/squidCA.pem ssl-bump
sslproxy_cert_error allow all
always_direct allow all
acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3
ssl_bump stare step2
ssl_bump bump step3
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB
access_log stdio:/var/log/squid/access.log squid
logfile_rotate 4
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
на ubuntu пакеты с 443 и 80-ых портов с помощью правил nftables перекидываются на squid:
table nat {
chain prerouting {
ip saddr 10.0.0.0/24 ip daddr != 10.0.0.0/24 tcp dport 80 counter redirect to 3129 comment "HTTP traffic"
ip saddr 10.0.0.0/24 ip daddr != 10.0.0.0/24 tcp dport 443 counter redirect to 3130 comment "HTTPS traffic"
}
}
на ubuntu squid настроен на просмотр доменов и в зависимости от домена: либо пускать напрямую запросы, либо через parent squid на vps:
acl SSL_ports port 443
acl SSL_ports port 1012 # for badssl.comm
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1012 # for badssl.com
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 localnet src 10.0.0.0/24
dns_nameservers 127.0.0.1
debug_options ALL,2 28,9
shutdown_lifetime 5 seconds
acl rkn_domain dstdomain .ya.ru .facebook.com .instagram.com .mail.ru .fbcdn.net .linkedin.com
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
icp_access deny all
htcp_access deny all
http_port 10.0.0.1:3128
http_port 10.0.0.1:3129 intercept
https_port 10.0.0.1:3130 intercept ssl-bump \
options=ALL:NO_SSLv3:NO_TLSv1:NO_TLSv1_1:NO_TLSv1_2 \
connection-auth=off \
generate-host-certificates=on \
dynamic_cert_mem_cache_size=4MB \
tls-cert=/etc/squid/sslcert/squid.pem \
tls-key=/etc/squid/sslcert/squid.key
sslproxy_cert_error allow all
acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl step3 at_step SslBump3
ssl_bump stare step2
ssl_bump bump step3
# http://www.squid-cache.org/Doc/config/cache_peer/
# proxy icp
# hostname type port port options
# -------------------- -------- ----- ----- -----------
cache_peer OPENVPN_IP parent 1080 0 proxy-only no-query default no-digest no-delay no-netdb-exchange
cache_peer_access OPENVPN_IP allow rkn_domain
cache_peer_access OPENVPN_IP deny !rkn_domain
never_direct allow rkn_domain
logformat self %{%Y.%m.%d/%H:%M:%S}tl %Ss %>Hs %rm %ru %Sh/%<A
logformat squid_full %ts.%03tu %6tr %>A %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<A %mt
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 4MB
access_log stdio:/var/log/squid/access_rkn.log squid_full rkn_domain
access_log stdio:/var/log/squid/access.log squid_full
#access_log none
cache_log /dev/null
# logfile_rotate 4
logfile_rotate 0
# Disable via and x-forwarded-for headers
via off
forwarded_for delete
netdb_filename none
Связка работает для instagram.com как нужно, но вот для linkedin.com не работает.
Когда я вбиваю linkedin.com на машине из сети, то запись появляется в /var/log/squid/access.log, то есть либо домен не подошел под .linkedin.com
,либо может squid не смог домен вытащить?
1653466922.169 30000 10.0.0.54 TCP_TUNNEL/200 0 CONNECT 13.107.42.14:443 - ORIGINAL_DST/13.107.42.14 -
- ping
PING linkedin.com (13.107.42.14) 56(84) bytes of data.
Ну и 2-ой момент, не могу понять какой формат логов указать, чтобы мне в логах писались домены, а не IP адреса. Буду благодарен за советы!