怎样配置linux9.0中的透明代理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样配置linux9.0中的透明代理相关的知识,希望对你有一定的参考价值。

我配置过也成功过,但是有人说代理很快为什么我配置就很慢谁教教我怎么解决 谢谢
在这里我提示一下不是说配置低的问题

1.什么是透明代理?
如果你问:我如何才能使得用户的浏览器不需要任何代理设置就能使用我的Squid cache代理服务器上网?,此时你就需要使用透明代理。透明代理让你的客户端不需设置任何代理,当包经过透时代理服务器时实际上被重定向到squid代理服务器的代理端口(如8080),即由本地代理服务器向外请求所需数据然后拷贝给客户端。

2.我需要什么样的环境才能实现透明代理?
a.客户端的windows PC的网关必须设成Squid代理服务器,因为既然你的browser中没有任何代理设置,你要访问某个站点时,包必须经经过squid代理服务器才能被重定向,故这是最基本的条件。
b.客户端必须正确设置DNS服务器。因为既然现在不用设置任何代理。则DNS必须由browser来解析,也就是要由客户端的PC中TCP/IP中设置的DNS服务器来正确解析出某个站点的IP地址来
c.服务器端可以安装squid代理服务器,1.x or 2.x版本均可。

3.配置Squid代理,启动透明代理功能
Squid-2
加下面的行到你的/etc/squid/squid.conf中
http_port 8080
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Squid-1.1
加下面的行到/etc/squid.conf

http_port 8080
httpd_accel virtual 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

4. 重启动squid. 用下面的命令:
#/usr/sbin/squid -k reconfigure
如提示内核不支持透明代理。则你需要重新编译内核,enable 透明代理的支持。

下面是你需要启动的内核项目:
[*] Network firewalls
[ ] Socket Filtering
[*] Unix domain sockets
[*] TCP/IP networking
[ ] IP: multicasting
[ ] IP: advanced router
[ ] IP: kernel level autoconfiguration
[*] IP: firewalling
[ ] IP: firewall packet netlink device
[*] IP: always defragment (required for masquerading)

[*] IP: transparent proxy support

5. 下面的命令针对Linux 2.2.x内核:
# Accept all on lookback
/sbin/ipchains -A input -j ACCEPT -i lo
#Accept my own IP, to prevent loops (repeat for each interface/alias)
/sbin/ipchains -A input -j ACCEPT -p tcp -d 192.168.11.1/32 80
#Send all traffic destined to port 80 to Squid on port 80
/sbin/ipchains -A input -j REDIRECT 8080 -p tcp -s 192.168.11.0/24 -d 0/0 80

下面的命令针对Linux 2.0.x内核:

# Accept all on loopback
ipfwadm -I -a accept -W lo
# Accept my own IP, to prevent loops (repeat for each interface/alias)
ipfwadm -I -a accept -P tcp -D 192.168.11.1/32 80
# Send all traffic destined to port 80 to Squid on port 3128
ipfwadm -I -a accept -P tcp -S 192.168.11.0/24 -D 0/0 80 -r 8080

6.应注意的问题:

a. 这种透明代理只能针对http协议,不能针对FTP协议
b. PC的默认网关应设成squid 代理服务器
c. 防火墙重定向规则在其它的input规则的前面,注意顺序。
如:
/etc/rc.d/rc.firewall:

#!/bin/sh
# rc.firewall Linux kernel firewalling rules
FW=/sbin/ipfwadm

# Flush rules, for testing purposes
for i in I O F # A # If we enabled accounting too
do
$FW -$i -f
done

# Default policies:
$FW -I -p rej # Incoming policy: reject (quick error)
$FW -O -p acc # Output policy: accept
$FW -F -p den # Forwarding policy: deny

# Input Rules:

# Loopback-interface (local access, eg, to local nameserver):
$FW -I -a acc -S localhost/32 -D localhost/32

# Local Ethernet-interface:

# Redirect to Squid proxy server:
$FW -I -a acc -P tcp -D default/0 80 -r 8080

# Accept packets from local network:
$FW -I -a acc -P all -S localnet/8 -D default/0 -W eth0

