apache 如何配置mod_proxy以阻止除一个站点之外的所有站点

sr4lhrrt  于 2023-03-19  发布在  Apache
关注(0)|答案(4)|浏览(143)

我正在尝试设置mod代理来阻止除特定域之外的所有流量。我可以使用ProxyBlock指令将其配置为阻止单个域,也可以使用ProxyBlock * 阻止所有流量。是否有办法阻止除一个域之外的所有流量?
谢谢你,

  • -安德鲁
kse8i1jr

kse8i1jr1#

在apache2.2上,你需要有2个proxy段。

ProxyRequests On
ProxyVia On

# block all domains except our target
<ProxyMatch ^((?!www\.proxytarget\.com).)*$>
   Order deny,allow
   Deny from all
</ProxyMatch>

# here goes your usual proxy configuration...
<ProxyMatch www\.proxytarget\.com >
   Order deny,allow
   Deny from all
   Allow from 127.0.0.1
</ProxyMatch>

在apache2.4上,这会容易得多,因为您可以使用If指令而不是regexp来反转域名的匹配。
注意:我从Invert match with regexp中获得了该正则表达式

1cklez4t

1cklez4t2#

试试看:

ProxyBlock *
ProxyPass <path> <destination>

看看有没有用。
编辑:我认为你必须用mod_rewrite来创造性地使用它(基本参考在http://httpd.apache.org/docs/current/rewrite/proxy.html):

RewriteCond  %{HTTP_HOST}    =allowtoproxy.com
RewriteRule  ^/(.*)$         http://proxytarget.com/$1 [P]
ProxyPassReverse / http://proxytarget.com/

试试看?

qeeaahzv

qeeaahzv3#

请尝试以下代码:

RewriteEngine On
# Testing URLs
RewriteCond %{HTTP_HOST} !google.co.uk [NC]
RewriteCond %{HTTP_HOST} !bbc.co.uk [NC]
RewriteCond %{HTTP_HOST} !amazon.com [NC]
RewriteCond %{HTTP_HOST} !centos.org [NC]
RewriteCond %{HTTP_HOST} !opensuse.org [NC]
# Url to redirect to if not in allowed list
RewriteRule (.*) http://example.org/notallowed.htm
njthzxwz

njthzxwz4#

Apache 2.4:这对我很有效:先否定一切,再有选择地给予。

ProxyRequests On
ProxyVia Off
AllowCONNECT 443 563 80

<Proxy *>
    Require all denied
</Proxy>

<ProxyMatch "^https?://[a-z]*\.?google\.com.*$">
    Require all granted
</ProxyMatch>

<ProxyMatch "^[a-z]*\.?google\.com:443$">
    Require all granted
</ProxyMatch>

请注意,HTTPS需要第二个ProxyMatch(带有:443),否则您的请求将获得:

Received HTTP code 403 from proxy after CONNECT

这意味着您的https通过,但SSL隧道被拒绝。
这适用于Apache侦听:80,使用以下请求
curl -x本地主机:80“https://www.google.com?q=mod_proxy&language=de“
但不是
curl -x本地主机:80“https://www.bing.com?q=google.com“
这是必要的,因为否则您可以通过伪造的查询字符串参数来绕过白名单。

相关问题