Як зупинити / запобігти SSH bruteforce [закрито]


22

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

У мене є кореневий сервер Ubuntu з панеллю plesk.

Вчора ми з друзями помітили, що якість мовлення на нашому TS3 дуже погана. Я надіслав кілька пінгерів на сервер, і втрата пакету була дуже великою. Після цього я трохи погуглився і дізнався, що є auth.log. Я завантажив його і трохи прокрутив навколо, потім знайшов таке:

May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102 
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102

Схоже, хтось намагався увійти через SSH багато разів. Я трохи прокрутив навколо і побачив, що цей хтось намагається використовувати безліч різних імен користувачів:student, tech, psi, news,...

Сотні цих входів були відображені у файлі.

Я переглянув статистику трафіку на веб-сайті свого центру обробки даних. Це було лише зі швидкістю 17 Мб на годину. У мене магістраль 100 Мбіт, тому сама передача даних, здається, не є проблемою.

На даний момент я ніяк не можу отримати доступ до сервера.

Моє запитання: як я можу знову отримати доступ, як я можу придушити цю атаку та запобігти наступним атакам?


Ще я вивчаю свої речі на цьому відділі .... Але хіба це не буде корисним для стукання портів?
mjrider


Відповіді:


37

Як отримати доступ?

Не ясно, чому ви не можете отримати доступ до свого облікового запису.

Якщо ваш апарат знаходиться під атакою або великим навантаженням, вам слід поговорити з вашим провайдером про обмеження доступу (обмеження IP-адреси) або забороняти використання сервера в автономному режимі (відключення від Інтернету).

Також вам може знадобитися позадіапазонний доступ, з яким може допомогти ваш провайдер.

Якщо хтось порушив ваш сервер, можливо, вам доведеться відновити з резервного копіювання або використовувати зображення для відновлення.

Як запобігти атакам на ваш сервер, зокрема на SSH

кращий спосіб запобігти жорстоким входам?

Не дозволяйте їм в першу чергу потрапити на вашу машину! Існує маса способів зупинити грубі спроби, перш ніж вони потраплять до вашого хоста або навіть на рівні SSH.

Сказавши це, захистити операційну систему чимось на кшталт fail2ban - чудова ідея. http://en.wikipedia.org/wiki/Fail2ban

Fail2ban схожий на DenyHosts ... але на відміну від DenyHosts, який фокусується на SSH, fail2ban можна налаштувати для моніторингу будь-якої служби, яка записує вхід у файл журналу, а замість використання /etc/hosts.deny лише для блокування IP-адрес / хостів , fail2ban може використовувати Netfilter / iptables та TCP Wrappers /etc/hosts.deny.

Існує ряд важливих методів безпеки, які слід враховувати, щоб запобігти грубій реєстрації:

SSH:

  • Не дозволяйте root входити в систему
  • Не дозволяти паролі ssh (використовувати автентифікацію приватного ключа)
  • Не слухайте кожен інтерфейс
  • Створіть мережевий інтерфейс для SSH (наприклад, eth1), який відрізняється від інтерфейсу, від якого ви обслуговуєте запити (наприклад, eth0)
  • Не використовуйте поширені імена користувачів
  • Використовуйте список дозволів і дозвольте лише тим користувачам, яким потрібен доступ до SSH
  • Якщо вам потрібен доступ до Інтернету ... Обмежте доступ до обмеженого набору IP-адрес. Один статичний IP ідеальний, однак блокування його до xx0.0 / 16 краще, ніж 0.0.0.0/0
  • Якщо можливо, знайти спосіб підключення без доступу до Інтернету, таким чином ви зможете заборонити весь інтернет-трафік для SSH (наприклад, за допомогою AWS ви можете отримати пряме з'єднання, що обходить Інтернет, воно називається Direct Connect)
  • Використовуйте програмне забезпечення на зразок fail2ban, щоб зловити будь-які грубі напади
  • Переконайтесь, що ОС завжди в курсі оновлень, зокрема пакетів безпеки та ssh

Застосування:

  • Переконайтеся, що ваша програма завжди актуальна, зокрема пакети безпеки
  • Заблокуйте сторінки адміністратора програми. Багато з наведених вище порад стосуються також області адміністратора вашої програми.
  • Захист паролем області адміністратора, щось на зразок htpasswd для веб-консолі спроектує всі основні вразливості програми та створить додатковий бар'єр для входу
  • Блокування дозволів на файли. "Завантажувати папки" невідомо, що вони є точками входу для всіляких неприємних речей.
  • Розмістіть програму за приватною мережею та виставляйте лише балансир навантаження та стрибок (це типова установка в AWS за допомогою VPC)

1
Я встановив Fail2ban через help.ubuntu.com/community/Fail2ban Це здається дуже потужним та зручним для користувачів (повідомлення поштою, ...)

Мені надійшло повідомлення з мого центру обробки даних: сталася потік атаки (що це?), І це зробило з’єднання дуже поганим для багатьох серверів. Особливо це не була атака на мій сервер.


1
Цікаво. Тож здається, що мій центр обробки даних був об'єктом атаки. Але знати, що я окрім цього мене змусив, дуже добре. І Fail2ban - це справді хороший інструмент. Я прочитаю про Iptables та SSH Config наступні дні та спробую зробити його набагато безпечнішим.

3
Налаштуйте openssh для прослуховування порту, відмінного від 22, і налаштуйте iptables, щоб відмовитись від будь-якого приходу до порту 22. Якщо ви не розраховуєте ввійти в іншу країну, крім вашої батьківщини, створіть список блоків на countryipblocks.net/country_selection. php і використовувати його з iptables.
ThoriumBR

4

як я можу придушити цю атаку та запобігти наступним атакам

Зазвичай я змінюю порт ssh за замовчуванням з 22 на інший, як 1122. Це запобігає багато автоматичних атак від бота, але просте сканування портів може виявити його. У будь-якому випадку:

vi /etc/ssh/sshd_config

і відредагуйте порт 22 на порт 1122 , але цього недостатньо.

Правила автоматичних IPTables щодо грубої сили

Я використовую log2iptables https://github.com/theMiddleBlue/log2iptables замість Fail2ban, тому що це простий Bash-скрипт, який аналізує будь-який файл журналу з регулярним виразом та виконує iptables. Наприклад, коли відбувається 5 збігів, log2iptables скидає конкретну IP-адресу. Це здорово, тому що використовую API Telegram і може надіслати мені повідомлення на свій телефон, коли він знайде проблему :)

сподіваюся, що це допоможе!


8
Зі співвідношення між URL-адресою проекту та вашою ручкою SF я здогадуюсь, що ви причетні до цього проекту. Будь ласка, ознайомтеся з нашими вказівками щодо посилання на власні продукти, зокрема відзначивши вимогу, що " ви повинні розкрити свою приналежність у своїх відповідях ".
MadHatter підтримує Моніку

1

Я щойно склав це разом, пробіг кожні 15 хвилин як кронштейн тощо:

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done

0

Це моє альтернативне рішення для атак SSH. Ідея - продовжувати закривати демон SSH, якщо не використовувати. Ні відкритого порту, ні атаки. Можна спробувати. Це відкритий код https://github.com/indy99/nnet_port_guard


1
Ласкаво просимо до помилки сервера! Ваша відповідь говорить про те, що вирішення питання можна отримати на іншому веб-сайті. Родина стек-бірж веб-сайтів із запитами та запитаннями, як правило, нахмуриться на такий тип відповіді, оскільки інші веб-сайти можуть переміщуватися, видалятися чи змінюватися. Прочитайте, будь ласка, як я можу написати гарну відповідь? і подумайте переглянути свою відповідь, щоб включити кроки, необхідні для вирішення проблеми. І не забудьте взяти тур по сайту .
Павло

0

Автоматизоване рішення для Centos / RHEL для блокування поганих акторів

Ось сценарій для Centos для перевірки ssh невдалих логінів для недійсних облікових записів користувачів та неправильних паролів для дійсних облікових записів. Якщо IP-код джерела потрапив до нас більше ніж 3 рази і вже не в списку заборонити, він додається до списку заборонити. Я запускаю це кожні 15 хвилин від кореневого кронтабу. Я також заборонив входити кореневі файли через ssh, тому комбінація зберігає речі досить тихо.

     #/bin/bash
     # Save a copy of the existing hosts.deny file for safety
     cp /etc/hosts.deny /etc/hosts.deny.bak
     # Get a list of the offending IP addresses and process them
     for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
     do
     # Get the number of times this IP hit us
     hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
     # Check whether this IP is already blocked
     blocked=`grep $z /etc/hosts.deny | wc -l`
     # If they hit us more than 3 times and are not already on the deny list
     # add them to the deny list
     if [ $hits -gt 3 -a $blocked -eq 0 ]
     then
          echo "sshd : $z" >> /etc/hosts.deny
     fi
     done

1
Подивіться на fail2banте, що робить те ж саме, і є випробуваним на бій.
Патрік Мевзек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.