Воскресенье, 28.04.2024, 23:30
Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Общий форум » Заметки » Linux
Linux
aleksДата: Вторник, 23.11.2010, 10:45 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 67
Награды: 0
Репутация: 4
Статус: Offline
fail2ban

Вылетала ошибка. Кусочек лога:

fail2ban.actions.action: ERROR iptables -N fail2ban-ssh

Чтобы решить эту проблему открываем файлик /etc/fail2ban/action.d/iptables-multiport.conf. И находим там строчку actionstart и приводим этот раздел к такому виду:

actionstart = sleep ${RANDOM:0:1}.${RANDOM: -1:1}
iptables -N fail2ban-<name>
iptables -A fail2ban-<name> -j RETURN
iptables -I INPUT -p <protocol> -m multiport --dports <port> -j fail2ban-<name>

Потом находим actionstop и приводим к виду:

actionstop = sleep ${RANDOM:0:1}.${RANDOM: -1:1}
iptables -D INPUT -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
iptables -F fail2ban-<name>
iptables -X fail2ban-<name>

После этого перезагружаем

/etc/init.d/fail2ban reload

Бага вызвана тем, что fail2ban мультипоточный и при запуске нескольких процессов происходит race-condition - попытка добавить забаниваемого юзера до того, как правило fail2ban-name будет создано.

 
aleksДата: Вторник, 28.10.2014, 09:54 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 67
Награды: 0
Репутация: 4
Статус: Offline
Защита phpMyAdmin от брутфорса при помощи Fail2Ban
Подобрав имя пользователя и пароль, злоумышленник проникает в phpMyAdmin и как правило просто удаляет все БД к которым сумел добраться. Как правило, большинство phpMyAdmin защищены cookies аутентификаций, но при этом лог попыток авторизаций не ведется.
У многих возникает резонный вопрос, каким-же образом Fail2Ban сможет блокировать перебор паролей, если нет лога? Да вобщем совсем не
сложно, даже для начинающего программиста или системного администратора.
Все что нам понадобится, это базовые навыки PHP и немного внимательности. Итак начнем!

Логирование неудачных попыток входа в phpMyAdmin

Поскольку мы используем cookies аутентификацию, нам понадобится файл, в котором находятся функции cookies аутентификации, в CentOS он находится тут - /usr/share/phpMyAdmin/libraries/auth/cookie.auth.lib.php Копируем файл (на случай кривизны рук), далее открываем файл в текстовом редакторе и находим данную функцию:


Код
function PMA_auth_fails(){
      global $conn_error;

      // Deletes password cookie and displays the login form
      $GLOBALS['PMA_Config']->removeCookie('pmaPass-' . $GLOBALS['server']);

      if (! empty($GLOBALS['login_without_password_is_forbidden'])) {
          $conn_error = __('Login without a password is forbidden by configuration (see AllowNoPassword)');
      } elseif (! empty($GLOBALS['allowDeny_forbidden'])) {
          $conn_error = __('Access denied');
      } elseif (! empty($GLOBALS['no_activity'])) {
          $conn_error = sprintf(__('No activity within %s seconds; please log in again'), $GLOBALS['cfg']['LoginCookieValidity']);
          // Remember where we got timeout to return on same place
          if (PMA_getenv('SCRIPT_NAME')) {
              $GLOBALS['target'] = basename(PMA_getenv('SCRIPT_NAME'));
              // avoid "missing parameter: field" on re-entry
              if ('tbl_alter.php' == $GLOBALS['target']) {
                  $GLOBALS['target'] = 'tbl_structure.php';
              }
          }
      } elseif (PMA_DBI_getError()) {
          $conn_error = '#' . $GLOBALS['errno'] . ' ' . __('Cannot log in to the MySQL server');
      } else {
          $conn_error = __('Cannot log in to the MySQL server');
      }

     // needed for PHP-CGI (not need for FastCGI or mod-php)
      header('Cache-Control: no-store, no-cache, must-revalidate');
      header('Pragma: no-cache');

      PMA_auth();
}

И добавляем в функцию внесколько строк, которые собственно и добавят, в системный лог, сообщения о неудачных попытках авторизации в phpMyAdmin. B результате этих нехитрых манипуляций, мы получим следующий код:


Код
function PMA_auth_fails(){    global $conn_error;
       
     // Deletes password cookie and displays the login form
      $GLOBALS['PMA_Config']->removeCookie('pmaPass-' . $GLOBALS['server']);

      if (! empty($GLOBALS['login_without_password_is_forbidden'])) {
          $conn_error = __('Login without a password is forbidden by configuration (see AllowNoPassword)');
        $info_auth_error = 'ERROR AUTH phpMyAdmin (password empty)';
      } elseif (! empty($GLOBALS['allowDeny_forbidden'])) {
          $conn_error = __('Access denied');
        $info_auth_error = 'ERROR AUTH phpMyAdmin (access denied)';
      } elseif (! empty($GLOBALS['no_activity'])) {
          $conn_error = sprintf(__('No activity within %s seconds; please log in again'), $GLOBALS['cfg']['LoginCookieValidity']);
          $info_auth_error = NULL;
        // Remember where we got timeout to return on same place
          if (PMA_getenv('SCRIPT_NAME')) {
              $GLOBALS['target'] = basename(PMA_getenv('SCRIPT_NAME'));
              // avoid "missing parameter: field" on re-entry
              if ('tbl_alter.php' == $GLOBALS['target']) {
                  $GLOBALS['target'] = 'tbl_structure.php';
              }
          }
      } elseif (PMA_DBI_getError()) {
          $conn_error = '#' . $GLOBALS['errno'] . ' ' . __('Cannot log in to the MySQL server');
        $info_auth_error = 'ERROR AUTH phpMyAdmin (cannot log in to the MySQL server)';
      } else {
          $conn_error = __('Cannot log in to the MySQL server');
        $info_auth_error = 'ERROR AUTH phpMyAdmin (cannot log in to the MySQL server)';
      }

     // needed for PHP-CGI (not need for FastCGI or mod-php)
      header('Cache-Control: no-store, no-cache, must-revalidate');
      header('Pragma: no-cache');
       
     if(!empty($info_auth_error)){
           
        openlog("phpMyAdmin", LOG_PID | LOG_PERROR, LOG_LOCAL0);
         syslog(LOG_WARNING, $_SERVER['REMOTE_ADDR']." - ".$info_auth_error);
          closelog();
       
     }

      PMA_auth();
}

Теперь загружаем файл на сервер и пробуем авторизоваться в phpMyAdmin, указав некорректное имя пользователя или пароль. Далее если вы все
сделали правильно, в системном логе, которые находится (для CentOS) по адресу - /var/log/messages мы получим запись, примерно такого вида (где xxx.xxx.xxx.xxx ваш IP адрес):


Код
Apr 26 13:36:02 p150170 phpMyAdmin[21516]: xxx.xxx.xxx.xxx - ERROR AUTH phpMyAdmin

Теперь в данном логе, у нас будут фиксироваться, все неудачные попытки авторизации в phpMyAdmin. Можно приступать к настройке Fail2Ban, создав фильтр и правило блокировки. Заходим в директорию - /etc/fail2ban/filter.d/ и создаем там файл - phpmyadmin.conf
Открываем созданный нами файл для редактирования и вносим в него следующее правило:


Код
[Definition]failregex = <HOST> - ERROR AUTH phpMyAdmin
ignoreregex =

Настраиваем файл конфигурации

Открываем файл конфигурации Fail2Ban - /etc/fail2ban/jail.conf и вносим в него правило блокировки, для защиты phpMyAdmin. Указываем число неудачных попыток авторизации - 10, время блокировки злоумышленника - 3 часа (10800 секунд). Время блокировки и количество неудачных авторизаций, стоит подбирать самостоятельно, это строго индивидуально


Код
[phpmyadmin]enabled = true
filter = phpmyadmin
action = iptables-multiport
[name=phpMyAdmin, port="80,443", protocol=tcp]logpath = /var/log/messages
findtime  = 600
maxretry = 10
bantime = 10800

Проверяем корректность настройки

# fail2ban-regex /var/log/messages /etc/fail2ban/filter.d/phpmyadmin.conf

Перезапускаем Fail2Ban

# service fail2ban restart

В результате этих нехитрых манипуляций, все попытки подбора паролей к phpMyAdmin будут заканчиваться баном злоумышленника, а администратор сервера, сможет спокойно спать по ночам smile

Источник
 
Форум » Общий форум » Заметки » Linux
  • Страница 1 из 1
  • 1
Поиск:

Статистика Форума
Последние обновленные темы Самые популярные темы Самые активные Новые участники
vadbeur01:42
qVADro20:48
teravad12:07
didl303:56
tr01:00


Вверх
WMmail.ru - сервис почтовых рассылок Web-IP.ru - Система Активной Рекламы

Copyright dga.ucoz.ru © 2008 - 2017 | Конструктор сайтов - uCoz
Главная | Скачать софт | Скачать фильмы | Скачать игры | Скачать музыку | Скачать обои | Скачать книги | Sitemaprss
Все файлы и ссылки на файлы, выложенные на сайте, были найдены в сети интернет как свободно распространяемые и предоставлены лишь для ознакомления с ними, последующим удалением с вашего компьютера и покупкой (при необходимости) у авторов продукции. Если вы являетесь правообладателем какого либо контента и не желаете его свободного распространения, сообщите нам и нарушение будет устранено. Обратная связь