У нас недавно появился сервис, точнее я бы сказал, что с моей стороны это VPS система (Ubuntu 20.04 Server) на которой поднят Web-сервис nginx при обращении к системе по https отрабатывает proxy_pass к обработчику, который написал программист, взаимодействующий с серверами Мегамаркета. С этих проблем нет, но вот т.к. сервис внедряется, а значит и приходят дополнения, вот одно из них. А именно, если ваши серверы защищены firewall, необходимо открыть доступ для серверов Мегамаркета. Я же сделаю так, что доступ к нашей VPS системе будет идти исключительно с указанного списка.

Шаг №1: Приведу работоспособный пример настроенного nginx на VPS системе Ubuntu 20.04 с моей стороны:

ekzorchik@site:~$ cat /etc/nginx/sites-available/site.firma.ru.conf
server {
    server_name site.firma.ru;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/site.firma.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/site.firma.ru/privkey.pem; # managed by Certbot

location /sbermarket  {
        rewrite ^/sbermarket(.*)$ $1 break;
        proxy_pass http://127.0.0.1:8295;
        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_pass_request_headers on;
    }
}

server {
    if ($host = site.firma.ru) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

Шаг №2: Сторону куда перенаправляются запросы из вне через proxy_pass увы не смогу привести, т.к. это зона ответственности нашего разработчика, с которым мы совместными усилиями проводим внедрение.

Шаг №3: Сервис Мегамаркета прислал список своих серверов, которые нужно добавить на доступ к URL адресу нашего VPS + nginx:

46.243.227.235
193.35.96.0/25
193.35.97.0/25
37.220.160.0/21
46.235.184.0/21
93.93.88.0/21
78.41.104.0/21
185.17.168.0/22
212.193.144.0/20
195.208.30.60/30
195.209.64.0/21
195.209.80.0/20
195.208.64.0/20
195.209.75.0/25
86.110.216.43
193.35.96.0/25
193.35.97.0/25
178.216.96.233
217.73.60.216
185.12.30.74
185.12.30.77
217.73.62.174
217.73.62.177
185.12.30.48
217.73.62.216
178.216.97.40
5.8.180.79
5.8.180.202
5.8.180.243
5.8.181.109
5.8.181.145
81.23.10.169
185.12.28.201
185.12.29.100
185.12.29.248
185.12.30.73
185.12.30.196
185.12.30.217
185.102.122.4
185.102.122.15
194.242.120.42
194.242.120.186
194.242.120.187
217.73.57.4
217.73.57.15
217.73.57.40
217.73.57.41
217.73.57.121
217.73.57.143
217.73.57.144
217.73.57.149
217.73.57.158
217.73.57.180
217.73.57.193
217.73.57.194
217.73.57.203
217.73.57.204
217.73.57.234
217.73.57.251
217.73.57.252
217.73.58.12
217.73.58.61
217.73.58.110
217.73.58.119
217.73.58.139
217.73.59.37
217.73.59.91
217.73.59.225
217.73.59.240
217.73.60.41
217.73.60.57
217.73.60.90
217.73.60.202
217.73.60.220
217.73.62.18
217.73.62.154
217.73.62.157
217.73.62.162
217.73.62.184
46.243.143.91
46.243.227.235
46.243.142.64

Шаг №4: С учетом полученного списка вношу изменения в конфигурационный файл nginx на доступ к ресурсу.

На заметку: в файл allowips.conf добавляю также WAN-IP адреса компании где мы находимся и адрес 127.0.0.1

ekzorchik@site:~$ sudo nano /etc/nginx/conf.d/allowips.conf
allow   193.35.96.0/25;
allow   193.35.97.0/25;
allow   37.220.160.0/21;
allow   46.235.184.0/21;
allow   93.93.88.0/21;
allow   78.41.104.0/21;
allow   185.17.168.0/22;
allow   212.193.144.0/20;
allow   195.208.30.60/30;
allow   195.209.64.0/21;
allow   195.209.80.0/20;
allow   195.208.64.0/20;
allow   195.209.75.0/25;
allow   86.110.216.43;
allow   193.35.96.0/25;
allow   193.35.97.0/25;
allow   178.216.96.233;
allow   217.73.60.216;
allow   185.12.30.74;
allow   185.12.30.77;
allow   217.73.62.174;
allow   217.73.62.177;
allow   185.12.30.48;
allow   217.73.62.216;
allow   178.216.97.40;
allow   5.8.180.79;
allow   5.8.180.202;
allow   5.8.180.243;
allow   5.8.181.109;
allow   5.8.181.145;
allow   81.23.10.169;
allow   185.12.28.201;
allow   185.12.29.100;
allow   185.12.29.248;
allow   185.12.30.73;
allow   185.12.30.196;
allow   185.12.30.217;
allow   185.102.122.4;
allow   185.102.122.15;
allow   194.242.120.42;
allow   194.242.120.186;
allow   194.242.120.187;
allow   217.73.57.4;
allow   217.73.57.15;
allow   217.73.57.40;
allow   217.73.57.41;
allow   217.73.57.121;
allow   217.73.57.143;
allow   217.73.57.144;
allow   217.73.57.149;
allow   217.73.57.158;
allow   217.73.57.180;
allow   217.73.57.193;
allow   217.73.57.194;
allow   217.73.57.203;
allow   217.73.57.204;
allow   217.73.57.234;
allow   217.73.57.251;
allow   217.73.57.252;
allow   217.73.58.12;
allow   217.73.58.61;
allow   217.73.58.110;
allow   217.73.58.119;
allow   217.73.58.139;
allow   217.73.59.37;
allow   217.73.59.91;
allow   217.73.59.225;
allow   217.73.59.240;
allow   217.73.60.41;
allow   217.73.60.57;
allow   217.73.60.90;
allow   217.73.60.202;
allow   217.73.60.220;
allow   217.73.62.18;
allow   217.73.62.154;
allow   217.73.62.157;
allow   217.73.62.162;
allow   217.73.62.184;
allow   46.243.143.91;
allow   46.243.227.235;
allow   46.243.142.64;
allow   <WAN-IP/MASK PROVAIDER>
allow   <WAN-IP/MASK PROVAIDER>
allow   127.0.0.1;

ekzorchik@site:~$ sudo nano /etc/nginx/sites-available/site.firma.ru.conf
server {
    server_name site.firma.ru;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/site.firma.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/site.firma.ru/privkey.pem; # managed by Certbot

location /sbermarket  {
        include /etc/nginx/conf.d/allowips.conf;
        deny all;
        rewrite ^/sbermarket(.*)$ $1 break;
        proxy_pass http://127.0.0.1:8295;
        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_pass_request_headers on;

    }
}

server {
    if ($host = site.firma.ru) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

ekzorchik@site:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ekzorchik@site:~$ sudo nginx -s reload

Т.е. сейчас после внесенных дополнений кто-либо не из списка IP адресов обратится к узлу, то получил ответ 403 Forbidden, а в логах error.log:

ekzorchik@site:~$ sudo tail -f /var/log/nginx/error.log
2024/03/20 11:25:00 [error] 581468#581468: *3826 directory index of "/usr/share/nginx/html/" is forbidden, client: 164.115.146.116, server: site.firma.ru, request: "GET / HTTP/1.1", host: "site.firma.ru"
2024/03/20 11:25:01 [error] 581468#581468: *3826 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 164.115.146.116, server: site.firma.ru, request: "GET /favicon.ico HTTP/1.1", host: "site.firma.ru", referrer: https://site.firma.ru/

Т.е. список на доступ работает.

Итого я выполнил условие от сервиса Мегамаркет.

Ждем новых задач от них, что нам нужно еще сделать, а пока собственно и все, с уважением автор блога Олло Александр aka ekzorchik.