# Only required for other types of traffic (FTP, Telnet):

# Forward localnet with masquerading (udp and tcp, no icmp!):
$FW -F -a m -P tcp -S localnet/8 -D default/0
$FW -F -a m -P udp -S localnet/8 -D default/0

Here all traffic from the local LAN with any destination gets redirected to the
local port 8080. Rules can be viewed like this:

IP firewall input rules, default policy: reject
type prot source destination ports
acc all 127.0.0.1 127.0.0.1 n/a
acc/r tcp 10.0.0.0/8 0.0.0.0/0 * -> 80 => 8080
acc all 10.0.0.0/8 0.0.0.0/0 n/a
acc tcp 0.0.0.0/0 0.0.0.0/0 * -> *
参考技术A 1.什么是透明代理?
如果你问:我如何才能使得用户的浏览器不需要任何代理设置就能使用我的Squid cache代理服务器上网?,此时你就需要使用透明代理。透明代理让你的客户端不需设置任何代理,当包经过透时代理服务器时实际上被重定向到squid代理服务器的代理端口(如8080),即由本地代理服务器向外请求所需数据然后拷贝给客户端。

2.我需要什么样的环境才能实现透明代理?
a.客户端的windows PC的网关必须设成Squid代理服务器,因为既然你的browser中没有任何代理设置,你要访问某个站点时,包必须经经过squid代理服务器才能被重定向,故这是最基本的条件。
b.客户端必须正确设置DNS服务器。因为既然现在不用设置任何代理。则DNS必须由browser来解析,也就是要由客户端的PC中TCP/IP中设置的DNS服务器来正确解析出某个站点的IP地址来
c.服务器端可以安装squid代理服务器,1.x or 2.x版本均可。

3.配置Squid代理,启动透明代理功能
Squid-2
加下面的行到你的/etc/squid/squid.conf中
http_port 8080
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Squid-1.1
加下面的行到/etc/squid.conf

http_port 8080
httpd_accel virtual 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

4. 重启动squid. 用下面的命令:
#/usr/sbin/squid -k reconfigure
如提示内核不支持透明代理。则你需要重新编译内核,enable 透明代理的支持。

下面是你需要启动的内核项目:
[*] Network firewalls
[ ] Socket Filtering
[*] Unix domain sockets
[*] TCP/IP networking
[ ] IP: multicasting
[ ] IP: advanced router
[ ] IP: kernel level autoconfiguration
[*] IP: firewalling
[ ] IP: firewall packet netlink device
[*] IP: always defragment (required for masquerading)

[*] IP: transparent proxy support

5. 下面的命令针对Linux 2.2.x内核:
# Accept all on lookback
/sbin/ipchains -A input -j ACCEPT -i lo
#Accept my own IP, to prevent loops (repeat for each interface/alias)
/sbin/ipchains -A input -j ACCEPT -p tcp -d 192.168.11.1/32 80
#Send all traffic destined to port 80 to Squid on port 80
/sbin/ipchains -A input -j REDIRECT 8080 -p tcp -s 192.168.11.0/24 -d 0/0 80

下面的命令针对Linux 2.0.x内核:

# Accept all on loopback
ipfwadm -I -a accept -W lo
# Accept my own IP, to prevent loops (repeat for each interface/alias)
ipfwadm -I -a accept -P tcp -D 192.168.11.1/32 80
# Send all traffic destined to port 80 to Squid on port 3128
ipfwadm -I -a accept -P tcp -S 192.168.11.0/24 -D 0/0 80 -r 8080

6.应注意的问题:

a. 这种透明代理只能针对http协议,不能针对FTP协议
b. PC的默认网关应设成squid 代理服务器
c. 防火墙重定向规则在其它的input规则的前面,注意顺序。
如:
/etc/rc.d/rc.firewall:

#!/bin/sh
# rc.firewall Linux kernel firewalling rules
FW=/sbin/ipfwadm

# Flush rules, for testing purposes
for i in I O F # A # If we enabled accounting too
do
$FW -$i -f
done

# Default policies:
$FW -I -p rej # Incoming policy: reject (quick error)
$FW -O -p acc # Output policy: accept
$FW -F -p den # Forwarding policy: deny

