=============Squid服务==============
Squid简介:
Squid是一个高性能的代理缓存服务器,主要提供缓存加速和应用层过滤控制的功能。Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。 代理的工作机制: 当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机需要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将页面数据保存到缓存中并发送给客户机。
** 传统代理**:使用传统代理的特点在于,客户机的相关程序(如IE浏览器、qq聊天软件等)必须指定代理服务器的地址、端口等基本信息。
透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理。
============安装Squid服务===============
** 一、 Squid 3.4.6源码包**
百度网盘链接:https://pan.baidu.com/s/198CbzyEFmh9MyVCdn1GKzA 密码:9h6a
二、安装步骤
Squid服务器操作:
1.环境安装:
yum install gcc gcc-c++ make -y
2.解压缩包:
tar zxvf squid-3.4.6.tar.gz -C /opt
3.编译安装squid
cd /opt/squid-3.4.6/
./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
** 详解如下**: ./configure --prefix=/usr/local/squid \ ** //编译安装时目录设置为/usr/local/squid** --sysconfdir=/etc //单独将配置文件修改到此目录下 --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 ** // 使用GUN正则表达式**
make && make install
```
### 4.安装完成后创建链接文件、创建用户和组。
```
ln -s /usr/local/squid/sbin/* /usr/local/sbin/
useradd -M -s /sbin/nologin squid
chown -R squid.squid /usr/local/squid/var/
```
### **5.Squid配置文件**
```
vim /etc/squid.conf
```
**找到下面这行,进行添加:**
```
#And finally deny all other access to this proxy
http_access allow all #只添加这行,代表允许所有
http_access deny all
```
**找到下面这行,进行添加:**
```
#Squid normally listens to port 3128
http_port 3128
cache_effective_user squid #添加这行 代表指定程序用户
cache_effective_group squid #添加这行 代表指定账号基本组
#包含了程序运行时的内存,寄存器状态,堆栈指针,也可以认为是当时程序的状态时生成一个储存文件
coredump_dir /usr/local/squid/var/cache/squid
```
### **6.编辑squid服务启动脚本**
```
vim /etc/init.d/squid
```
脚本内容如下:
```
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -anpt | grep squid &>/dev/null
if [ $? -eq 0 ]
then
echo "Squid is running"
else
echo "正在启动 squid..."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -rf $PID &>/dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -natp | grep squid
else
echo "squid未启动"
fi
;;
restart)
$0 stop &> /dev/null
echo "正在关闭 squid..."
$0 start &> /dev/null
echo "正在启动 squid..."
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "请输入正确参数{start|stop|reload|restart|check|status}"
;;
esac
```
**编辑完脚本后保存退出,并赋予执行权限:**
```
[root@localhost squid-3.4.6]# cd /etc/init.d/
[root@localhost init.d]# ls
functions netconsole network README squid
[root@localhost init.d]# chmod +x squid
[root@localhost init.d]# chkconfig --add squid
[root@localhost init.d]# chkconfig --level 35 squid on
```
### 7.因为修改过配置文件,所以重新开启Squid服务
```
service squid restart
```
```
squid的命令:
[root@localhost ~]# squid -k parse #检查配置文件语法,只要不出现error报错,就没有问题
[root@localhost ~]# squid -z #初始化缓存目录
[root@localhost ~]# squid #启动服务
```
## =============传统代理==============
## 一、传统代理环境拓扑
>** 1.一台Centos 7 作为Squid服务器,ip:192.168.233.128**
>** 2.一台Centos 7 作为提供web服务的http服务器,ip:192.168.233.6**
> **3.一台Windows 作为客户端 ,ip:192.168.233.200**
![](http://i2.51cto.com/images/blog/201809/18/60c68ba46e6de28142447d39cf4909f4.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## 二、操作步骤
### 1.修改配置文件
```
vim /etc/squid.conf
```
找到下面的端口号,插入以下的内容
```
http_port 3128
cache_mem 64 MB #指定缓存功能所使用的内存空间大小,便于保持访问频繁的web对象,容量最好为4的倍数,单位为MB,建议设为物理 内存的1/4
reply_body_max_size 10 MB #允许用户下载的最大文件大小,以字节为单位。默认设置为0表示不进行设置。
maximum_object_size 4096 KB #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
修改完成后保存退出
```
### 2.设置防火墙,以便访问
```
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
```
### 3.因为修改配置文件,所以需要重新启动服务
```
[root@localhost ~]# service squid restart
```
## 三、验证传统代理
### 1)Centos 7 作为提供web服务的http服务器操作:
关闭防火墙,搭建并开启web服务:
```
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd.service
```
### 2)Windows客户端设置代理操作:
> **在Windows 系统中开启浏览器**
>** Internet选项--》连接--》局域网设置—— ip:squid服务器地址 端口:3128**
![](http://i2.51cto.com/images/blog/201809/18/bba1d183895c4d2e5c13351ce79f09ec.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
**设置完成后,在地址栏输入访问web服务器的地址**
![](http://i2.51cto.com/images/blog/201809/18/e5130232ec63095ab5ccd659ee138ba7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## 访问成功后,我们来查看web服务器的日志文件,是否是Squid服务器地址访问的。
![](http://i2.51cto.com/images/blog/201809/18/c48901c3ace788a53f591e22faa6a3ca.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](http://i2.51cto.com/images/blog/201809/18/1019f56353f8b6579e2ef0a6edf2414b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## ================透明代理================
## 一、透明代理环境拓扑
> 1.一台Centos 7 作为Squid服务器,设置透明代理,
> ** 作为网卡,设置两个网关地址:**
> **(1)内网 ens33:192.168.130.1**
> **(2) 外网 ens36:12.0.0.1**
> 2.一台Centos 7 作为内网端,**ip:192.168.130.130**【因为实验,所以只使用一台作为内网端】
> 3.一台Windows 作为外网端,**ip:12.0.0.12**
>
**原理图如下:**
![](http://i2.51cto.com/images/blog/201809/19/02cb6782a51294f65386bd67cfcfbc5f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## 二、操作步骤
### 1.一台Centos 7 作为Squid服务器,设置透明代理,
> 作为网卡,设置两个网关地址:
> (1)内网 ens33:192.168.130.1
> (2) 外网 ens36:12.0.0.1
> ![](http://i2.51cto.com/images/blog/201809/19/4bb94fe7ea01f2d043f004e08d819766.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> **因为squid服务器是作为网关的,所以需要开启路由功能。**
> **启用路由功能:**
>
> ![](http://i2.51cto.com/images/blog/201809/25/2410dd18bc70c746bde6a3f8fa0e7c66.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
>**进行修改配置主配置文件:**
>```
> [root@localhost ~]# vim /etc/squid.conf
>
> http_port 192.168.130.1:3128 transparent #修改 设置透明代理模式
```
>![](http://i2.51cto.com/images/blog/201809/19/685ec72c2eea3bbefc96a3de182c80f9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
>**修改完成后保存退出,并重启squid服务:**
>```
>[root@localhost ~]# service squid restart
```
>
>**设置防火墙的规则:**
>```
>[root@localhost ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.130.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
>[root@localhost ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.130.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
>[root@localhost ~]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
```
### 2.一台Centos 7 作为内部web服务器,**ip:192.168.130.130**
>**设置web服务地址IP**
> ![](http://i2.51cto.com/images/blog/201809/19/d1b419e2860b4e7f7c0ba57b4ac18d7e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> **关闭防火墙,搭建并开启web服务:**
> ```
> [root@localhost ~]# systemctl stop firewalld.service
> [root@localhost ~]# setenforce 0
> [root@localhost ~]# yum install httpd -y
> [root@localhost ~]# systemctl start httpd.service
> ```
>
## 3.一台Windows 作为外网端,**ip:12.0.0.12**,并去访问Web服务器192.168.130.130
![](http://i2.51cto.com/images/blog/201809/19/d0ae99b456a1bbe99279bc194a8f5860.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![](http://i2.51cto.com/images/blog/201809/19/bcceaf87e5b7a1513565256760cd474c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## 3.进入Web服务器,查询http访问日志,确认是否是squid服务器访问的
```
[root@localhost ~]# tail /var/log/httpd/access_log
```
![](http://i2.51cto.com/images/blog/201809/19/320ef7d5ed0afad327487dc79ea8f009.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## 由上图可知是由Squid服务器的网关访问的web网站,证明是透明代理模式。