龙空技术网

Linux Squid 透明代理http https配置

MacLex 161

前言:

当前兄弟们对“linux系统终端透明设置”大体比较关注,你们都想要学习一些“linux系统终端透明设置”的相关知识。那么小编在网上网罗了一些对于“linux系统终端透明设置””的相关知识,希望看官们能喜欢,大家一起来了解一下吧!

Centos7 Linux Squid 透明代理http https配置

Centos7 yum squid transparent https https

# cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core)

启用路由转发功能:

echo "net.ipv4.ip_forward = 1">>/etc/sysctl.conf sysctl -psysctl -w net.ipv4.ip_forward=1

直接yum安装

# yum -y install squid

查看版本:

# squid -vSquid Cache: Version 3.5.20Service Name: squidconfigure options:  '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-strict-error-checking' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,LDAP,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB,SMB_LM,getpwnam' '--enable-auth-ntlm=smb_lm,fake' '--enable-auth-digest=file,LDAP,eDirectory' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=file_userip,LDAP_group,time_quota,session,unix_group,wbinfo_group,kerberos_ldap_group' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,rock,ufs' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' '--disable-arch-native' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -fpie' 'LDFLAGS=-Wl,-z,relro  -pie -Wl,-z,relro -Wl,-z,now' 'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -fpie' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'

备份下默认squid.conf配置文件:

cat squid.conf|sed '/^#/d'|sed '/^$/d' > squid.default.conf

帮助文件中用得比较多的是-f -k

# squid -helpUsage: squid [-cdhvzCFNRVYX] [-n name] [-s | -l facility] [-f config-file] [-[au] port] [-k signal]       -a port   Specify HTTP port number (default: 3128).       -d level  Write debugging to stderr also.       -f file   Use given config-file instead of                 /etc/squid/squid.conf       -h        Print help message.       -k reconfigure|rotate|shutdown|restart|interrupt|kill|debug|check|parse                 Parse configuration file, then send signal to                 running copy (except -k parse) and exit.

直接贴一个我的最终配置,这玩意我也是反复测试折腾了好一中午的结果

# cat /etc/squid/squid.confacl localnet src 10.0.0.0/8	# RFC1918 possible internal networkacl localnet src 172.16.0.0/12	# RFC1918 possible internal networkacl localnet src 192.168.0.0/16	# RFC1918 possible internal networkacl localnet src fc00::/7       # RFC 4193 local private network rangeacl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machinesacl SSL_ports port 443acl Safe_ports port 443		# httpsacl Safe_ports port 21		# ftpacl Safe_ports port 443		# httpsacl CONNECT method CONNECThttp_access allow localnethttp_access allow localhosthttp_access allow allhttp_port 3127http_port 3128 transparenthttps_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/1_ key=/etc/squid/2_ /var/spool/squidrefresh_pattern ^ftp:		1440	20%	10080refresh_pattern ^gopher:	1440	0%	1440refresh_pattern -i (/cgi-bin/|\?) 0	0%	0refresh_pattern .		0	20%	4320

几个关键点说明alc可以自己去修改,我是为了方便线给了allow all

http_port 3127

http_port 3128 transparent

https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/1_ key=/etc/squid/2_

这三行都需要才能透明代理

其实通过正常的启动日志能够看到为什么要这么处理?

3127,3128,3128各承担的功能不一样

# tail -f /var/log/squid/cache.log2021/03/05 19:09:41 kid1| DNS Socket created at 0.0.0.0, FD 102021/03/05 19:09:41 kid1| Adding domain localdomain from /etc/resolv.conf2021/03/05 19:09:41 kid1| Adding nameserver 10.211.55.1 from /etc/resolv.conf2021/03/05 19:09:41 kid1| helperOpenServers: Starting 5/32 'ssl_crtd' processes2021/03/05 19:09:41 kid1| WARNING: No ssl_bump configured. Disabling ssl-bump on https_port [::]:31292021/03/05 19:09:41 kid1| HTCP Disabled.2021/03/05 19:09:41 kid1| Finished loading MIME types and icons.2021/03/05 19:09:41 kid1| Accepting HTTP Socket connections at local=[::]:3127 remote=[::] FD 22 flags=92021/03/05 19:09:41 kid1| Accepting NAT intercepted HTTP Socket connections at local=[::]:3128 remote=[::] FD 23 flags=412021/03/05 19:09:41 kid1| Accepting NAT intercepted HTTPS Socket connections at local=[::]:3129 remote=[::] FD 24 flags=41

