Закрытие форм авторизации WordPress с помощью Nginx.

nginx wordpress ip

Свободный доступ к форме авторизации пользователей Word­Press-сайта, может стать серьезной угрозой для его безопасности. Даже если у вас надежный и стойкий пароль, то все равно не стоит предоставлять злоумышленникам возможность его брутфорса. Доступ к форме можно или ограничить с помощью пароля, или вообще запретить всем кроме себя.

Первый способ подразумевает установку пароля на доступ к форме авторизации пользователей и админ-панели Word­Press. Второй способ закрывает доступ к вышеуказанным частям сайта со всех ip-адресов кроме вашего. Способы просты в реализации, они работают на уровне сервера и не создают нагрузки на сайт, в отличии от плагинов. Но подойти они могут не всем владельцам сайтов.

Если на вашем сайте подразумевается возможность свободной регистрации пользователей, то лучше обратить внимание на плагины, например captcha от Google. Ну а если вы волк-одиночка и на сайте только ваша админская учетная запись, то эти способы как раз для вас.

Начнем с установки пакета apache2-utils позволяющего создавать и обрабатывать базовые файлы аутентификации.

Создадим каталог для .htpass­wd файлов.
Создадим файл аутентификации.

Закроем доступ к каталогу wp-admin и к файлу wp-login.php. Все прописывается в контексте serv­er {} отвечающим за конфигурацию сайта. Внутри контекста loca­tion ~* /wp-login.php, обязательно нужно указать свои опции обработки PHP, в противном случае файл wp-login.php будет просто сохраняться на жесткий диск.

Описанный способ надежен, но неудобен, хоть сервер и не просит пароли постоянно, но в начале сессии стабильно идет запрос пароля. К тому же, после ввода пароля на доступ, нужно вводить пароль от самого сайта. Поэтому существует второй способ, подразумевающий запрещение доступа со всех ip-адресов кроме разрешенных.

Работает это примерно следующим образом. Задаем два loca­tion-а /wp-login.php и /wp-admin. Директивой try_files обрабатываем все входящие запросы и отправляем их на обработку в loca­tion @deny, в котором по умолчанию запрещены запросы со всех ip-адресов (deny all), кроме разрешенных (allow). Точно также, как и в первом способе, не забываем указать обработку PHP в loca­tion @deny.

Разрешенных адресов может быть несколько, главное не забыть прописать - deny all.

Это в случае со статическими (постоянными) ip-адресами. А если ip-адрес динамический (меняющийся)? Тогда можно разрешить доступ для подсети, к которой принадлежит ваш адрес. Если вы не знаете свою подсеть, то ее можно рассчитать в онлайн-калькуляторе. Нужно только узнать свой текущий ip-адрес, указать маску подсети и нажать на расчет, потом останется разрешить доступ с полученного адреса.

Теперь, даже если адреса у вас будут меняться, они все равно будут входить в разрешенный диапазон, следовательно вы всегда получите доступ к админке сайта. Можно одновременно указывать и адреса и подсети.

Теперь при обращении по адресам вида mysite.com/wp-admin/ и  mysite.com/wp-login.php, всем неугодным будет отдаваться 403 страница (запрещено), а с разрешенных адресов доступ будет открыт. На моем сайте прижился именно этот способ.