Squid本质上是一种用来缓冲Internet数据 + 服务器代理的软件。
用来做前置的Web缓存,加快用户访问Web的速度
代理内网用户访问互联网资源
设置访问控制策略,控制用户的上网行为
主要支持http、ftp等应用协议
代理工作的机制和好处
缓存网页对象,减少重复请求
访问速率提高
隐藏客户机真是ip地址
当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存!如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机。如果缓存中没有客户机要访问的页面,则由代理服务器向 Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机 总结:利用缓存从而进行代理
通过第三方软件或机构,实现客户端对指定服务的访问任务
Windows 系统: ccproxy(具有防火墙功能) ISA2006防火墙(有代理功能)
Linux 系统: squid
3-1)将局域网的主机保护起来
3-2)对网站的内容进行缓存,加快客户端的访问速度,减少网络流量
3-3)静态页面的站点越来越少,可缓存的内容也变少,数据库中的信息不能被缓存
4-1)传统代理:客户端不需要配置网关,只需要设置浏览器的配置,代理服务器对客户端的访问控制能力强 缺点:有部分应用程序无法被代理
4-2)透明代理:客户端不用配置浏览器,正常配置网络信息,代理服务器对客户端的访问控制能力相对较弱 优点:绝大部分的应用程序都能被代理应用
4-3)反向代理:外网客户端给代理服务器发送访问请求后,由代理服务器判断将请求转发给哪个web节点, 作用:企业中经常使用squid制作web反向缓存服务。
4-4)缓存代理:适用于网络带宽比较低的环境,网速慢的环境。节省外网流量,加快客户端访问速度。对于动态网站,如论坛,新闻组,QQ空间类,无法进行缓存。现在的环境中,常用于缓存图片,视频等。企业中经常使用squid制作web反向缓存服务。。。
使用传统代理时,网页浏览器访问网站时的域名解析请求会发给指定的代理服务器
使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给DNS服务器
实际应用中,传统代理多见于Internet环境。而透明代理多见于局域网环境。 如:在Liunx网关中启用透明代理后,局域网主机无需进行额外设置就可以享受更好的上网速度。
+++Apche服务器地址为192.168.6.21,代理服务器地址为192.168.1.200+++
cd /etc/sysconfig/network-scripts/
ls
ifcfg-ens33 ifdown-ppp ifup-ib ifup-Team
ifcfg-lo ifdown-routes ifup-ippp ifup-TeamPort
cp ifcfg-ens33 ifcfg-ens37
ls
ifcfg-ens33 ifdown-post ifup-eth ifup-sit
ifcfg-ens37 ifdown-ppp ifup-ib ifup-Team
ifcfg-lo ifdown-routes ifup-ippp ifup-TeamPort
ip addr
ens37:00:0c:29:c0:93:22
第一块网卡:192.168.6.20
第二块网卡:删掉UUID、修改NAME和DEVICE 192.168.1.200
HWADDR(HardWareADDRess,硬件地址)
systemctl restart network
1>临时启用:
echo "1" > /proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip_forward=1 //重启跟网络相关的服务就会失效
2>永久启用:
vim /etc/sysctl.conf
添加:
net.ipv4.ip_forward = 1
# 重启加载内核配置参数
sysctl -p
# 验证:
cat /proc/sys/net/ipv4/ip_forward →1
tar -zxvf squid-3.5.23.tar.gz -C /usr/src/
cd /usr/src/squid-3.5.23/
[root@localhost squid-3.5.23]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-async-io=240 \
--enable-default-err-language=Simplify_Chinese \
--disable-poll \
--enable-epoll \
--enable-gnuregex
# 参数:
--prefix=/usr/local/squid 指定安装路径
--sysconfdir=/etc 指定配置文件路径
--enable-arp-acl 启用arp控制列表
--enable-linux-netfilter 启用内核包过滤功能
--enable-async-io=240 启用设备异步I/O功能
--enable-default-err-language=Simplify_Chinese 错误日志的默认语言类型
--disable-poll 关闭poll布尔运算
--enable-epoll 启用扩展poll布尔运算
--enable-gnuregex 支持gnu正则表达式
make && make install
useradd -M -s /sbin/nologin squid
ln -s /usr/local/squid/sbin/* /usr/local/sbin/
chown -R squid:squid /usr/local/squid/var/
chmod -R 757 /usr/local/squid/var/
squid -k parse //验证语法
squid -z //初始化
squid //启动服务
netstat -anpt | grep squid //查看服务
killall -9 squid //停止squid服务
vim /etc/squid.conf
# 修改:
加注释:
http_access allow localnet(52行) //默认允许本地网段使用(acl可以不注释,但这个必须注释)
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16 这三个网段访问
//加注释后就拒绝上三个网段访问
# 添加:(54行)
acl net1 src 192.168.6.20 #指定源地址192.168.6.20(代理服务器的第一块网卡)
acl net2 src 192.168.6.21 #指定源Apache地址 ---这两个acl根本就不需要,因为没有用到它(net1和net2是列表名称)
http_access allow all #允许所有ip访问
# 取消注释:
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256(62行)
//启用缓存列表
#设置缓存目录,启用此目录后,需要进行初始化后才能使用,100表示每次缓存的文件数,16表示创建的缓存目录数,256表示二级缓存目录数
cd /usr/local/squid/var/cache/squid/ //查看本目录还没有缓存文件
squid -z //初始化 初始化成功后会生成缓存列表
# 重启Squid服务
[root@localhost ~]# killall -9 squid
[root@localhost ~]# squid
Windows)
打开IE浏览器:打开“工具”—“Internet选项”。“连接”—“局域网设置”中进行设置:
IP地址:192.168.1.200 端口:3128
Linux)
打开火狐浏览器打开“首选项”—“高级”—“网络”—点击连接中的“设置”—“手动配置代理”——输入Squid代理服务器ip地址 端口:3128
客户端client访问WEB服务器http://192.168.6.21/(web服务器地址,访问域名暂时没做出来)
客户端不用设置浏览器的代理选项,正常配置IP地址信息,包括网关DNS【关于客户端的DNS解析工作,最好还是通过正常的DNS服务器来提供,不建议抛给代理服务器来处理】
1)修改配置文件
vim /etc/squid.conf
修改:
http_port 3128 transparent
killall -9 squid
squid
netstat -anpt | grep squid
2)配置防火墙规则
systemctl start firewalld
systemctl status firewalld
添加ens33到internal(内)区域
firewall-cmd --zone=internal --add-interface=ens33
添加ens37到external(外)区域
firewall-cmd --zone=external --add-interface=ens37
在external添加服务和端口号
firewall-cmd --zone=external --add-service=http
firewall-cmd --zone=external --add-service=https
firewall-cmd --zone=external --add-port=3128/tcp
使用富语言编写目标端口号转换,将80和443转换为3128
富语言:
firewalld的富语言(rich language)提供了一种不需要了解iptables语法的通过高级语言配置复杂IPv4和IPv6防火墙规则的机制。为管理员提供了一种表达性语言.通过这种语言可以表达firewalld的基本语法中未涵盖的自定义防火墙规则。例如,仅允许从单个IP地址(而非通过某个区域路由的所有IP地址)连接到服务。
富规则可用于表达基本的允许/拒绝规则,也可以用于配置记录(面向syslog 和auditd),以及端口转发、伪装和速率限制。
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens37 -p tcp --dport 80 -j REDIRECT --to-ports 3128
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens37 -p tcp --dport 443 -j REDIRECT --to-ports 3128
验证:
客户端配置(网关必须要有)
IPADDR=192.168.1.201
NETMASK=255.255.255.0
GATEWAY=192.168.1.200
firefox 192.168.6.21
成功!!! 特殊情况:如果你客户机是基于“传统代理”的话,需要将代理服务取消掉!!!
1)使用acl配置项定义需要控制的条件
acl 列表名称 列表类型 列表内容 …
2)通过http_access配置项对已定义的列表做“允许”或“拒绝”的控制。
http_access 访问控制列表
用它来控制变量是允许通过还是拒绝通过啦。。。
如:http_access allow haha 允许前面定义的haha(192.168.0.0/24)网段通过
http_access deny haha 拒绝前面定义的haha(192.168.0.0/24)网段通过
# 格式:
acl 列表名称 选项 值
例:acl haha src "/etc/iplist"
# 选项:
src 源IP地址
dst 目标IP地址
port 目标端口号
dstdomain 目标域
time 访问时间
maxconn 最大连接数
url_regex 目标URL地址
Urlpath_regex 整个目标URL地址
3)拒绝指定ip和域名访问
编辑地址列表
vim /etc/iplist
192.168.1.202
192.168.1.203
3-1)编辑域名列表
vim /etc/dnslist
.baidu.com
.sohu.com
4)vim /etc/squid.conf
添加:
acl haha src "/etc/iplist" #如果文件中是具体的ip,那么必须使用src选项
acl hehe dstdomain "/etc/dnslist"
http_access deny haha
http_access deny hehe
5)重启服务:
killall -9 squid
squid
6)客户端验证。即192.168.1.202与192.168.1.203均不能访问httpd服务
sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。sysctl配置于显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。
命令格式:
sysctl (选项) (参数)
sysctl [-n] [-e] -w variable=value
sysctl [-n] [-e] -p <filename> (default /etc/sysctl.conf)
sysctl [-n] [-e] -a
常用参数的意义:
-w 临时改变某个指定参数的值,如 sysctl -w net.ipv4.ip_forward=1
-a 显示所有的系统参数
-p 从指定的文件加载系统参数,若不指定即从/etc/sysctl.conf中加载
如果仅仅是想临时改变某个系统参数的值,可以用两种方法来实现,例如想启用IP路由转发功能:
1) echo 1 > /proc/sys/net/ipv4/ip_forward
2) sysctl -w net.ipv4.ip_forward=1
以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了
service network restart命令,所设置的值即会丢失。如果想永久保留配置,可以修改/etc/sysctl.conf文件,将 net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1(没有则添加)
扩展参数:
-n:打印值时不打印关键字;
-e:忽略未知关键字错误;
-N:仅打印名称;
-w:当改变sysctl设置时使用此项;
-p:从sysctl配置文件“/etc/sysctl.conf”加载内核参数设置;
-a:打印当前所有可用的内核参数变量和值;
-A:以表格方式打印当前所有可用的内核参数变量和值。
No pain, no pain, no sweet, alive, this is a kind of practice