如果没有3127那么日志告警:

kid1ERROR: No forward-proxy ports configured.

ssl-bump 这里应该是有个告警

自己检索解决吧。关于key的那块我是随便找了一个我自己的,免得自己用命令openssl去生成了

配置防火墙:

iptables防火墙简单设置下:

--flush -F [chain] Delete all rules in chain or all chain

iptables -F

iptables -F -t nat

上面两个都是清空对应rules

那么我们需要将局域网或者说需要代理的网段的请求转发到对应的3128和3129端口

局域网内网访问的80端口映射到squid服务器的3128端口 443映射到3129

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-ports 3129

注意上面为什么是eth0 因为我的测试主机在这个网段上10.211.55.3

# ip a 简化的eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

inet 10.211.55.3/24 brd 10.211.55.255 scope global noprefixroute dynamic eth0

查看下nat表

iptables -t nat --list-rules

为了测试,在我的另个主机上删除默认的路由,把路由指到我的这个squid主机上,

route del default gw 10.211.55.1route add default gw 10.211.55.3

几个日志:

/var/log/squid/access.log

/var/log/squid/cache.log

启动错误看报错,看日志就够了

# /usr/sbin/squid -f /etc/squid/squid.conf -k check

# /usr/sbin/squid -f /etc/squid/squid.conf -k reconfigure

启动

/usr/sbin/squid -f /etc/squid/squid.conf# netstat -nltp|grep squidtcp6       0      0 :::3129                 :::*                    LISTEN      5241/(squid-1)tcp6       0      0 :::3127                 :::*                    LISTEN      5241/(squid-1)tcp6       0      0 :::3128                 :::*                    LISTEN      5241/(squid-1)

也可以看下进程:

过程有的报错解决:

FATAL: The ssl_crtd helpers are crashing too rapidly, need help!

 1806  2021-03-05 15:52:29:::/usr/lib64/squid/ssl_crtd 1807  2021-03-05 15:52:48:::/usr/lib64/squid/ssl_crtd -c -s /var/lib/ssl_db 1808  2021-03-05 15:52:57:::chown squid:squid /var/lib/ssl_db

测试我直接走curl

curl -klv

curl -klv

nginx配置SSL后报错nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl"

因为最新版本不支持ssl on;这个配置已失效 使用listen 443 ssl;替代

++++++++++++++++++++++++++++++++插播一段配置nginx的相关,假如这里需要用nginx来实现代理++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

关键点ssl on @版本原因已经为use the "listen ... ssl"

centos7 root@parallels:/usr/local/nginx/conf/vhosts# cat forward.conf server {     listen                         3128 ssl;     access_log /usr/local/nginx/logs/proxy-access.log main;     error_log /usr/local/nginx/logs/error.log;        ssl_certificate      /usr/local/nginx/conf/sslkey/bppstore.com.pem;        ssl_certificate_key  /usr/local/nginx/conf/sslkey/bppstore.com.key;        ssl_session_timeout  5m;        #ssl_protocols   SSLv3 TLSv1 TLSv1.1 TLSv1.2; 这行和下行保留一个就行        ssl_protocols   TLSv1;        ssl_ciphers RC4:HIGH:!aNULL:!MD5;        ssl_prefer_server_ciphers   on;     # dns resolver used by forward proxying     resolver                       119.29.29.29 valid=60s ipv6=off;     # forward proxy for CONNECT request     proxy_connect;     proxy_connect_allow            443 563; 80补充进来     proxy_connect_connect_timeout  10s;     proxy_connect_read_timeout     10s;     proxy_connect_send_timeout     10s;     # forward proxy for non-CONNECT request     location / {         proxy_pass ;         proxy_set_header Host $host;     } }

reload nginx

/usr/local/nginx/sbin/nginx -s reload

配置一个支持ssl的配置:

 centos7 root@parallels:/usr/local/nginx/conf/vhosts# tail -f /usr/local/nginx/logs/proxy-access.log 那么请求是OK的
 node2 root@node2:~# curl -klv  10.211.55.6 - - [05/Mar/2021:14:47:53 +0800] "GET / HTTP/1.1" 200 2381 "-" "curl/7.29.0" "-"

标签: #linux系统终端透明设置