У нас недавно появился сервис, точнее я бы сказал, что с моей стороны это 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.