如何在RHEL/CentOS 6.x安装配置squid透明代理服务器
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代理服务器中允许访问的。