CentOS 7 Squid代理服务器正向代理-透明代理

Squid是Linux系统中最常用的一款开源代理服务软件,主要提供缓存加速和应用层过滤控制的功能,可以很好的实现HTTP、FTP、DNS查询以及SSL等应用的缓存代理

透明代理:提供与传统代理相同的功能和服务,多见于局域网环境,其区别在于客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向,实际上仍然交给代理服务器处理  网页浏览器访问网站时的域名解析请求会优先发给DNS服务器

 

构建透明代理服务器

基于局域网主机通过Linux网关访问Internet的环境

一台Linux主机作为Internet上的web服务器(CentOS7 192.168.94.22 NAT),启动httpd服务

一台Linux主机作为局域网网关服务器(CentOS7 192.168.111.11 VMnet3),并构建Squid服务(192.168.94.11 NAT)提供代理服务

一台windows主机(192.168.111.22 VMnet3)作为局域网的客户机,只需正确设置IP地址、默认网关

网关服务器添加网卡,内网卡ens37 192.168.111.0/24 ,外网卡ens33 192.168.94.0/24

安装squid支持透明模式

[root@squid ~]# rz     # 上传源码包

[root@squid ~]# tar xf squid-4.2-20180806-r6d8f397.tar.gz 
[root@squid ~]# mv squid-4.2-20180806-r6d8f397 /opt/squid
[root@squid ~]# cd /opt/squid
[root@squid squid]# ./configure --prefix=/usr/local/squid \
 --sysconfdir=/etc \
 --enable-arp-acl \
 --enable-linux-netfilter \
 --enable-linux-tproxy \
 --enable-async-io=100 \
 --enable-err-language="Simplify_Chinese" \
 --enable-underscore \
 --enable-poll \
 --enable-gnuregex && make -j 4 && make -j 4 install
--enable-arp-acl      # 可以在规则链中设置为直接通过客户端MAC管理,防止客户端使用IP欺骗
--enable-linux-netfilter   # 使用内核过滤
--enable-linux-tproxy     # 使用透明模式
--enable-async-io=100      # 异步I/O,提升存储性能
--enable-err-language="Simplify_Chinese"    # 错误信息显示语言
--enable-underscore        # 允许URL中有下划线
--enable-poll              # 使用poll模式,提升性能
--enable-gnuregex           # 使用GNU正则表达式

编译有点慢 , 先配置web服务器
[root@web ~]# yum -y install httpd
[root@web ~]# echo "<h1>Squid-Web1</h1>" > /var/www/html/index.html
[root@web ~]# systemctl start httpd

再配置Windows网络 IP和内网一个网段 , 网关指定内网网卡IP 

编译的很慢 , 先把后续的准备工作做了 , 在squid上再开一个终端 

开启路由转发

[root@squid squid]# vim /etc/sysctl.conf
# 添加 net.ipv4.ip_forward = 1 
[root@squid squid]# sysctl -p
# 或者临时开启
[root@squid squid]# echo "1" > /proc/sys/net/ipv4/ip_forward

 

写入防火墙nat策略

[root@squit squid]# iptables -F
[root@squit squid]# iptables -F -t nat
[root@squit squid]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.111.0/24 -p tcp --dport 80 -j REDIRECT --to 3129  # 后期配置squid配置文件里的监听端口为3129
[root@squit squid]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.111.0/24 -p tcp --dport 443 -j REDIRECT --to 3129
[root@squit squid]# iptables -I INPUT -p tcp --dport 3219 -j ACCEPT

配置squid配置文件

之前用3.6版本的squid做透明代理 监听的端口就是IP:3128  这个4.2新版本可能默认监听端口就是3128所以可能端口冲突 , 但是也没有提示 , 官方手册也没找到具体原因 , 弄了两天 , 不是服务起不来就是跑起来了没效果 , 果断换端口

 

[root@squid squid]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@squid squid]# useradd -M -s /sbin/nologin squid
[root@squid squid]# chown -R squid.squid /usr/local/squid/var/
[root@squid squid]# vim /etc/squid.conf
# 在 http_port 3128 这行的下面添加 
http_port 192.168.111.11:3129 transparent 
cache_mem 64 MB           # 指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
maximum_object_size 4096 KB     # 允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
# 在 coredump_dir /usr/local/squid/var/cache/squid   这一行上方添加
cache_effective_user squid       # 指定程序用户
cache_effective_group squid      # 指定账号基本组

# 在 http_access deny all 这行上面添加 http_access allow all
# 把 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 这行的注释去

 

 

 

 

开启squid服务

[root@squit squid]# squid -z
[root@squit squid]# squid 
[root@squit squid]# netstat -antup|grep squid
tcp        0      0 192.168.111.11:3129     0.0.0.0:*               LISTEN      49263/(squid-1)          
tcp6       0      0 :::3128                 :::*                    LISTEN      49263/(squid-1)     
udp        0      0 0.0.0.0:55297           0.0.0.0:*                           49263/(squid-1)     
udp6       0      0 :::37642                :::*                                49263/(squid-1)     

测试

查看squid代理服务器日志

 

查看Web服务器日志

显示的是squid服务器的IP , 并不能看到用户IP

 

测试成功 

posted @ 2018-08-22 17:47  damowang~  阅读(...)  评论(...编辑  收藏