Apache ProxyPass Разрешить только с IPv4-адресов Pingdom - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть конфигурация apache2 vHost с ProxyPass / ProxyPassReverse, и мне нужно ограничить доступ к некоторым статическим IP-адресам и ко всем IP-адресам Pingdom.

Список IP-адресов Pingdom представляет собой список файлов с одним 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.

Я скачал список IP-адресов Pingdom, так как я не нашел никакого решения для чтения списканепосредственно с их веб-сайта.

Разрешить / Запретить работает должным образом, пока я не настроил 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 этого нет.

Как должно выглядеть мое правило, чтобы оно работало как положено?

1 Ответ

0 голосов
/ 15 февраля 2019

Я нашел рабочее решение.

Я настроил следующий cronjob для получения текущего списка IPv4 зондов Pingdom каждый час:

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>
...