0

我有一个带有 ProxyPass / ProxyPassReverse 的 apache2 vHost 配置,需要限制对某些静态 IP 地址和所有 Pingdom IP 地址的访问。

Pingdom IP 地址列表是一个文件列表,每行一个 IP 地址:

5.172.196.188
5.178.78.77
13.232.220.164
23.22.2.46
23.83.129.219
23.111.152.74
.
.
.

完整的 IP 地址列表可以在https://my.pingdom.com/probes/ipv4找到。

我已经下载了 Pingdom IP 地址列表,因为我没有找到任何直接从他们的网站读取列表的解决方案。

只要我没有配置Allow from env=PINGDOM. 一旦我添加了前面提到的配置行,所有客户端 IP 地址都可以访问该站点。

<VirtualHost *:443>
        ServerAdmin contact@example.com
        ServerName site.example.com

        RewriteEngine on
        RewriteMap allowed "txt:/var/www/pingdom_ip_addresses"
        UnsetEnv PINGDOM
        RewriteCond ${allowed:%{REMOTE_ADDR}} ""
        RewriteRule ^ - [E=PINGDOM]

    <Proxy *>
        Order Deny,Allow
        Deny from all
        # Static IPs
        Allow from 1.2.3.10/32
        Allow from 1.2.3.20/32
        # Pingdom
        Allow from env=PINGDOM
    </Proxy>

        ProxyRequests           Off
        ProxyPreserveHost       On
        ProxyPass               / http://localhost:8080/example-site/
        ProxyPassReverse        / http://localhost:8080/example-site/

        SSLEngine ON
        SSLCertificateFile /etc/letsencrypt/live/site.example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/site.example.com/privkey.pem
</VirtualHost>

在这里找到了类似的解决方案:https ://stackoverflow.com/a/53012839

但是在那里,IP 地址列表文件确实1在每个 IP 地址旁边都有一个。Pingdom 列表没有这个。

我的规则需要如何按预期工作?

4

1 回答 1

0

我找到了一个可行的解决方案。

我已配置以下 cronjob 以每小时获取当前 Pingdom 探测 IPv4 列表:

PATH=/usr/local/bin:/usr/bin:/bin

0 * * * * www-data wget -t 1 -T 1 https://my.pingdom.com/probes/ipv4 -q -O - | sed -e 's/$/ 1/' > /var/www/pingdom_ip_addresses

Apache vHost 配置现在如下所示:

<VirtualHost *:443>
        ServerAdmin contact@example.com
        ServerName site.example.com

        RewriteEngine on
        UnsetEnv PINGDOM
        RewriteMap allowed "txt:/var/www/pingdom_ip_addresses"
        RewriteCond ${allowed:%{REMOTE_ADDR}} 1
        RewriteRule ^ - [E=PINGDOM]

        <Proxy *>
                Order Deny,Allow
                Deny from all
                # Static IPs
                Allow from 1.2.3.10/32
                Allow from 1.2.3.20/32
                # Pingdom
                Allow from env=PINGDOM
        </Proxy>

        ProxyRequests           Off
        ProxyPreserveHost       On
        ProxyPass               / http://localhost:8080/example-site/
        ProxyPassReverse        / http://localhost:8080/example-site/

        SSLEngine ON
        SSLCertificateFile /etc/letsencrypt/live/site.example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/site.example.com/privkey.pem
</VirtualHost>
于 2019-02-15T08:58:20.520 回答