squid
一、Squid安装
在Squid官网下载squid-3.0.STABLE26
$ tar xzf squid-3.0.RELEASE26.tar.gz
$ cd squid-3.0.RELEASE26
$ ./configure --prefix=SquidDir --enable-async-io --enable-icmp --enable-delay-pools --enable-useragent-log --enable-htcp --enable-forw-via-db --enable-cache-digests
$ make
make的过程中可能出现错误
g++: 警告: 开关‘-fhuge-objects’不再被支持
ntlm/auth_ntlm.cc: 在成员函数‘virtual void AuthNTLMUserRequest::module_start(void (*)(void*, char*), void*)’中:
ntlm/auth_ntlm.cc:478:18: 错误: variable ‘ntlm_user’ set but not used [-Werror=unused-but-set-variable]
ntlm/auth_ntlm.cc: 在成员函数‘virtual void AuthNTLMUserRequest::authenticate(HttpRequest*, ConnStateData::Pointer, http_hdr_type)’中:
ntlm/auth_ntlm.cc:596:18: 错误: variable ‘ntlm_user’ set but not used [-Werror=unused-but-set-variable]
cc1plus: all warnings being treated as errors
make[2]: *** [ntlm/auth_ntlm.o] 错误 1
make[2]:正在离开目录 `/home/happy/download/squid-3.0.STABLE26/src/auth'
解决方法:
修改Makefile、src/Makefile、src/auth/Makefile这3处文件,将所有的“-Werror”的字段去掉。重新编译。
然后make install即可。
二、配置Squid
打开squid.conf并修改
#将默认http_port设置为要监听地址和端口号
http_port 3128
#添加访问控制
#Default:
# http_access deny all
#
#Recommended minimum configuration:
#
# Only allow cachemgr access from localhost
# 定义一个针对客户IP地址的ACL和访问规则,告诉squid允许来自这些地址的HTTP请求 http_access allow all
# 定义主机名,主机名通过在终端输入hostname可以获得。
# TAG: visible_hostname
#Default:
visible_hostname linux
# 定义cache_dir
# TAG: cache_dir
#Default:
cache_dir ufs /home/happy/software/squid/var/cache 100 16 256
将/dir/squid/sbin添加到~/.bashrc中。source重新加载。
输入
$ squid parse
检查squid.conf是否有误,如果配置正确,看不到输出。
三、测试squid
在测试之前,先初始化cache
$ squid -z
启动squid
$ squid -N -d1 //-N选项来保持squid在前台运行,-d1选项在标准错误里显示1级别的调试信息。
2013/07/25 18:01:05| Squid is already running! Process ID 19963
//后台运行
$ squid
//squid -s选项会让Squid将重要的状态和警告信息写到syslogd
//关掉squid
$ squid -k shutdown
四,设置透明代理 (如果不想设置,直接跳过即可)
因为PC中暂时只有一个网卡,故先通过一个网卡设置,同时使用一个内网地址暂时代替外网地址(此为192.168.191.20)。
4.1)单网卡设置多个IP
$ sudo vim /etc/network/interfaces
初始配置如下:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
修改为
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.191.20 netmask 255.255.255.0 gateway 192.168.191.1 auto eth0:0 iface eth0:0 inet static address 192.168.191.21 netmask 255.255.255.0 gateway 192.168.191.1
重启服务:
$ sudo /etc/init.d/networking restart $ ifconfig eth0 Link encap:以太网 硬件地址 00:21:9b:25:b4:f5 inet 地址:192.168.191.20 广播:192.168.191.255 掩码:255.255.255.0 inet6 地址: fe80::221:9bff:fe25:b4f5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1 接收数据包:107194 错误:0 丢弃:0 过载:0 帧数:0 发送数据包:80550 错误:0 丢弃:0 过载:0 载波:0 碰撞:0 发送队列长度:1000 接收字节:81986996 (81.9 MB) 发送字节:10655753 (10.6 MB) 中断:42 基本地址:0xe000 eth0:0 Link encap:以太网 硬件地址 00:21:9b:25:b4:f5 inet 地址:192.168.191.21 广播:192.168.191.255 掩码:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1 中断:42 基本地址:0xe000 lo Link encap:本地环回 inet 地址:127.0.0.1 掩码:255.0.0.0 inet6 地址: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 跃点数:1 接收数据包:77 错误:0 丢弃:0 过载:0 帧数:0 发送数据包:77 错误:0 丢弃:0 过载:0 载波:0 碰撞:0 发送队列长度:0 接收字节:5880 (5.8 KB) 发送字节:5880 (5.8 KB)
4.2) 设置iptable
写一个脚本iptables.sh,开机后启动该脚本。
$ vim iptables.sh
在iptables.sh中写入如下内容:
#! /bin/bash
# 开启filter表的INPPUT链、FORWARD链及OUTPUT链 iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT
# 允许转发 echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -A PREROUTING -p udp --dport 53 -j ACCEPT
# 允许内网计算机与外部 DNS 服务器的转发 iptables -A FORWARD -p udp --dport 53 -j ACCEPT iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
# NAT端口映射
iptables -t nat -A PREROUTING -s 192.168.191.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128 iptables -t nat -A POSTROUTING -s 192.168.191.0/24 -o eth0 -j MASQUERADE iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
添加可执行权限:
$ chmod o+x iptables.sh
浙公网安备 33010602011771号