您的位置:首页 > 运维架构 > 反向代理

squid透明代理的安装和实现

2011-06-23 10:56 656 查看
squid透明代理的安装和实现

环境描述:centos 5.4 双网卡,内网地址:192.168.1.1 公网静态地址 a.b.c.d ,squid版本:squid-3.0.STABLE25

(1)执行如下命令,并将其加入/etc/rc.d/rc.local

/bin/echo "1024 40000" > /proc/sys/net/ipv4/ip_local_port_range

/bin/echo "1" > /proc/sys/net/ipv4/ip_forward

(2)使用如下命令安装相关软件包。当然可以用rpm -qa|grep 软件包名称 进行查看是否安装了下面的软件

yum -y install imake autoconf automake

(3)安装squid 3.0

cd /back

tar -zxvf squid-3.0.STABLE25.tar.gz

cd squid-3.0.STABLE25

./configure --prefix=/usr/local/squid --enable-dlmalloc --enable-removal-policies=heap,lru --enable-default-err-language=Simplify_Chinese --enable-cpu-profiling --enable-storeio=ufs,aufs,null --enable-snmp --enable-stacktrace --disable-ident-lookups --with-large-files --enable-linux-netfilter --enable-linux-tproxy --disable-epoll --with-pthreads --enable-delay-pools --enable-icmp --enable-htcp --enable-forw-via-db --enable-cache-digests --disable-optimizations --disable-select --enable-auth-basic --disable-wccp --with-filedescriptors=65536 --enable-arp-acl --enable-icap-client

说明:--enable-linux-tproxy 和--enable-linux-netfilter是实现透明代理的关键

在此执行过程中如果出现如下错误:

checking if TPROXY header files are installed... no

> WARNING: Cannot find TPROXY headers, you need to install the

> tproxy package from:

> - lynx http://www.balabit.com/downloads/tproxy/

> Searching in the above url I can't find the headers (my kernel is compiled

> with tproxy suport already).

这是缺少一个头文件,名字叫做ip_tproxy.h 我这里提供了这个头文件。将其复制到这个目录: /usr/include/linux/netfilter_ipv4/(51cto不允许传这种.h的文件 我将扩展名更改为.txt 下载下来记得将下载下来的文件名字更改为 ip_tproxy.h 再复制到指定目录)

如果configure出错,我经常是删除解压缩的文件,重新解压缩配置

rm -rf squid-3.0.STABLE25

tar -zxvf squid-3.0.STABLE25.tar.gz

cd squid-3.0.STABLE25

./configure --prefix=/usr/local/squid --enable-dlmalloc --enable-removal-policies=heap,lru --enable-default-err-language=Simplify_Chinese --enable-cpu-profiling --enable-storeio=ufs,aufs,null --enable-snmp --enable-stacktrace --disable-ident-lookups --with-large-files --enable-linux-netfilter --enable-linux-tproxy --disable-epoll --with-pthreads --enable-delay-pools --enable-icmp --enable-htcp --enable-forw-via-db --enable-cache-digests --disable-optimizations --disable-select --enable-auth-basic --disable-wccp --with-filedescriptors=65536 --enable-arp-acl --enable-icap-client

make&& make install

(4)修改/usr/local/squid/etc/squid.conf ,内容如下

http_port 192.168.1.1:3128 transparent

dns_nameservers 8.8.8.8 211.99.25.1

visible_hostname 192.168.1.1

cache_dir ufs /var/spool/squid 8000 16 256

cache_mem 400 MB

acl lanclient src 192.168.1.0/24 a.b.c.d/32

http_access allow lanclient

cache_mgr 706501330@qq.com

redirect_children 30

fqdncache_size 1024

cache_swap_low 90

cache_swap_high 95

maximum_object_size 20 MB

minimum_object_size 0 MB

maximum_object_size_in_memory 5 MB

access_log /usr/local/squid/var/logs/access.log

cache_log /usr/local/squid/var/logs/cache.log

cache_store_log /usr/local/squid/var/logs/store.log

ipcache_size 1024

ipcache_low 90

dns_testnames server

ipcache_high 95

cache_effective_user squid

cache_effective_group squid

说明:1.transparent 是透明代理的意思 squid默认端口号为3128

2.此线路为电信线路 如果是网通线路 建议将dns_nameserver 更改如下,或者填写自己本地运营商的dns地址 dns_nameservers 8.8.8.8 202.106.0.20

3.当squid 遇到问题联系的管理员邮箱:cache_mgr 706501330@qq.com 更改为自己的邮箱

4.将上文中的a.b.c.d换成自己公司的公网静态ip

5. dns_testnames server 将server换成linux主机名

(5)使用如下命令创建squid需要的用户和组

useradd squid -s /sbin/nologin

(6) 建立squid日志文件及修改相关权限及所有者

touch /usr/local/squid/var/logs/cache.log

chmod 755 /usr/local/squid/var/logs/cache.log

touch /usr/local/squid/var/logs/access.log

chmod 755 /usr/local/squid/var/logs/access.log

touch /usr/local/squid/var/logs/store.log

chmod 755 /usr/local/squid/var/logs/store.log

chown -R squid:squid /usr/local/squid/var

mkdir /var/spool/squid

chown squid:squid /var/spool/squid

(7)使用如下命令初始化squid缓存目录

/usr/local/squid/sbin/squid -z 建立时会出现下面的文字

[root@localhost etc]# /usr/local/squid/sbin/squid -z

2011/03/29 07:41:54| Creating Swap Directories

2011/03/29 07:41:54| /var/spool/squid exists

2011/03/29 07:41:54| Making directories in /var/spool/squid/00

2011/03/29 07:41:54| Making directories in /var/spool/squid/01

2011/03/29 07:41:54| Making directories in /var/spool/squid/02

2011/03/29 07:41:54| Making directories in /var/spool/squid/03

2011/03/29 07:41:55| Making directories in /var/spool/squid/04

2011/03/29 07:41:55| Making directories in /var/spool/squid/05

2011/03/29 07:41:55| Making directories in /var/spool/squid/06

2011/03/29 07:41:55| Making directories in /var/spool/squid/07

2011/03/29 07:41:55| Making directories in /var/spool/squid/08

2011/03/29 07:41:55| Making directories in /var/spool/squid/09

2011/03/29 07:41:55| Making directories in /var/spool/squid/0A

2011/03/29 07:41:55| Making directories in /var/spool/squid/0B

2011/03/29 07:41:55| Making directories in /var/spool/squid/0C

2011/03/29 07:41:55| Making directories in /var/spool/squid/0D

2011/03/29 07:41:55| Making directories in /var/spool/squid/0E

2011/03/29 07:41:55| Making directories in /var/spool/squid/0F

(8)执行如下命令启动squid,并将squid添加到开机自启动

/usr/local/squid/sbin/squid -s

echo "/usr/local/squid/sbin/squid -s " >>/etc/rc.d/rc.local

要停止squid用 /usr/local/squid/sbin/squid -k shutdown

(9)查看squid状态

lsof -i:3128

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

squid 24855 squid 14u IPv4 323951 TCP localhost:squid (LISTEN)

##################################################################################

执行了上面的操作只是实现了squid代理功能 ,客户端需要配置代理服务器地址和端口号

##################################################################################

(10)使用iptables 做nat,并将所有的80请求重定向到本机的3128 以实现透明代理。

vi /data/myscripts/squid.firewall

脚本如下

#!/bin/bash

echo "1" > /proc/sys/net/ipv4/ip_forward

echo "starting iptables rules"

/sbin/iptables -t filter -F

/sbin/iptables -t filter -Z

/sbin/iptables -t filter -X

/sbin/iptables -t nat -F

/sbin/iptables -t nat -Z

/sbin/iptables -t nat -X

/sbin/modprobe ip_tables

/sbin/modprobe iptable_nat

/sbin/modprobe iptable_filter

/sbin/modprobe ip_nat_ftp

/sbin/modprobe ip_conntrack

/sbin/modprobe ip_conntrack_ftp

/sbin/iptables -t filter -P INPUT ACCEPT

/sbin/iptables -t filter -P OUTPUT ACCEPT

/sbin/iptables -t filter -P FORWARD ACCEPT

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source a.b.c.d

/sbin/iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128

执行脚本并将其加入到开机自启动,注意将脚本中的a.b.c.d换成自己公司的公网静态ip

sh /data/myscripts/squid.firewall

echo "/data/myscripts/squid.firewall" >>/etc/rc.d/rc.local

#######################################################################################

至此squid+iptables已经实现了透明代理

#######################################################################################

(11)测试

客户机将网关指向192.168.1.1 填写上dns,测试能否上网。ssh登陆到192.168.1.1

tail -f /usr/local/squid/var/logs/access.log 看日志是否有记录测试机的上网记录 如果有就搭建成功了,恭喜!

附上常用调试方法以及遇到的问题

1、在开启squid之前,你应该验证其配置文件是否正确。运行如下命令即可:

# /usr/local/squid/sbin/squid -k parse

2011/05/18 11:22:12| Processing Configuration File: /usr/local/squid/etc/squid.conf (depth 0)

2011/05/18 11:22:12| Starting Authentication on port 192.168.1.2:14348

2011/05/18 11:22:12| Disabling Authentication on port 192.168.1.2:14348 (interception enabled)

没有提示错误,代表配置正确

2、重配置运行中的squid进程

在你了解了更多关于squid的知识后,你会发现对squid.conf文件做了许多改动。为了让新设置生效,你可以关闭和重启squid,或者在squid运行时,重配置它。

重配置运行中的squid最好的方法是使用squid -k reconfigure命令:

# /usr/local/squid/sbin/squid -k reconfigure

3、上线的squid有同事访问无法访问wenku.baidu.com 经测试显示该页无法显示。

解决办法 更改了dns dns_nameservers 8.8.8.8 211.99.25.1

本文出自 “daocaoren0311” 博客,请务必保留此出处http://liuhaiqing.blog.51cto.com/2265571/594840
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: