centos5、iptables、squid透明代理的简单配置

发布时间:2020-04-14编辑:脚本学堂
本文介绍下,在centos5中,使用squid与iptables配置透明代理的方法,有需要的朋友,参考下吧。

centos 5中配置透明代理,系统环境如下:
vmware虚拟机:centos5.8+iptables+squid+named*+bind*,均为yum安装。
eth0外部的 192.168.247.2
eth1内部的 192.168.20.2

使用root账号登陆。
一定要安装的yum install squid*,且要正确安装bind9(dns)服务。

创建一个shell/ target=_blank class=infotextkey>shell脚本
vi firewall.sh
内容如下:
 

复制代码 代码示例:
#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
modprobe iptable_nat
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 192.168.247.128
iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.20.0/24 --dport 80 -j REDIRECT --to-ports 3128

给予脚本执行权限,然后执行:
 

复制代码 代码示例:
chmod u+x firewall.sh
sh firewall.sh

修改squid的配置文件
vi /etc/squid/squid.conf

去掉下面几行前面的注释#:
http_access allow all
http_port 3128  transparent (这里的transparent一定要加,因为是透明代理的关系)

cache_dir ufs /var/spool/squid 100 16 256
cache_swap_low 90
cache_swap_high 95
access_log /var/log/squid/access.log squid

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

重启squid服务:
 

复制代码 代码示例:
service squid restart

成功之后,在另一台主机上设置centos的网关和dns,即可访问任意网页。
在centos上可以用 tail -f /var/log/squid/access.log查看,如有不断刷新的网页出现,则说明配置成功。

经完全测试无误后,保存squid服务:
 

复制代码 代码示例:
service squid save

以下是网上找来的一些有关squid透明代理的文章,供大家参考。

在两块网卡上配置网络参数信息:
 

复制代码 代码示例:

root@jbxue ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT=yes
TYPE=Ethernet
HWADDR=08:00:27:BC:6A:0D
IPADDR=172.17.1.221
PREFIX=24
GATEWAY=172.17.1.254
DNS1=172.16.5.133
NAME="System eth0"

[root@jbxue ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
ONBOOT=yes
TYPE=Ethernet
HWADDR=08:00:27:20:52:B2
IPADDR=192.168.1.254
PREFIX=24
NAME="System eth1"

[root@jbxue ~]# /etc/init.d/network restart #重新启动网卡

配置之后无法上网的,注意用linuxjishu/2952.html target=_blank class=infotextkey>route命令看一下默认路由。
建议eth1就不要设置网关了,有经验的同学,可以考虑配置默认路由。

2、配置squid及透明模式
 

复制代码 代码示例:
[root@jbxue ~]# cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
[root@jbxue ~]# vim /etc/squid/squid.conf

只为了教学的目的,所以直接把下面这行改成 http_access allow all
在自己配置透明代理时,请自行修改为相应的IP或端口。

# And finally deny all other access to this proxy
http_access deny all
注意:一定要在配置文件最下方增加下面这条语句,否则squid无法启动!

visible_hostname localhost
如果需要使用透明模式,在端口后面增加关键字"transparent"。
不使用透明模式的话,这行不用改,进行第3步之后可以直接跳到第7步测试了。
 

复制代码 代码示例:
# Squid normally listens to port 3128
http_port 3128 transparent

3、启动squid
 

复制代码 代码示例:
[root@jbxue ~]# service squid restart

4、为透明代理配置iptables,设置转发
创建一个shell脚本,开启网卡间流量交换,开启NAT,设置DNS转发,设置80端口流量全部转发到3128端口交给squid处理。
 

复制代码 代码示例:

[root@jbxue ~]# vim squid.sh #创建脚本文件
#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
modprobe iptable_nat
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 172.16.5.133
iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j REDIRECT --to-ports 3128

[root@jbxue ~]# chmod o+x squid.sh #给脚本执行权限
[root@jbxue ~]# ./squid.sh #启动脚本

5、将iptables指定保存到配置文件
 

复制代码 代码示例:
[root@jbxue ~]# service iptables save

6、重新启动iptables
 

复制代码 代码示例:
[root@jbxue ~]# service iptables restart

7、测试squid透明代理
客户端设置
IP地址:192.168.1.x/24
网关:192.168.1.254
DNS服务器:192.168.1.254

8、打开IE,不用设置代理(因为是透明代理),输入www.jb200.com,查看是否可以打开。

9、另外,介绍一个非透明代理的测试方法:
打开IE -> 工具 -> Internet选项 -> 连接 -> 局域网设置 -> 代理服务器,设置服务器IP为192.168.8.8,端口3128,确定。
之后,就可以通过代理服务器192.168.8.8上网了。

有关centos中透明代理的配置方法,就介绍这些吧,希望对大家有所帮助。