AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[transparent-proxy](server)

Martin Hope
Zareh Kasparian
Asked: 2021-09-24 13:01:33 +0800 CST

带有子域通配符过滤的 Nginx 流块

  • 1

我已经将 Nginx 服务器设置为 L4 代理(带流模块的转发代理),在 nginx.conf 文件中具有以下配置;

stream {
resolver 8.8.8.8;
server {
    listen 443;
    ssl_preread on;
    proxy_connect_timeout 5s;
    proxy_pass $ssl_preread_server_name:$server_port;
  } 
}

一切正常,上面的配置。但假设我想限制传递给我的代理服务器的 URL 的访问。不是通过限制 IP 地址,而是通过 URL 名称。
我做了一项研究并设置了以下配置文件,不知何故我能够控制传递给我的代理的 URL。
但问题从这里开始。如果调用一个大型网站,因为它在后台加载了许多链接或子域,并且知道我已经限制了允许通过的 URL,并且通配符子域在流块中不起作用,所以我无法加载请求的网站完全地。
是否有解决方案让它在流块中用于支持域子域的通配符?我的新配置如下:

stream {


 map $ssl_preread_server_name $name {
     ipchicken.com ipchicken.com;
     www.bbc.com www.bbc.com;
     www.bbc.co.uk www.bbc.co.uk;
     bbci.co.uk bbci.co.uk;
}


server {

    resolver 8.8.8.8;
    listen 443;
    ssl_preread on;
    proxy_connect_timeout 5s;
    proxy_pass $name:$server_port;
   }
 }

 events {
}
nginx transparent-proxy
  • 1 个回答
  • 734 Views
Martin Hope
Trigus
Asked: 2021-08-28 15:12:53 +0800 CST

完全透明的反向代理

  • 0

我正在尝试设置以下内容:

┌──────────────────┐            ┌────────────────────┐           ┌─────────┐    
│                  │            │                    │           │         │    
│      Router      │            │                    │           │Server 1 │    
│       NAT        │Port forward│                    │           │         │    
│                  │ ────────►  │     Server 0       │           │HTTP >   │    
│                  │            │                    │           │HTTPS    │    
│                  │            │    1.example.com  ───────────► │redirect │    
│                  │            │    2.example.com  ────┐        └─────────┘    
└──────────────────┘            └────────────────────┘  │         192.168.178.8 
                                     192.168.178.4      │                       
                                                        │   ┌─────────┐         
                                                        │   │         │         
                                                        │   │         │         
                                                        │   │Server 2 │         
                                                        └─► │         │         
                                                            │HTTP only│         
                                                            │         │         
                                                            └─────────┘         
                                                            192.168.178.7       

我希望服务器 0 充当仅转发流量的完全透明代理。这样客户端就不会与服务器 0 建立 TLS 连接,而是直接与服务器 1/2 建立连接,并且在服务器 1/2 上基于 HTTP-01 挑战的自动证书生成和更新仍然有效。

subdomain ssl nginx reverse-proxy transparent-proxy
  • 1 个回答
  • 796 Views
Martin Hope
comctimert
Asked: 2021-07-28 18:22:11 +0800 CST

透明代理的正确定义是什么?

  • 0

透明代理的正确定义是什么?我看到该术语用于不需要配置但不修改请求的代理以及需要配置但不修改请求的代理。正确的定义是什么?

proxy transparent-proxy
  • 1 个回答
  • 54 Views
Martin Hope
Soklodez
Asked: 2021-03-05 03:55:14 +0800 CST

用于欺骗 DNS 请求的 Squid HTTP 透明代理

  • 1

我正在开发一个需要可远程访问的透明代理的安全项目。我已经设置了一个运行 Ubuntu 18.04 的 Azure VM,鱿鱼作为透明代理运行。我只关心通过代理路由外部 HTTP 流量。将连接到代理的客户端配置了一个 DNS 服务器,该服务器将所有请求欺骗到 VM 的 IP。

