Назад | Перейти на главную страницу

Блокировка phpmyadmin из Интернета, разрешить только из локальной сети в nginx

Я запускаю 2 веб-сайта в стеке LEMP с nginx, настроенным как обратный прокси-сервер. Я успешно установил phpmyadmin в корневую папку одного из корневых каталогов моих сайтов. Когда я перехожу на www.example.com/phpmyadmin, я могу получить доступ к странице входа phpmyadmin в общедоступном Интернете, а также в своей локальной сети. Я бы хотел настроить nginx для блокировки любого трафика phpmyadmin, который исходит не из моей локальной сети. В настоящее время у меня также есть папка / admin в корне моего сайта, и я УСПЕШНО настроил способ блокировать весь трафик в эту папку, который исходит не из моей локальной сети. Я решил, что заблокировать phpmyadmin из внешнего мира будет так же просто, используя те же строки виртуальной конфигурации ngninx, которые я использовал для блокировки каталога / admin /, но просто изменив местоположение на / phpmyadmin. Однако при этом phpmyadmin по-прежнему блокируется в локальной сети.

Ниже приведена конфигурация моего виртуального хоста nginx для example.com. Вы можете увидеть, какие конфигурации блокировки работают и не работают, как указано в комментариях. Помогите исправить # Нерабочие строки. Примечание. Локальный IP-адрес моего сервера 192.168.1.20.

server {
        listen 80;
        listen [::]:80;
        server_name example.com  www.example.com;
        return 301 https://$host$request_uri;
}

server {
        ####
        # SSL configuration
        ####

        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        ssl on;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;

        # Modern SSL Security rating
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;

        # HSTS (ngx_http_headers_module is required) (63072000 seconds)
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains" always;

        # OCSP Stapling
        ssl_stapling on;
        ssl_stapling_verify on;

        # verify chain of trust of OCSP response using Root CA and Intermediate certs
        ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

        # replace with the IP address of your resolver
        resolver 1.1.1.1 1.0.0.1;

        # Your website name goes here.
        server_name example.com  www.example.com;
        root /var/www/example.com;

        # Error & Access Logs
        error_log /var/www/example.com.logs/error.log error;
        access_log /var/www/example.com.logs/access.log;

        ## This should be in your http block and if it is, it's not needed here.
        index index.php;

        location ~ /.well-known {
                allow all;
        }

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        location / {
        # try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php?$args;
        }

        # Cache Static Files For As Long As Possible
        location ~*
        \.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$
                {
                access_log off;
                log_not_found off;
                expires max;
        }

        # Security Settings For Better Privacy Deny Hidden Files
        location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
        }

        # Disallow PHP In Upload Folder
        location /wp-content/uploads/ {
                location ~ \.php$ {
                        deny all;
                }
        }
        # LAN ONLY ACCESS WORKING
        # Only allow access of /admin via LAN & block access from internet # WORKING
        location ^~ /admin {
                allow 192.168.1.0/24;
                deny all;
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
        }
        # LAN ONLY ACCESS NOT WORKING!!!
        # Only allow access of /phpmyadmin from LAN & block access from internet # NOT WORKING
        location ^~ /phpmyadmin {
                allow 192.168.1.0/24;
                deny all;
                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass local_php;
                fastcgi_buffers 16 16k;
                fastcgi_buffer_size 32k;
        }
        # LAN ONLY ACCESS WORKING
        # Only allow access to wp-login page from LAN & block access from internet # WORKING
        location ~ /wp-login.php {
                allow 192.168.1.0/24;
                deny all;
                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass local_php;
                fastcgi_buffers 16 16k;
                fastcgi_buffer_size 32k;
        }

        location ~ \.php$ {
                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass local_php;
                fastcgi_buffers 16 16k;
                fastcgi_buffer_size 32k;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}

Какие изменения в конфигурационном файле моего виртуального хоста я должен внести, чтобы правильно ограничить phpmyadmin моей локальной сетью в Nginx?

Вы можете использовать правила разрешения / запрета:

stream {
    #...
    server {
        #deny   192.168.1.2;
        allow  192.168.1.1/24;
        deny   all;
    }
}