Защищаем и прячем админку через .htaccess

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

Сегодня я расскажу как справился с проблемой, что советую и вам сделать на всякий случай у себя.

Соль всей ситуации в том, что сам процесс перебора пароля создавал нагрузку на сервер, т.к. шло обращение к БД. Установленный плагин Login Lockdown справлялся со свое работой, но злоумышленники постоянно меняли свой IP.

Это стало известно после анализа файла логов сервера. Если вы так же в будущем будете анализировать данный файл, то не забудьте исключить свой компьютер из списка. Для начала узнайте как проверить ip в офисе и дома.

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

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

Как сменить адрес админки WordPress

Раньше публиковал такую статью Меняем URL страницы авторизации на WordPress. Здесь вроде бы и похожий результат, но эффект и назначение другие.

Не забываем делать резервные копии файлов, с которыми работаем.

  • Для начала скопируем файл wp-login.php из корня сайта (там где лежит wp-config.php) на ftp к себе на компьютер.
  • Переименовываем его как душе угодно. Например vhod.php
  • Открываем этот файл бесплатной программой Notepad++ (или чем вам удобнее редактировать) и подменяем все вхождения фразы wp-login.php на vhod.php.

Сделать это быстро можно нажатием сочетания клавиш CTRL+F в Notepad++. Ну а в появившемся окне вводим:

как защитить админку

Вот так за секунду я заменил во всем файле нужное мне вхождение фразы. Попадалось оно 12 раз.

Новый файл закидываем на ftp.

Аналогичную штуку нужно будет провернуть в файле general-template.php, который найдете в папке wp-includes тут же на ftp. Т.е. меняете вхождение фразы wp-login.php на vhod.php, а само название файла не меняете!

Теперь там же в корне сайта у вас есть файл .htaccess. Тоже копируем его к себе на компьютер и открываем на редактирование (можно обычным блокнотом Windows Notepad). Вставляем такой кусок кода, который блокирует доступ всем к файлу wp-login.php

<Files wp-login.php>
Order Deny,Allow
Deny from all
</Files>

Именно данный шаг снял нагрузку, а так же спрятал форму авторизации. Нагрузка была снята за счет вставки представленного кода в .htaccess: если шло обращение к http://site.ru/wp-login.php, то отдавало 403 ошибку, а не 404.

Повторим кратко алгоритм работы:

  • Переименовываем файл wp-login.php на произвольное имя и подменяем в нем вхождения названия на новое.
  • Аналогично подменяем в файле general-template.php старое название wp-login.php на новое.
  • Прописываем в файле .htaccess запрет к доступу wp-login.php для всех

После обновления WordPress останется поправить только файл general-template.php. Но т.к. обновляется движок не так уж часто - это мелочь по сравнению с эффектом.

Ставим ограничение на вход по IP через .htaccess

В качестве дополнительных мер по защите сайта мною было принято ограничение на вход в админку по IP. Проблема решалась очень просто: создаем пустой файл .htaccess и добавляем в него такой код

order deny,allow
allow from 192.168.0.1
deny from all

Файл сохраняем и закидываем в папку wp-admin там же в корне сайта.

Вместо моего IP из примера поставьте свой настоящий. Притом можно добавить несколько IP с новой строки каждый:

order deny,allow
allow from 126.142.40.16
allow from 195.234.69.6
deny from all

Если IP динамический, то можете поставить цифры только до первой-второй-третьей точки:

order deny,allow
allow from 126.142.
allow from 195.234.69.
deny from all

На этом все.

Привет. Меня зовут Виталик и я автор этого блога, а так же Магазина WordPress https://wp-r.ru/.

Отблагодарить Z888279575784 R109400923968 или ЯД 41001651742138

Оказываю услуги по созданию и настройке сайтов на WordPress (верстка, натяжка).

Мои Контакты. Я в Twitter @mojWP. Смотри на Youtube. Читай RSS блога.

Опубликовано 42 комментария
  1. Андрей (129 комм.) says:
    http://zarobitok.ru/

    Виталий, отличные способы Вы собрали по защите админки в данном посте.
    Может стоило бы еще дописать (как ее создать) страницу 403, а то некоторые хостеры высвечивают свою страницу 403 со своими ссылками.

    • Виталий (1675 комм.) says:
      http://mojWP.ru/

      Это тема отдельной статьи)

  2. Вадим (13 комм.) says:
    http://av-finance.ru/

    Виталий, спасибо! Очень полезная статья, как всегда все доступно и без воды.
    Недавно перешел на плагин iThemes Security, у него тоже есть похожая функция, позволяющая спрятать админку, но я ее не использовал.
    И судя по логам этого плагина, блог брутфорсят регулярно. Как вы правильно подметили, одних плагинов, защищающих от перебора паролей, недостаточно.

  3. Максим (30 комм.) says:
    http://seoslim.ru

    Я сижу на Макхосте, так они сами меняют вход в админку по нескольку на в год.

    • Виталий (1675 комм.) says:
      http://mojWP.ru/

      Да, не только макхост такое делают. Писал об этом в статье.
      Но большинство хостеров не занимаются подобным. Думаю, через год-два начнут все, после очередных массовых атак.

  4. Сергей (11 комм.) says:
    http://webtous.ru/

    А файл general-template.php не изменятся разве после обновления версии движка? Каждый раз придется после апгрейда там менять?

    • Виталий (1675 комм.) says:
      http://mojWP.ru/

      Да, сорри, не упомянул про него. Сейчас поправлю.

  5. Андрей (16 комм.) says:
    http://bez-buhla.ru

    А файл vhod.php нужно заливать на сайт вместо wp-login.php или совместно с ним?

    • Виталий (1675 комм.) says:
      http://mojWP.ru/

      можно вместе. Все-равно он появится после обновления движка, поэтому и закрываем к нему доступ через htaccess

      • Андрей (16 комм.) says:
        http://bez-buhla.ru

        Понял. Спасибо.

  6. validcode (2 комм.) says:
    http://validcode.ru

    Расскажи, Виталий, людям как избавиться от проблемы, которая возникает от способа, который ты описал. Конкретно - после всех этих манипуляций не работает кнопка "выход" в админке и на сайте. Раз начал статью, заканчивай )

    • Виталий (1675 комм.) says:
      http://mojWP.ru/

      Благодарю за подсказку, Алексей. У вас как всегда каверзные вопросы.
      В статье есть такой код:

      <Files wp-login.php>
      Order Deny,Allow
      Deny from all
      </Files>

      Можно его немного видоизменить:

      <Files wp-login.php>
      Order Deny,Allow
      Deny from all
      Allow from 192.168.1.0
      </Files>

      Вместо 192.168.1.0 подставляем свой IP, либо его часть, если IP динамический в пределах какого-то ранга. Так же можно с новой строки аналогичным образом добавить сколько нужно IP.
      Немного не удобно, но если нужна уверенность и надежность, то приходится чем-то жертвовать. В данном случае тратой времени на вставку пару строчек кода. Надеюсь у вас есть это время и вы сделаете все без ошибок.

      • validcode (2 комм.) says:
        http://validcode.ru

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

        Так вот. Твое решение интересное, но это скорее костыль. Во-первых есть админы сайтов, которые не сидят на месте, а путешествуют и заходят на свои сайты с разных мест (на то он и фриланс). Во-вторых, выставляя динамический айпи мы опять же отсекаем часть юзеров, (речь идет о сайтах с доступной регистрацией и самих посетителях, которые когда-никогда да и нажмут на кнопку "Выйти").

        Так вот, возможно есть более универсальное решение этой проблемы? Что скажете?

        • Виталий (1675 комм.) says:
          http://mojWP.ru/

          К сожалению, Алексей, в данном вопросе я вам не помогу. Проанализировав функцию вылогирования я понял, что текущих моих знаний в кодексе WP не достаточно, т.к. здесь по клику идет редирект через форму wp-login.
          Если вас не устраивает представленное решение, то советую перейти на хостинг, который предоставляет прокладку для формы логина. Тогда отпадут вопросы.
          В противном случае могу дать контакты кодера, который для вас напишет решение и вы сможете поделиться через свой блог со всеми.

  7. Андрей (16 комм.) says:
    http://bez-buhla.ru

    А у меня в последнее время ОЧЕНЬ сильная нагрузка на сервер (хостинг) пошла. Выше описанные действия сделал давно. Сначала вроде помогло, а сейчас просто атакуют и все тут. Что делать?

    • Виталий (1675 комм.) says:
      http://mojWP.ru/

      Запросите у хостинга инфу на какой сайт или в какую его часть идет нагрузка. Предоставят логи или даже помогут, если нормальная ТП

  8. Константин (1 комм.) says:
    http://work-seo.ru/

    Благодарю за полезную информацию! Сам задумался о защите админки. Теперь все встало на свои места

  9. Александр (7 комм.) says:
    http://www.dary-prirody-altaya.ru/

    Здравствуйте Виталий. В таком способе защиты админки есть дырочка. Если вбить "адрес сайта/wp-admin", будет перенаправление на настоящий адрес админки. Не имеет значения, заблокирован доступ к файлу wp-login.php или нет. Я эту проблемку решил, проверьте на моем сайте. В файле general-template.php надо оставить: function wp_login_url($redirect = '', $force_reauth = false) {
    $login_url = site_url('wp-login.php', 'login'); Буду Вам признателен, если подскажите как сделать, чтобы на кнопках сайта убрать подчеркивание текста, видно через мозилу, сейчас отключен text-decoration для ссылок, по другому не смог убрать.

    • Виталий (1675 комм.) says:
      http://mojWP.ru/

      Добрый.
      Спасибо большое за дополнение.

      Относительно вашего подчеркивания. Если вы имеете ввиду в сайдбаре http://prntscr.com/6wwhwm , тоу вас для input вручную прописано border-top

      Если не этот блок, то уточните.

      • Александр (7 комм.) says:
        http://www.dary-prirody-altaya.ru/

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

        • Виталий (1675 комм.) says:
          http://mojWP.ru/

          Если честно, немного не понял: если вы отключили подчеркивание, то что нужно? Чтобы подчеркивание было только в теле статьи?
          Если так, то можно задать:
          article a {text-decoration: underline;}
          Либо только для ссылок в абзаце
          p a {text-decoration: underline;}
          Соответственно выключить подчеркивание как вы делали раньше для остальных.

          • Александр (7 комм.) says:
            http://www.dary-prirody-altaya.ru/

            Я пытался убрать подчеркивание в кнопках (еще раз повторюсь, видно оно было только в мозиле), но чтобы на всех ссылках сайта оно было, но так не получилось. А как Вы подсказали - все получилось. Я несколько дней ломал голову, хорошо что сегодня обновил вордпресс (пришлось опять "прятать" админку) и наткнулся на Вашу статью. Спасибо большое.

  10. Александр (7 комм.) says:
    http://www.dary-prirody-altaya.ru/

    Забыл, выход с админки будет работать корректно (с ним тоже проблемы при переименовывании входа).

  11. Рита Молчанова (2 комм.) says:
    http://ritabk.ru/

    Виталий, я все сделала как вы рекомендуете. Но в адмику не попала. Сайт пропал. Пришлось все вернуть назад. Правда я поставила плагин iThemes Security и еще у меня плагин кеширования. А про обновление wordpress не поняла. Я только перед этим обновилась до последней версии. Поясните, что не так сделала. Или это лишнее когда стоит плагин Security?

    • Виталий (1675 комм.) says:
      http://mojWP.ru/

      Про Security не подскажу - не пользуюсь.
      Обновление - ок.
      Что не так сделали - не знаю, я не видел что вы делали. Может не туда вставили код, не так переименовали и пр. Нужно видеть весь процесс или результат, чтобы сказать где у вас ошибка.

  12. Роман (1 комм.) says:
    http://webunlimited.ru

    Виталий, спасибо за статью, сделал по инструкции, надеюсь поможет
    5 WP-сайтов на сервере крутится, ложились в ошибку 504 Gateway Time-out из-за бутфорса формы логина (так сказали в саппорте хостера)

  13. Руслан (1 комм.) says:
    http://03compik.ru/

    Будьте добры подскажите как правильней закрыть админку? Никто (за исключением 5% пользователей) не набирает админку через wp-login.php, по опыту знаю все набирают wp-admin и тогда как бы вы не переименовали Ваш файл он тут же высветится (злоумышленик сразу увидит его) и вы переместитесь на страницу авторизации, так что ваш метод не о чем. Жду нового решения от Вас. Погугли везде типа вашего решения.

    • Андрей (129 комм.) says:
      http://zarobitok.ru/

      Читайте комментарии, в них иногда пользователи оставляют хорошие подсказки, (коммент от Александра)

  14. Ирина (2 комм.) says:

    ну как это сделать??? Если не до конца меняю general-template.php не пускает, а если полностью меняешь general-template.php, то через редирект всё видно(((

    • Александр (7 комм.) says:
      http://www.dary-prirody-altaya.ru

      Ирина, у Вас какая версия WordPress? В WordPress 4.4 это не работает (чавой то там напереобновляли). Я попробовал и не стал пока обновляться. Если у Вас другая версия, то скорее всего Вы где то ошибочку делаете. P.S. после выхода версии 4.4 увеличилось количество желающих посетить станицу входа в админку моего сайта.

  15. Ирина (2 комм.) says:

    Закон подлости...как раз вчера обновилась до 4.4((( я вчера тоже к Вам пыталась заглянуть, очёнь милый у Вас пёс)))

    • Александр (7 комм.) says:
      http://www.dary-prirody-altaya.ru

      Можно сделать откат из панели управления. Если собачка понравилась, могу подарить такую же, у меня их много 🙂

    • Александр (7 комм.) says:

      Есть еще простые способы защитить вход в админку, он проще и не важно какая версия. Просто удалить файл wp-login.php с хостинга. Можно заблокировать доступ к нему в .htaccess или просто заменить другим файлом с каким нибудь текстом или картинкой, кому как удобнее. А перед работой в админке устранить это препятствие через панель управления или FTP доступ.

  16. Василий (2 комм.) says:

    Доброго, все прекрасно, все работает, НО, если просто ввести сайт.ru/admin, то перебрасывает на измененную страницу админ входа, как это исправить, спасибо.

    • Василий (2 комм.) says:

      Нашел решение, "...нужно настроить простой редирект на главную страницу сайта. Для настройки редиректа будем использовать файл функции темы (functions.php). Но, при этом, если вы смените тему, то редирект перестанет работать. В конце файла(functions.php) добовляем код:

      /*редирект с wp-admin*/
      add_action( 'init', 'blockusers_init' );
      function blockusers_init() {
      if ( is_admin() && ! current_user_can( 'administrator' ) &&
      ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
      wp_redirect( home_url() );
      exit;
      }
      }

      /*редирект с wp-login.php*/
      function redirect_login_page() {
      $page_viewed = basename($_SERVER['REQUEST_URI']);

      if( $page_viewed == "wp-login.php?pass=1" ) {
      wp_redirect( home_url() );
      exit;
      }
      }
      add_action('init','redirect_login_page');

      /*редирект после выхода из админ панели*/
      function logout_page() {
      $login_page = home_url( 'wp-admin' );
      wp_redirect( $login_page . "?loggedout=true" );
      exit;
      }
      add_action('wp_logout','logout_page');

      Это нужно только для зарегистрированных пользователей. Чтобы после выхода в адресной строке не оставалось информационного мусора." Спасибо Максиму Зайцеву.

      • Александр (2 комм.) says:

        Благодарю Василий за нужный код, потому что у самого такая проблема была

  17. Юлия (4 комм.) says:

    Виталий, Здравствуйте! Все сделала как у вас в статье, потому что совсем достали злоумышленники! Две недели ходила счастливой, пока... не понадобилось самой зайти в админку! Теперь и мне показывает 403. Что можно сделать, помогите пожалуйста.. Свой ip я естественно вписала в папке wp-admin в файле htaccess.

    • Виталий (1675 комм.) says:
      http://mojWP.ru/

      Добрый.
      Уберите изменения и сделайте так http://mojwp.ru/double-login.html

  18. Artemiy (1 комм.) says:
    http://www.kdk-labs.ru

    Сижу на Макхосте. Из-за их редиректа админки не активируется новый пароль через ссылку. Вставляю ссылку типа http://site.ru/wp-login.php?action=rp&key=***... Макхости редиректит на свою страницу. И новый пароль не активируется. Скажите, как правильно ввести ссылку?

  19. Александр (2 комм.) says:

    Благодарю за прекрасный совет. Замечательно отрубает брутфорщиков

  20. Мария (1 комм.) says:

    Здравствуйте, подскажите пожалуйста, каждый день, один человек заходит ко мне на сайт и пытается подобрать пароль к логину админ, после чего его ip сразу автоматически блокируется, но длиться это уже полгода и я не могу понять, как он узнаёт адрес входа в админку, если она у меня переименована, при наборе /wp-admin и /wp-login.php выдаёт ошибку. логина админ нет в помине, но он как то находит страницу авторизации, Как так?

  21. Mr.Robot (1 комм.) says:

    а может это и не человек вовсе...

Не держи в себе. Выскажись.

Ваш e-mail не будет опубликован. Обязательные поля помечены *

© 2011-2016 | mojwp.ru | Копирование материала разрешено только с письменного согласия
WordPress: 13.74MB | MySQL:110 | 0,764sec
Премиальные плагины для CMS WordPress
Магазин WordPress WP-R.ru
Спасибо, не показывайте мне эту штуку больше!
Смотри мои обучающие видео на YouTube
Иван только что купил плагин ELT
https://wp-r.ru/plaginy/elt.html