# Input Rules:

# Loopback-interface (local access, eg, to local nameserver):
$FW -I -a acc -S localhost/32 -D localhost/32

# Local Ethernet-interface:

# Redirect to Squid proxy server:
$FW -I -a acc -P tcp -D default/0 80 -r 8080

# Accept packets from local network:
$FW -I -a acc -P all -S localnet/8 -D default/0 -W eth0

# Only required for other types of traffic (FTP, Telnet):

# Forward localnet with masquerading (udp and tcp, no icmp!):
$FW -F -a m -P tcp -S localnet/8 -D default/0
$FW -F -a m -P udp -S localnet/8 -D default/0

Here all traffic from the local LAN with any destination gets redirected to the
local port 8080. Rules can be viewed like this:

IP firewall input rules, default policy: reject
type prot source destination ports
acc all 127.0.0.1 127.0.0.1 n/a
acc/r tcp 10.0.0.0/8 0.0.0.0/0 * -> 80 => 8080
acc all 10.0.0.0/8 0.0.0.0/0 n/a
acc tcp 0.0.0.0/0 0.0.0.0/0 * -> *

squid服务之配置透明代理

透明代理提供的服务功能与传统代理时一致的,但是其“透明”的实现依赖于默认路由和防火墙的重定向策略,因此更适用于局域网主机服务,而不适合Internet中。
技术图片
项目大概流程如下:

在Linux网关上,构建squid为客户机访问Internet提供代理服务。
在局域网所有的客户机上,只需有正确的IP地址、默认网关和DNS,不需要手动指定代理服务器的地址、端口等信息(若指定了反而易出错)。关于客户机的DNS解析工作,最好还是通过正常的DNS服务器来提供,不建议抛给代理服务器来处理。
开始配置透明代理服务器:

squid服务的安装及传统代理的实施过程请参考博文:https://blog.51cto.com/14227204/2432301
配置squid支持透明代理:

[root@localhost /]# vim /etc/squid.conf
                  ..................
http_port 192.168.1.1:3128 transparent        #只在其中一个IP地址上提供服务,并支持透明模式
cache_effective_user squid
cache_effective_group squid
                 ......................

[root@localhost ~]# systemctl restart squid
[root@localhost ~]# vim /etc/sysctl.conf
          ....................
net.ipv4.ip_forward = 1             #开启路由转发功能,实现本机中不同网段的地址转发
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1

设置firewalld的重定向策略:
透明代理中的squid服务实际上时构建在Linux网关主机上的,因此只需设置正确的防火墙策略,就可以将内网主机访问Internet的数据包转交给squid进行处理,这就需要用到了防火墙的IP伪装与端口转发策略,其作用是实现本机端口的重定向,将访问网站协议http、https的外发数据包转交给本机的squid服务(3128端口)

[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# firewall-cmd --zone=external --add-interface=ens33
The interface is under control of NetworkManager, setting zone to ‘external‘.
success
[root@localhost ~]# firewall-cmd --zone=internal --add-interface=ens37
The interface is under control of NetworkManager, setting zone to ‘internal‘.
success
[root@localhost ~]# firewall-cmd --zone=external --add-service=http
success
[root@localhost ~]# firewall-cmd --zone=external --add-service=https
success
[root@localhost ~]# firewall-cmd --zone=external --add-port=3128/tcp
success
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens33 -p tcp --dport 80 -j REDIRECT --to-ports 3128
success
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens33 -p tcp --dport 443 -j REDIRECT --to-ports 3128
success
[root@localhost ~]# firewall-cmd --runtime-to-permanent
success

客户机验证:
客户机的网关需指向192.168.1.1的主机。这个不需要手动指定代理服务器。
技术图片

以上是关于怎样配置linux9.0中的透明代理的主要内容,如果未能解决你的问题,请参考以下文章

什么是透明代理

SQUID代理服务

SQUID透明代理服务器

Squid透明代理

如何用 Nginx 配置透明 HTTP 和 HTTPS 代理

如何用 Nginx 配置透明 HTTP 和 HTTPS 代理