Як забезпечити затримку входу в ssh


11

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

Я спробував кроки, надані за даним посиланням.

http://hostingfu.com/article/ssh-dictionary-attack-prevention-with-iptables

iptables -N SSH_CHECK
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_CHECK
iptables -A SSH_CHECK -m recent --set --name SSH
iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

У мене на моїй машині не встановлений модуль пам’яті, тому я не можу вносити жодних змін, пов’язаних із файлами пам’яті

Тож будь-який орган дозволить мені запропонувати інший спосіб зробити те саме?

У мене оголене ядро ​​Linux, яке працює на вбудованій платформі.


Чому ви хочете ввести затримку? Яка ваша кінцева мета?
CVn

Я хотів запобігти можливості нападу грубої сили.
Рам

3
Просто введення затримки в нових з'єднаннях не запобіжить грубій атаці. Вам потрібно переглянути інструменти, розроблені для вирішення вашої реальної проблеми. Я б запропонував почати з погляду на fail2ban, який спеціально розроблений для реагування на повторні записи журналу шляхом виконання заданих команд, і часто використовується спеціально для запобігання грубій спробі отримати несанкціонований доступ.
CVn

Це добре, Майкл, але я мушу це робити з наявною у мене інфраструктурою, як я можу вводити затримку кожного разу, коли я підключаюся через ssh.
Рам

2
Чувак, fail2banвикористовує точну інфраструктуру, яка вже є - ssh logs та iptables правила.
Шадур

Відповіді:


11

Спосіб №1 - відключення входу пароля

Якщо ви не вимагаєте дозволу входу пароля, то просто заборона їх дасть бажаний ефект. Просто додайте цей рядок до /etc/ssh/sshd_config:

PasswordAuthentication     no

Крім того, ви можете обмежити використання пароля певними користувачами, які використовують Matchоператора в sshd_config:

Match User root,foo,bar
    PasswordAuthentication no
Match User user1,user2
    PasswordAuthentication yes

Спосіб №2 - iptables

Ви також iptablesможете відстежувати невдалі спроби входу та скидати їх після певного порогу. Це схоже на ваш приклад з hostingfu, але його легше зрозуміти.

$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --set
$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

ПРИМІТКА . Перший рядок в основному створює правило, яке стосується лише пакетів, які використовуються для нових спроб з'єднання на ssh-порту. Другий рядок говорить про те, що якщо протягом 60 секунд буде більше 4 спроб IP-адреси, то будь-який трафік із цього IP-адреси повинен бути забитий. Це рішення не має значення, спроби в різних облікових записах користувачів чи ні.

Спосіб №3 - використовувати PAM

Я розумію, ви сказали, що у вас немає ПАМ, але якщо ви це зробили, ви можете затримати невдалі спроби входу. Якщо ви маєте намір просто затримати помилки входу в ssh, ви можете використовувати модуль PAM pam_faildelay. Цей модуль PAM, як правило, входить до суміші за замовчуванням.

У моїй системі Fedora 19 це частина установки за замовчуванням.

Приклад

Шукайте файли, пов’язані з pam_faildelay.

$ locate pam|grep -i delay
/usr/lib/security/pam_faildelay.so
/usr/lib64/security/pam_faildelay.so
/usr/share/doc/pam-1.1.6/html/sag-pam_faildelay.html
/usr/share/doc/pam-1.1.6/txts/README.pam_faildelay
/usr/share/man/man8/pam_faildelay.8.gz

Подивіться, які RPM вони надають:

$ rpm -qf /usr/share/man/man8/pam_faildelay.8.gz
pam-1.1.6-12.fc19.x86_64
pam-1.1.6-12.fc19.i686

Використання

Щоб створити затримку після відмови, ви просто додати такий рядок, як цей, у ваш sshdфайл конфігурації пам’яті. Знову ж на Fedora / CentOS / RHEL системах цей файл знаходиться тут: /etc/pam.d/sshd.

Щоб створити затримку на 10 секунд:

       auth  optional  pam_faildelay.so  delay=10000000

Затримка на 60 секунд:

       auth  optional  pam_faildelay.so  delay=60000000

Приклад

З затримкою 20 секунд, використовуючи вищевказаний метод, я змінив sshdконфігураційний файл PAM таким чином:

#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
auth       optional     pam_faildelay.so  delay=20000000
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin

Тепер, коли я входжу:

$ date
Tue Dec 17 09:16:30 EST 2013

$ ssh blah@localhost
blah@localhost's password: 
Permission denied, please try again.
blah@localhost's password: 

...Control + C....

$ date
Tue Dec 17 09:16:50 EST 2013

Список літератури


Завдяки @slm але знову - таки я не можу встановити модуль Пем і мій аутентифікації SSHD не з pam.Would ви хотіли б запропонувати який - небудь інший шлях навколо
Ram

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

Дякую ще раз @slm за вашу детальну відповідь, мені цікаво дотримуватися другого запропонованого вами методу. Попробую і повідомте результат, також він дасть мені затримку з першою спробою входу через ssh?
Рам

@AmitSinghTomar - ні, воно не повинно затягуватися лише після 4-х спроб. Коли значення --hitcount 4буде перевищено, правило зафіксує IP-адресу, яка порушить, протягом 60 секунд.
slm

Один момент, який я хотів знати від вас, щоб ваш 3-й метод роботи (PAM), чи вимагає, щоб ssh-аутентифікація повинна відбуватися через pam?
Рам

3

Вимкнути паролі. Ні паролів, ні грубої атаки.

Ви можете використовувати ssh-ключі для входу в систему - що повинно бути набагато безпечнішим і набагато складніше для взлому.


0

При чистому встановленні Ubuntu 16.04 з openssh-server, вже є затримка для неправильної спроби паролем, що перевищує нуль символів. Здається, затримка перевищує 1 секунду .

Для помилкової спроби пароля нульових символів немає затримки, тому зловмисник відразу визначить, що ваш пароль - це не порожня рядок, якщо він справді не є порожньою рядком. Оскільки порожній рядок, ймовірно, не дозволений як пароль, вони вже знають, що тому вони не збираються пробувати порожню рядок.

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