如何在RHEL/CentOS 6.x安装配置squid透明代理服务器

时间:2019-08-20 17:58:21  来源:igfitidea点击:

Squid服务器被设计成在类Unix的操作系统中运行。
在2.7版本之前,Windows操作系统是支持的。

在本教程中,我们将学习如何在RHEL/CentOS 6.x上安装和配置squid透明代理服务器。

什么是Squid服务器

Squid是一个web缓存和web过滤服务器。
它基于Harvest缓存守护进程。

由于Squid服务器具有缓存功能,它有助于提高web访问的性能。
它可以提供静态、动态或者流式的web内容好吧。
它有助于加快最终客户端的网络浏览速度。

Squid服务使用的默认端口号

squid服务的默认端口号是3128

Squid:透明Web代理服务器

Squid服务器广泛用于网页过滤和缓存。它也被用作透明的Web代理服务器。透明代理也称为 拦截缓存

拦截缓存是一个过程,当来自客户端的HTTP请求重定向到缓存服务器(Squid)时,没有在最终用户客户端中进行任何配置。通过这种方式,最终用户客户端不知道流量已重定向到缓存服务器(透明代理)

透明Squid代理与普通Squid代理的区别

普通Squid代理服务器中,最终用户客户端流量被重定向到Squid代理服务器,但为此,我们必须在每个客户端机器中配置web浏览器设置。(我们还将在本教程中演示如何进行设置)

透明Squid代理中,我们不需要在每个客户端的web浏览器中进行设置机器。那个流量可以很容易地重定向到Squid服务器。iptablesfornat(网络地址转换),在设置透明Squid代理时起着非常关键的作用

安装并配置Squid透明代理服务器的步骤:

在RHEL/CentOS中创建一个yum repo文件。用于获取最新版本的Squid。

vi /etc/yum.repos.d/squid.repo

内容如下:

[squid]
name=Squid repo for CentOS Linux 6 - $basearch
#IL mirror
baseurl=http://www1.ngtech.co.il/rpm/centos/6/$basearch
failovermethod=priority
enabled=1
gpgcheck=0

在系统中安装EPEL库(获取Perl包)

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

使用yum命令安装Squid和perl-Crypt-OpenSSL

yum install squid  perl-Crypt-OpenSSL

安装完squid包后,所有与squid相关的配置文件都位于/etc/squid目录中

[root@localhost ~]# cd /etc/squid/
[root@localhost squid]# 
[root@localhost squid]# ls -l
total 48
-rw-r--r--. 1 root squid   419 Jan 27 18:19 cachemgr.conf
-rw-r--r--. 1 root root    419 Jan 27 18:19 cachemgr.conf.default
-rw-r--r--. 1 root root   1547 Jan 27 18:18 errorpage.css
-rw-r--r--. 1 root root   1547 Jan 27 18:18 errorpage.css.default
-rw-r--r--. 1 root root  11954 Jan 27 18:19 mime.conf
-rw-r--r--. 1 root root  11954 Jan 27 18:19 mime.conf.default
-rw-r-----. 1 root squid  2315 Jan 27 18:19 squid.conf
-rw-r--r--. 1 root root   2315 Jan 27 18:19 squid.conf.default
[root@localhost squid]#

备份squid.conf文件。

cp -p /etc/squid/squid.conf /etc/squid/squid.conf.orig

禁用SELINUX

编辑文件/etc/sysconfig/selinux并将selinux的值更改为disabled

vi /etc/sysconfig/selinux

SELINUX=disabled

重新启动系统,以便SELINUX可以永久生效。

init 6

squid.conf文件默认值

[root@localhost ~]# egrep -v '^#|^$' /etc/squid/squid.conf 
acl localnet src 10.0.0.0/8	
acl localnet src 172.16.0.0/12	
acl localnet src 192.168.0.0/16	
acl localnet src fc00::/7       
acl localnet src fe80::/10      
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
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern -i (/cgi-bin/|?) 0	0%	0
refresh_pattern .		0	20%	4320
[root@localhost ~]#

将Squid代理服务器设置为透明代理服务器

在/etc/squid/squid.conf文件中的 http_port 3128行后面添加 accel vhost allow direct

http_port 3128 accel vhost allow-direct

在squid.conf中添加本地网络的acl:

vi /etc/squid/squid.conf 

acl localnet src 172.16.0.0/16

squid.conf配置参考:

vi /etc/squid/squid.conf
acl localnet src 172.16.0.0/16	
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
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access deny blocksites
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128 accel vhost allow-direct
cache_dir ufs /var/spool/squid 100 16 256
coredump_dir /var/spool/squid
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern -i (/cgi-bin/|?) 0	0%	0
refresh_pattern .		0	20%	4320

重启Squid服务

/etc/init.d/squid restart

设置防火墙

创建bash脚本文件

vi /root/firewall.sh

内容如下

#!/bin/bash
# 

# Ethernet device name  connected to LAN
ETHERNET_LAN="eth2"

# Ethernet device name connected to Internet
ETHERNET_INTERNET="eth0"

# Squid Server IP Address
SQUID_SERVER_IP="172.16.15.1"

# Squid port number
SQUID_PORT="3128"

### Multiple Port Number - TCP based
MULTI_PORT="22,20,21"

#### Flush iptables
iptables -F

##### Delete a user-defined chain
iptables -X

### -t defines table ###

#### Flush NAT Rules/user-defined NAT chain
iptables -t nat -F
iptables -t nat -X

#### Flush Mangle Rules/user-defined NAT chain (mangle — Used for specific types of packet alteration. ) #####
iptables -t mangle -F
iptables -t mangle -X

# Load IPTABLES modules for NAT and IP conntrack
modprobe ip_conntrack
modprobe ip_conntrack_ftp

##### Enable IP forwarding for IPV4 ####
echo 1 > /proc/sys/net/ipv4/ip_forward

##
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

## INPUT/OUTPUT rules for loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -i $ETHERNET_INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables --table nat --append POSTROUTING --out-interface $ETHERNET_INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $ETHERNET_LAN -j ACCEPT

iptables -A INPUT -i $ETHERNET_LAN -j ACCEPT
iptables -A OUTPUT -o $ETHERNET_LAN -j ACCEPT

iptables -t nat -A PREROUTING -i $ETHERNET_LAN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER_IP:$SQUID_PORT

iptables -t nat -A PREROUTING -i $ETHERNET_INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT

###### IPTABLE Allow rule for tcp based multiple port 
#### To disable - Use # in front of below given line
iptables -A INPUT -p tcp -m multiport --dports $MULTI_PORT -j ACCEPT

iptables -A INPUT -j LOG
iptables -A INPUT -j DROP

设置firewall.sh的权限

chmod 700 /root/firewall.sh

执行firewall.sh脚本

sh /root/firewall.sh

客户端配置

在客户端,不需要配置Web浏览器。

唯一的要求是,客户端的网络是Squid代理服务器中允许访问的。