Я хочу ограничить доступ к странице администратора на моем сервере Apache. Вот мое решение. Я установил сервер openvpn на том же сервере. Я подключаюсь к серверу с помощью openvpn от своего клиента. Страница состояния сервера работает должным образом. Однако расположение для страницы / admin дает 403 запрещено, даже когда я подключен к vpn. Я проверил свой внешний и внутренний ip клиента. Внешний ip - это в точности ip сервера, внутренний ip - 10.8.0.0/24. Почему я получаю 403 при работе server-status? Что мне не хватает?
Apache : httpd-2.4.6-67.el7.centos.6.x86_64
Os : CentOS Linux, выпуск 7.4.1708 (Core)
Openvpn : openvpn-2.4.4-1.el7.x86_64
Вот файлы конфигурации.
# Configure server mode and supply a VPN subnet
# for OpenVPN to draw client addresses from.
# The server will take 10.8.0.1 for itself,
# the rest will be made available to clients.
# Each client will be able to reach the server
# on 10.8.0.1. Comment this line out if you are
# ethernet bridging. See the man page for more info.
server 10.8.0.0 255.255.255.0
<VirtualHost 10.8.0.1:8081>
ServerName aaa.bbb.ccc.ddd # server's external ip
ServerAdmin admin@project.tld
<Location /server-status>
SetHandler server-status
Require ip 10.8.0.0/24
</Location>
</VirtualHost>
<VirtualHost 10.8.0.1 aaa.bbb.ccc.ddd:80>
ServerName aaa.bbb.ccc.ddd
ServerAdmin admin@project.tld
Redirect permanent / https://aaa.bbb.ccc.ddd
</VirtualHost>
<VirtualHost 10.8.0.1 aaa.bbb.ccc.ddd:443>
ServerName aaa.bbb.ccc.ddd
ServerAdmin admin@project.tld
Header always set Strict-Transport-Security "max-age=31536000;"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options nosniff
LoadModule wsgi_module modules/mod_wsgi.so
# Here is the problem
<Location /admin>
Require ip 10.8.0.0/24
Require ip aaa.bbb.ccc.ddd/32
</Location>
# Aliases
Alias /robots.txt /home/user/www/project.tld/statics/robots.txt
Alias /statics /home/user/www/project.tld/statics
<Directory /home/user/www/project.tld/statics>
Require all granted
</Directory>
<Directory /home/user/www/project.tld/project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess project.tld python-path=/home/user/www/project.tld/venv/bin:/home/user/www/project.tld/venv/lib64/python3.6/site-packages
WSGIProcessGroup project.tld
WSGIScriptAlias / /home/user/www/project.tld/project/wsgi.py
SSLEngine on
SSLCertificateFile /etc/ssl/certs/self_signed.crt
SSLCertificateKeyFile /etc/ssl/private/self_signed.key
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/json
</VirtualHost>
Listen 80
Listen 8081
ServerName aaa.bbb.ccc.ddd # server’s external ip
ServerSignature Off
ServerTokens Prod
DocumentRoot "/var/www/html"
Записи журнала:
От / var / log / httpd / access_log
10.8.0.6 - - [11/Jan/2018:14:49:08 +0200] "GET /server-status HTTP/1.1" 200 4800 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
Из / var / log / httpd / error_log
IP-адрес клиента - это мой внешний IP-адрес, предоставленный интернет-провайдером
[Thu Jan 11 14:49:15.085377 2018] [authz_core:error] [pid 28161] [client aaa.bbb.ccc.xxx:59536] AH01630: client denied by server configuration: /home/user/www/project.tld/project/wsgi.py
Позвольте мне ответить на свой вопрос, кто-то с аналогичной конфигурацией также может решить свою проблему. Согласно моим исследованиям; если серверы apache и открытые VPN находятся на одной машине. Клиент подключается к VPN и пытается получить доступ к веб-серверу, используя общедоступный IP-адрес сервера, тогда трафик не отправляется через VPN, поэтому я видел общедоступный IP-адрес своего интернет-провайдера в файлах журнала. Чтобы получить доступ к веб-серверу через туннель VPN, он должен быть доступен по внутреннему IP-адресу сервера. Чтобы решить свою проблему, я просто выделил второй виртуальный хост, который перенаправлял http-трафик на https через общедоступный IP-адрес, и проблема исчезла.