squid + iptables 做反向代理和透明代理
操作系统
CENTOS 6.0 x86_64
squid 3.1.4
# yum install squid
# rpm -qa|grep squid
squid-3.1.4-1.el6.x86_64
1.开启网卡数据包转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 //将 0 改成 1
保存退出
# sysctl -p
2.配置 squid
vim /etc/squid/squid.conf
查找
http_port 3128
改成
http_port 3128 transparent //使用 3128 端口做透明代理
添加一行
http_prot 80 accel vhost vport //使用 80 端口做反向代理
注: 如果web服务器和squid同台机器则要把web服务器80端口改成其他端口,如 81
添加
visible_hostname squid.localhost //这行不加启动报错
WARNING: failed to resolve 0.0.0.0:3128 to a fully qualified hostname
FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'
配置 squid 缓存目录
cache_dir ufs /var/spool/squid 10000 32 512 // 默认被注释,必须去掉注释,不然无法初始化
这里的 /var/spool/squid 为缓存存放目录
10000 是指缓存目录的总容量大小 10000MB 即 10 GB
32 是指 缓存目录的一级目录数 即 /var/spool/squid 下有 32 个子目录,以下类同
512 是指 缓存目录的二即目录数
配置 access 权限
找到
http_access deny all
改成
http_access allow all
保存退出
启动 squid
# service squid start //第一次运行会初始化缓存目录
# netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:43063 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::111 :::* LISTEN
tcp 0 0 :::80 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
tcp 0 0 :::48543 :::* LISTEN
2. 配置 iptables
将内网网卡路由之后进行ip地址伪装
# iptables -t nat -A POSTROUTING -i eth0 -j MASQUERADE
或
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to 115.239.233.106
开启允许内网网卡进行数据包转发,即上网功能
# iptables -A FORWARD -i eth0 -j ACCEPT //输入,下载
# iptables -A FORWARD -o eth0 -j ACCEPT //输出,上传
顺序必须加在
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
之前,不然会被拒绝掉
vim /etc/sysconfig/iptables 查看,修改
-A FORWARD -i eth0 -j ACCEPT
-A FORWARD -o eth0 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
如果怕麻烦,直接可以使用
iptables -F
iptables -t nat -A POSTROUTING -i eth0 -j MASQUERADE
保存设置
# service iptables save
重启 iptables
# service iptables restart
完成透明代理,客户端即可上网
3.设置 squid 反向代理
vim /etc/squid/squid.conf
# cache_peer //配置指向web服务ip、端口和服务器名
cache_peer 192.168.0.10 parent 80 0 no-query no-digest originserver name=web01
cache_peer 192.168.0.20 parent 80 0 no-query no-digest originserver name=web02
# cache_peer_domain //配置域名所指向服务器
cache_peer_domain web01 !test.domain1.com
cache_peer_domain web01 .domain1.com
cache_peer_domain web02 www.domain2.com
# cache_peer_access //访问权限,允许访问 web01 ,web02
cache_peer_access web01 allow all
cache_peer_access web02 allow all
这样,访问
domain1.com 除 test.domain1.com 都指向访问 web01 的服务器
www.domain2.com 即指向访问 web02 的服务器
squid 重新载入配置即可生效
# service squid reload
完成反向代理配置