mojwp.ru
Назад

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

Опубликовано: 08.09.2014
45
4051

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

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

ВНИМАНИЕ!!! Рекомендую способ двойной авторизации, вместо представленного на этой странице.

Соль всей ситуации в том, что сам процесс перебора пароля создавал нагрузку на сервер, т.к. шло обращение к БД. Установленный плагин 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


Order Deny,Allow
Deny from all

Именно данный шаг снял нагрузку, а так же спрятал форму авторизации. Нагрузка была снята за счет вставки представленного кода в .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

На этом все.

Автор:
Виталий
Поделиться
Похожие записи
Черкани пару строк
  • Андрей
    Опубликовано: 08.09.2014 Ответить на сообщение

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

    • Виталий
      Опубликовано: 09.09.2014 Ответить на сообщение

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

  • Вадим
    Опубликовано: 09.09.2014 Ответить на сообщение

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

  • Максим
    Опубликовано: 09.09.2014 Ответить на сообщение

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

    • Виталий
      Опубликовано: 09.09.2014 Ответить на сообщение

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

  • Сергей
    Опубликовано: 10.09.2014 Ответить на сообщение

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

    • Виталий
      Опубликовано: 10.09.2014 Ответить на сообщение

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

  • Андрей
    Опубликовано: 23.09.2014 Ответить на сообщение

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

    • Виталий
      Опубликовано: 24.09.2014 Ответить на сообщение

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

      • Андрей
        Опубликовано: 24.09.2014 Ответить на сообщение

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

  • validcode
    Опубликовано: 08.10.2014 Ответить на сообщение

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

    • Виталий
      Опубликовано: 08.10.2014 Ответить на сообщение

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

      
      Order Deny,Allow
      Deny from all
      

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

      
      Order Deny,Allow
      Deny from all
      Allow from 192.168.1.0
      

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

      • validcode
        Опубликовано: 08.10.2014 Ответить на сообщение

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

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

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

        • Виталий
          Опубликовано: 08.10.2014 Ответить на сообщение

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

    • Татьяна
      Опубликовано: 24.10.2017 Ответить на сообщение

      Кнопка "выход" заработает после того, как все вхождения wp-login.php в general-template.php' будут заменены на нужные.

  • Андрей
    Опубликовано: 28.10.2014 Ответить на сообщение

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

    • Виталий
      Опубликовано: 28.10.2014 Ответить на сообщение

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

  • Константин
    Опубликовано: 06.04.2015 Ответить на сообщение

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

  • Александр
    Опубликовано: 22.04.2015 Ответить на сообщение

    Здравствуйте Виталий. В таком способе защиты админки есть дырочка. Если вбить "адрес сайта/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 для ссылок, по другому не смог убрать.

    • Виталий
      Опубликовано: 22.04.2015 Ответить на сообщение

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

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

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

      • Александр
        Опубликовано: 22.04.2015 Ответить на сообщение

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

        • Виталий
          Опубликовано: 22.04.2015 Ответить на сообщение

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

          • Александр
            Опубликовано: 22.04.2015 Ответить на сообщение

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

  • Александр
    Опубликовано: 22.04.2015 Ответить на сообщение

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

  • Рита Молчанова
    Опубликовано: 21.05.2015 Ответить на сообщение

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

    • Виталий
      Опубликовано: 21.05.2015 Ответить на сообщение

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

  • Роман
    Опубликовано: 02.10.2015 Ответить на сообщение

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

  • Руслан
    Опубликовано: 19.10.2015 Ответить на сообщение

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

    • Андрей
      Опубликовано: 20.10.2015 Ответить на сообщение

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

  • Ирина
    Опубликовано: 22.12.2015 Ответить на сообщение

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

    • Александр
      Опубликовано: 22.12.2015 Ответить на сообщение

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

  • Ирина
    Опубликовано: 22.12.2015 Ответить на сообщение

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

    • Александр
      Опубликовано: 22.12.2015 Ответить на сообщение

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

    • Александр
      Опубликовано: 25.12.2015 Ответить на сообщение

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

  • Василий
    Опубликовано: 02.04.2016 Ответить на сообщение

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

    • Василий
      Опубликовано: 03.04.2016 Ответить на сообщение

      Нашел решение, "...нужно настроить простой редирект на главную страницу сайта. Для настройки редиректа будем использовать файл функции темы (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');

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

      • Александр
        Опубликовано: 16.07.2016 Ответить на сообщение

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

  • Юлия
    Опубликовано: 01.06.2016 Ответить на сообщение

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

    • Виталий
      Опубликовано: 02.06.2016 Ответить на сообщение

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

  • Artemiy
    Опубликовано: 04.06.2016 Ответить на сообщение

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

  • Александр
    Опубликовано: 15.07.2016 Ответить на сообщение

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

  • Мария
    Опубликовано: 31.08.2016 Ответить на сообщение

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

  • Mr.Robot
    Опубликовано: 01.10.2016 Ответить на сообщение

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

  • Андрей
    Опубликовано: 24.04.2017 Ответить на сообщение

    Вобщем ничего не получилось,всё сделал по шпаргалке,но просто перекидывает на переименованую страницу,админка так же доступна только показан другой адрес ((

  • Oleg
    Опубликовано: 17.05.2017 Ответить на сообщение

    Всё намного проще!!!!!!!!!!!!!!!!!!!!
    плагин WPS Hide Login!
    после установки!

    перейдите на страницу: Настройки — Общие, спуститесь в самый низ страницы, в поле Login url, введите новое название для страницы входа, нажмите — Сохранить изменения.

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

    Всё готово, теперь можно спать спокойно, ваш сайт в абсолютной безопасности.
    страница по адресу wp-login теперь не доступна, но на сайт можно входить и выходить без проблем!

Имя
Укажите своё имя и фамилию
E-mail
Без СПАМа, обещаем
Текст сообщения
Отправляя данную форму, вы соглашаетесь с политикой конфиденциальности и правилами нашего сайта.