配置的问题是squid 没有根据 HTTP 请求的Host标头透明地代理 HTTP 请求,而是尝试连接到它们的原始目标 IP 地址(即返回到自身)。结果,在客户端访问HTTP网站(以http://scratchpads.org为例)时,出现如下错误:

The following error was encountered while trying to retrieve the URL: http://scratchpads.org/

    Connection to 10.0.1.4 failed

The system returned: (111) Connection refused

其中 10.0.1.4 是 VM 的内部 IP。

出于测试目的,squid 配置保持最小:

http_access allow all
http_port 3129
http_port 3128 intercept

VM上通过squid转发外部流量的iptables配置如下:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

尝试访问网站时的 squid 访问日志如下所示:

1614856056.293      0 [request source IP] TCP_MISS/503 4310 GET http://scratchpads.org/ - ORIGINAL_DST/10.0.1.4 text/html
1614856056.619      0 [request source IP] TCP_MISS/503 4218 GET http://scratchpads.org/favicon.ico - ORIGINAL_DST/10.0.1.4 text/html

我检查了 DNS 请求是否在 VM 上正确解析,并且来自机器的流量没有通过 squid 路由(如需要),因此没有转发循环。squid 启动日志、缓存日志或访问日志中也没有错误。我还尝试了各种 squid ACL 和 iptables 配置(设置 DNAT 和伪装规则),但均无效。

有谁知道我怎样才能根据标头将 HTTP 请求代理到其原始目的地Host,而不是返回到透明代理的 IP?

ubuntu domain-name-system squid transparent-proxy
  • 1 个回答
  • 432 Views
Martin Hope
NIK220V
Asked: 2020-05-16 03:25:03 +0800 CST

使用 NGINX/HAproxy 的透明 TCP 负载平衡

  • 0

我已经尝试了几天,但仍然无法让透明的 TCP 负载均衡器使用 HAproxy/NGINX 工作。

问题是:一切正常,直到我尝试启用透明度。NGINX 和 HAproxy 都进行负载平衡,但将 localhost 作为用户 IP。

我试图改变这一点:

  • 将它们更改为以 root 身份运行。

  • 对于 NGINX:

    • 尝试使用这篇文章: https ://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/#upstream-reach-external

    • 配置了 iptables,添加了路由表等。关于“默认网关应该是 NGINX 服务器 ip”的部分我不明白,因为 NGINX 和应用程序在没有任何容器的同一台机器上运行。

  • 对于 HAProxy:

    • 根据文章设置 iptables 并更改 sysctl 转发选项:https ://www.loadbalancer.org/blog/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/
    • 但是,我没有得到关于“但是,如果要使用客户端源 IP 地址,则 HAProxy 服务器必须位于返回流量的路径中”的部分。出于与 NGINX 相同的原因。

所以,一般的问题是:我在 xxxx:30000 上有 HAproxy/NGINX 负载平衡。在同一台机器上,我在 xxxx:30001 和 xxxx:30002 有应用程序。

如何负载平衡此配置?需要哪些额外的路由规则?我是否需要为某些重新路由创建一个虚拟子网?因为到目前为止,负载均衡器似乎可以连接到应用程序,但无法将答案返回给用户。

load-balancing nginx tcp transparent-proxy haproxy
  • 1 个回答
  • 1626 Views
Martin Hope
light9876
Asked: 2020-04-24 12:55:58 +0800 CST

使用 squid 过滤 http/https 成人内容的本地透明代理

  • 1

我想使用白名单过滤我所有的互联网(http 和 https)连接。

我听说过鱿鱼,所以我开始尝试运行它。我找到了两个主要教程:

https://wiki.squid-cache.org/ConfigExamples/Intercept/SslBumpExplicit

https://docs.diladele.com/tutorials/transparent_proxy_debian/iptables.html#redirect-http-and-https-traffic

还有一段视频:https ://www.youtube.com/watch?v=Bogdplu_lsE

首先我安装squid4AUR 包(Arch Linux),我通过启用来构建它

--with-openssl \
--enable-ssl-crtd \

我编辑配置文件 ( /etc/squid/squid.conf) 并添加:

# add a custom blocking rule:
acl block_websites dstdomain .org .io
http_access deny block_websites

http_port 3128 intercept
https_port 3129 intercept ssl-bump \
    cert=/etc/squid/ssl_cert/myCA.pem \
    generate-host-certificates=on \
    dynamic_cert_mem_cache_size=4MB
http_port 3127 ssl-bump \
    cert=/etc/squid/ssl_cert/myCA.pem \
    generate-host-certificates=on \
    dynamic_cert_mem_cache_size=4MB
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all

要生成 SSL 证书(用于 https 过滤),我正在做:

cd /etc/squid/ssl_cert
openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -extensions v3_ca -keyout myCA.pem -out myCA.pem
openssl x509 -in myCA.pem -outform DER -out myCA.der
# now add myCA.der to firefox
sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB

然后我使用 iptables 来转移一切:

sudo iptables -A INPUT -j ACCEPT -p tcp --dport 3128
sudo iptables -A INPUT -j ACCEPT -p tcp --dport 3129
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3128
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 127.0.0.1:3129

相应的iptables-save

*filter
:INPUT DROP [8:936]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3129 -j ACCEPT
COMMIT

*nat
:PREROUTING ACCEPT [8:936]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination :3128
-A PREROUTING -p tcp -m tcp --dport 443 -j DNAT --to-destination :3129
COMMIT

最后我启用鱿鱼:

sudo systemctl enable squid

但这不起作用(firefox 告诉我“我们无法连接到...的服务器”)。我究竟做错了什么?

squid https transparent-proxy
  • 3 个回答
  • 2561 Views
Martin Hope
Chul-Woong Yang
Asked: 2020-04-17 04:21:14 +0800 CST

为什么在网络命名空间分离的透明代理设置中不会发生 iptables NAT?

  • 2

我正在尝试在我的主机上设置透明代理网络。

真正的客户端和代理目标是容器,但在这个实验中,我使用 netns(网络命名空间)分隔的环境。

为了透明地将客户端流量重定向到代理,我使用策略路由。

 Client (C)         Proxy (P)
 10.10.1.1/24      10.10.2.1/24
     veth0             veth0
      |                 |
   veth pair         veth pair
      |                 |
  -----------(HOST)--------------
 client-veth0       proxy-veth0
 10.10.1.2/24      10.10.2.2/24
      |                 |            172.16.202.30
      +-----------------+-------------- enp4s0 ---- INTERNET

# Policy Routing on Host
# [Client->Proxy]
# ip rule:  from 10.10.1.0/24 iif client-veth0 lookup 100
# ip route: (100) default via 10.10.2.1 dev proxy-veth0
# [Proxy->Internet]
# ip route: (master) default via 172.16.202.1 dev enp4s0 proto static metric 100
# iptables: -t nat -A POSTROUTING -s 10.10.1.1/32 -o enp4s0 -j MASQUERADE
# [Internet->Proxy]
# ip rule:  from all to 10.10.1.0/24 iif enp4s0 lookup 100
# ip route: (100) default via 10.10.2.1 dev proxy-veth0
# [Proxy->Client]
# ip rule:  from all to 10.10.1.0/24 iif proxy-veth0 lookup 101
# ip route: (101) default via 10.10.1.1 dev client-veth0

问题是,当我从客户端 ping 8.8.8.8 时,在客户端 netns 中,源 IP 伪装不会发生。 iptables 伪装规则不匹配,默认为 ACCEPT 。我希望 enp4s0 上的 tcpdump 显示172.16.202.30 --> 8.8.8.8,但它显示10.10.1.1 --> 8.8.8.8,没有源 IP 伪装。

我在互联网线路上记录了 pcap 以澄清 SNAT 不会发生。client_to_goolge从 enp4s0 之外的单独机器记录:

$ tcpdump -r client_to_google -n
reading from file client_to_google, link-type EN10MB (Ethernet)
23:35:40.852257 IP 10.10.1.1 > 8.8.8.8: ICMP echo request, id 14867, seq 1, length 64
23:35:41.865269 IP 10.10.1.1 > 8.8.8.8: ICMP echo request, id 14867, seq 2, length 64

当我检查 iptables mangle 表时,数据包按给定策略流动:

  PREROUTING: client-veth0, 10.10.1.1 --> 8.8.8.8
  POSTROUTING: proxy-veth0, 10.10.1.1 --> 8.8.8.8
  PREROUTING: proxy-veth0, 10.10.1.1 --> 8.8.8.8
  POSTROUTING: enp4s0, 10.10.1.1 --> 8.8.8.8

proxy-veth0但是,当我在输出界面上更改伪装规则时,像这样iptables: -t nat -A POSTROUTING -s 10.10.10.1/32 -o proxy-veth0 -j MASQUERADE,伪装发生了。即 10.10.2.2 --> 8.8.8.8数据包被捕获。

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
...
11       0     0 MASQUERADE  all  --  *      enp4s0  10.10.1.1            0.0.0.0/0
12       1    84 MASQUERADE  all  --  *      proxy-veth0  10.10.1.1            0.0.0.0/0

上表显示规则#11enp4s0输出条件未触发。在使用规则#11 进行多次测试后插入规则#12。规则 #12 表明proxy-veth0输出条件确实触发了。enp4s0主网卡和proxy-veth0使用 iptables 的虚拟接口之间有什么区别吗?

任何意见将不胜感激,谢谢。

iptables transparent-proxy masquerade policy-routing
  • 2 个回答
  • 2208 Views
Martin Hope
cvanorman
Asked: 2020-02-29 13:04:24 +0800 CST

带有 Nginx 反向代理的代理协议

  • 1

概述

我有一个指向 SaaS 应用程序 (BigCommerce) 的 Nginx 反向代理设置。虽然我的配置运行良好,但我无法确保客户端 IP显示在 SaaS 后端而不是反向代理 IP中。在 SaaS 后端,没有添加或使用受信任 IP 地址列表的机制set_real_ip_from,real_ip_header因此我的任务是proxy_protocol在反向代理上实施,以确保 IP 标头使用客户端的 IP 而不是通过反向代理传递它自己的。

配置

在http server上下文中

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host:$server_port;

    # support http 1.1 persistent connections
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

问题

当我在 http 服务器上下文(例如)中启用proxy_protocol我的指令时,我在 nginx中收到一个错误,在我的浏览器中收到一个错误。listenlisten 443 ssl http2 proxy_protocolBroken Headerconnection_reset

此外,我尝试proxy_protocol通过stream上下文启用,因为它在 Nginx 的“接受代理协议”文档中指定:

在stream上下文中

stream {
    server {
        listen 12345;
        proxy_pass example.com:12345;
        proxy_protocol on;
    }
}

我不熟悉,proxy_protocol所以我不知道我缺少什么才能使它正常工作。

从技术上讲,我真的试图让我的反向代理成为“透明代理”,但它似乎不适用于 SaaS 后端,因为它记录的是代理 IP 而不是客户端 IP。

nginx reverse-proxy transparent-proxy
  • 1 个回答
  • 8932 Views
Martin Hope
KreaByte
Asked: 2016-10-19 21:32:52 +0800 CST

配置 Squid 代理服务器或 pfsense 实现 WLAN URL 日志记录

  • 1

使用 Squid 代理服务器和 pfsense 超出了我的舒适范围,我设法在 Ubuntu 服务器上安装 Squid 并为其提供静态 IP,并在将 HTTP_access 设置为允许所有人后通过 LAN 连接到它。我的最终目标只是“简单地”记录在我的无线网络上访问的每个 URL,尝试了 OpenDNS,但它只显示域而不是谁去了哪里。

我相信 pfsense 只能作为路由器本身安装在实际的服务器或 PC 上?我喜欢这里的简单,并希望我仍然可以使用我的路由器来处理 DHCP 并作为一般路由器,但可能告诉路由器强制使用透明代理?我使用的是一台旧上网本,它硬连线到我的路由器用于 Squid 服务器,但仅用于 LAN。

我猜从未使用过 pfsense 或 MITM 代理或任何配置越少越好的东西,Squid 可能会让人不知所措。只是寻找我能做的最容易理解的设置。感谢您的时间。

logging url squid transparent-proxy pfsense
  • 1 个回答
  • 1316 Views
Martin Hope
nearlyheadlessarvie
Asked: 2016-10-02 09:13:29 +0800 CST

Ubuntu 路由器/网关上的 Squid TPROXY

  • 1

好的,所以我有一个 Ubuntu 盒子作为我的 LAN 的路由器/网关;带 3 个网卡,2 个用于 WAN,1 个用于本地网络。它被设置为在需要时在 WAN 和故障转移之间进行负载平衡。哦,我不得不在等式中加入鱿鱼。当前设置为 nat 将 http/s 端口重定向到 squid 端口,如下所示:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3126
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 3127

我相信它工作正常......但我不想停在那里。我想尝试 TPROXY,但我似乎无法让它工作。我在 access.log 中没有流量,并且客户端正在超时访问站点。

三角路由是不可能的,我认为我不应该使用网桥?所以下面是我的尝试:

iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -j TPROXY --on-ip 0.0.0.0 --on-port 3126 --tproxy-mark 0x1/0x1
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 443 -j TPROXY --on-ip 0.0.0.0 --on-port 3127 --tproxy-mark 0x1/0x1

# this is supposed to mark wan traffic going back to lan?
iptables -t mangle -A PREROUTING -i eth2 -p tcp -d 192.168.1.0/24 -j MARK --set-mark 0x1/0x1
iptables -t mangle -A PREROUTING -i eth3 -p tcp -d 192.168.1.0/24 -j MARK --set-mark 0x1/0x1

ip rule add fwmark 0x1/0x1 table 100
ip route add local 0.0.0.0/0 dev lo table 100

好吧,我不确定我的设置是否可以使用 TPROXY。如果这不可能,我将不得不暂时放弃。但如果是的话,有人会知道怎么做吗?

如果您的网络拓扑使用位于路由器内部的 squid 盒,它将数据包传递给 Squid。然后,您将需要显式添加一些额外的配置。 比如什么配置?

谢谢。

squid iptables transparent-proxy ubuntu-14.04
  • 1 个回答
  • 2583 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve