使用Docker拦截Squid代理

时间:2018-04-18 09:05:32

标签: docker proxy containers squid intercept

我正在使用squid版本3.5

我的目标是使用docker容器为每个用户创建一个透明(或称为拦截)代理,因此我不需要在用户中配置手动代理设置。

  

所以这就是我想要的:

     
      
  1. 访客登录系统(完成)
  2.   
  3. 登录后,系统记录了ID和IP(完成)
  4.   
  5. 在其他机器(我称之为“服务器泊坞窗”)中,我创建了一个容器,其中包含--name ID和IP以及 - 来自guest虚拟机的特定端口   (完成)
  6.   
  7. 为具有特定IP和PORT的用户创建iptables(已完成,但我不确定)
  8.   
  9. 如果客人想要连接到互联网,则访客必须通过该容器(尚未)
  10.   

示例:

  

ID:5114100100
IP:10.151.36.227
IP服务器泊坞:10.151.36.134
  港口:9001

第一步:我创建一个图像

iptables -t nat -A PREROUTING -i wlp3s0 -s 10.151.36.123 -p tcp --dport 80 -j DNAT --to 10.151.36.38:9001
iptables -t nat -A PREROUTING -i wlp3s0 -s 10.151.36.123 -p tcp --dport 443 -j DNAT --to 10.151.36.38:9001

第二步:我用iptables创建规则

visible_hostname X450LD

http_port 3128
http_access allow all

首先是我的squid.conf

HTTP Proxy 10.151.36.38
Port 9001

然后,如果我在浏览器客户端设置代理设置手册(我使用firefox)

acl SUBNETAJK src 10.151.36.0/24 
acl client1 src 10.151.36.227

acl SSL_ports port 443 
acl Safe_ports port 80 # http 
acl Safe_ports port 21 # ftp 
acl Safe_ports port 443 # https 
acl Safe_ports port 70 # gopher 
acl Safe_ports port 210 # wais 
acl Safe_ports port 1025-65535 # unregistered ports 
acl Safe_ports port 280 # http-mgmt 
acl Safe_ports port 488 # gss-http 
acl Safe_ports port 591 # filemaker 
acl Safe_ports port 777 # multiling http 
acl Safe_ports port 445 # windows update 
acl CONNECT method CONNECT 

http_port 3128
http_port 3129 intercept 
http_access allow SUBNETAJK
http_access deny all
http_access deny !Safe_ports 

never_direct allow all 

cache_mem 64 MB 
cache_swap_low 98 
cache_swap_high 99 

shutdown_lifetime 1 second 

visible_hostname X450LD

它工作正常

现在问题在于:

我想透明化。我尝试了每个教程/ github其他用户,并在容器中制作squid.conf,如下所示:

--publsh to 3129

我改变了docker run。我再次跑docker run -d -it --net bridge --name 5114100123_10.151.36.227 --publish 9001:3129 fourirakbar/debian-squid:version1

iptables -t nat -L

我没有改变iptables的规则。如果我在服务器泊坞窗中执行Chain PREROUTING (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL DNAT tcp -- 10.151.36.227 anywhere tcp dpt:https to:10.151.36.134:9001 DNAT tcp -- 10.151.36.227 anywhere tcp dpt:http to:10.151.36.134:9001 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination DOCKER all -- anywhere !127.0.0.0/8 ADDRTYPE match dst-type LOCAL Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 172.17.0.0/16 anywhere MASQUERADE all -- 172.18.0.0/16 anywhere MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:3129 Chain DOCKER (2 references) target prot opt source destination RETURN all -- anywhere anywhere RETURN all -- anywhere anywhere DNAT tcp -- anywhere anywhere tcp dpt:9001 to:172.17.0.2:3129 ,请执行以下操作:

elearning.if.its.ac.id

当我尝试打开1524042518.250 0 172.17.0.1 TCP_DENIED/403 4240 GET http://elearning.if.its.ac.id/ - HIER_NONE/- text/html 1524042518.293 0 172.17.0.1 TCP_DENIED/403 4341 GET http://x450ld:3128/squid-internal-static/icons/SN.png - HIER_NONE/- text/html 1524042525.444 201 172.17.0.1 TCP_DENIED/403 4192 GET http://monta.if.its.ac.id/ - HIER_NONE/- text/html 1524042525.521 0 172.17.0.1 TCP_DENIED/403 4225 GET http://x450ld:3128/squid-internal-static/icons/SN.png - HIER_NONE/- text/html 1524042525.580 0 172.17.0.1 TCP_DENIED/403 4187 GET http://monta.if.its.ac.id/favicon.ico - HIER_NONE/- text/html 之类的http网站时,出现错误拒绝访问。我尝试手动设置代理设置,我也有同样的错误。

任何人都知道如何解决这个问题?

更新acces.log:

mongoexport --db db_name --collection collection_name | sed '/"_id":/s/"_id":[^,]*,//' > file_name.json

0 个答案:

没有答案