Рейтинг:17

Как я могу защитить SSH?

флаг id
Ali

Я проверяю /var/log/secure и у меня есть эти журналы:

9 июля 13:02:56 localhost sshd [30624]: недействительный пользователь-администратор с порта 223.196.172.1 37566
9 июля 13:02:57 localhost sshd [30624]: соединение закрыто недопустимым пользователем admin 223.196.172.1, порт 37566 [preauth]
9 июля 13:03:05 localhost sshd [30626]: недействительный пользователь-администратор с порта 223.196.174.150 61445
9 июля 13:03:05 localhost sshd [30626]: соединение закрыто недопустимым пользователем admin 223.196.174.150, порт 61445 [preauth]
9 июля 13:03:16 localhost sshd [30628]: неверный пользователь-администратор с порта 223.196.169.37 62329
9 июля 13:03:24 localhost sshd [30628]: соединение закрыто недопустимым пользователем admin 223.196.169.37, порт 62329 [preauth]
9 июля 13:03:29 localhost sshd [30630]: неверный пользователь-администратор с порта 223.196.169.37 64099
9 июля 13:03:30 localhost sshd [30630]: соединение закрыто недопустимым пользователем admin 223.196.169.37, порт 64099 [preauth]
9 июля 13:03:45 localhost sshd [30632]: недействительный пользователь-администратор с порта 223.196.174.150 22816
9 июля 13:03:46 localhost sshd [30632]: соединение закрыто недопустимым пользователем admin 223.196.174.150, порт 22816 [preauth]
9 июля 13:06:17 localhost sshd [30637]: недействительный пользователь-администратор с порта 223.196.168.33 33176
9 июля 13:06:17 localhost sshd [30637]: соединение закрыто недопустимым пользователем admin 223.196.168.33, порт 33176 [preauth]
9 июля 13:07:09 localhost sshd [30639]: недействительный пользователь-администратор с порта 223.196.173.152 61780
9 июля 13:07:25 localhost sshd [30641]: неверный пользователь-администратор с порта 223.196.168.33 54200
9 июля 13:07:26 localhost sshd [30641]: соединение закрыто недопустимым пользователем admin 223.196.168.33, порт 54200 [preauth]
...

Кажется, кто-то пытается войти по SSH. Я отключил вход от пользователя root и включил вход с открытым/закрытым ключом, но является ли это DDoS-атакой? И использует ли он RAM/CPU?

Что мне делать?

marcelm avatar
флаг ng
_"Я [...] разрешаю вход с открытым/закрытым ключом, ..."_ - Но вы также отключили вход с паролем?
marcelm avatar
флаг ng
[Этот ответ] (https://unix.stackexchange.com/a/503346/109651) также может представлять интерес.
Рейтинг:45
флаг br

Это обычный интернет-фоновый шум людей, сканирующих уязвимые серверы.

Вы можете добавить правило iptables для ограничения скорости входящих соединений (например, четыре за четыре минуты) для простого исправления (но это также заблокирует вас, если вы откроете слишком много соединений или кто-то подделает SYN-пакеты, исходящие с вашего адреса):

iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m недавние --update --seconds 240 --hitcount 4 --name ssh-v4 --mask 255.255.255.255 --rsource -j ОТКЛОНИТЬ --reject-с tcp-reset
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m недавние --set --name ssh-v4 --mask 255.255.255.255 --rsource -j ПРИНЯТЬ

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

флаг cn
как насчет смены порта ssh?
Michael Hampton avatar
флаг cz
@ njzk2 Это только доставляет неудобства. Боты рано или поздно найдут ваш альтернативный порт ssh.
флаг us
Больше работы по настройке? В Debian `apt-get install fail2ban` обеспечит вам защиту с разумными значениями по умолчанию.
LinuxSecurityFreak avatar
флаг ru
@MichaelHampton Есть 65535 портов, я почему-то сомневаюсь, что боты будут использовать такой диапазон, но я могу ошибаться. Вы знаете это по факту?
флаг br
@LinuxSecurityFreak, есть [shodan] (https://shodan.io).
Michael Hampton avatar
флаг cz
@LinuxSecurityFreak Я лично не меняю порт ssh, но я слышал многочисленные жалобы от людей, которые меняли на протяжении многих лет, и _все еще_ заставляли ботов пробовать ssh на выбранном ими новом порту, даже когда это не было чем-то очевидным, например, 2222.И, конечно же, Shodan сканирует все. Вы можете быть уверены, что они не единственные.
флаг au
@MichaelHampton Изменение порта избавит от *некоторых* ботов. И чем он неудобен (кроме первоначальной настройки)?
флаг cn
@jonbentley нужно помнить, чтобы изменить его в каждом клиенте, который вы хотите использовать для подключения. Security by Obscurity — это вообще не безопасность, вы можете арендовать пару машин AWS менее чем за 50 долларов, которые будут сканировать все адресное пространство IPv4 за пару часов. Лучше просто заблокировать нарушителей, чем пытаться спрятаться от них
флаг au
@hardillb «необходимость помнить» - это кажется очень специфичным для случая использования. Я думаю, что большинство людей не слишком часто переключаются на новых клиентов (или, если они переключаются на новые клиенты, вероятно, находятся под их контролем), и могут просто сохранить настройки один раз, а затем забыть об этом (используя, например, Ansible или Stow, если вы предоставляете новые машины часто). «Безопасность через неясность — это не безопасность» — распространенное заблуждение. *Сам по себе* это не безопасность, но это действительная часть эшелонированной защиты и может дать некоторые небольшие преимущества при правильном использовании.
Jason avatar
флаг cn
@LinuxSecurityFreak re: «Есть 65535 портов, я почему-то сомневаюсь, что боты возьмут такой диапазон» - я тоже сомневался в этом, пока не увидел клиента, который переместил порт примерно на 20502. Это было опубликовано на shodan.io как открытый порт, и служба была правильно идентифицирована. Впечатляющий. И отрезвляющий.
флаг de
У меня был оператор инфраструктуры, который давно рекомендовал мне сменить порты sshd, и я думал, что это полная фигня, как и многие комментарии здесь, но я все равно это сделал. И мы все еще получаем хлам. Но по сравнению с серверами, на которых мы _не изменили_ порты, они практически простаивают.Прошло 15 лет, и никакое количество Shodan-fu не указало большое количество ботов на наши серверы. YMMV. Это *не* безопасность по неизвестности. Это просто неизвестность. Безопасность достигается за счет использования надежных ключей ssh ​​для аутентификации, а не паролей. Также +1 за fail2ban :)
флаг se
@LinuxSecurityFreak Посмотрите на вопрос. Этот бот пробовал разные порты. Не порт 22. Так что для OP он уже столкнулся с ботом, который специально сканирует порты и не пытается использовать ssh на порту 22.
флаг tf
Я бы не стал использовать указанное слепое ограничение скорости, это значительно упрощает DoS-действие с вашего сервера, даже при случайном сканировании.
John Mee avatar
флаг il
Фактический личный опыт здесь: изменение номера порта, хотя и не настоящее решение, определенно снижает риск ... по крайней мере, на второстепенных хостах. В сочетании с аутентификацией по ключу было наименьшее соотношение усилий и вознаграждения — две измененные линии и нервный перезапуск.
флаг br
@Pelle, ограничение скорости указано для исходного IP-адреса, поэтому оно уязвимо «только» для целевого отказа в обслуживании.
флаг mx
@hardillb Да, это просто неясность, но часто неясности достаточно, чтобы сдержать нетривиальный процент атак здесь. Если вы не являетесь активной мишенью, большинство ботов вообще не будут пробовать какие-либо альтернативные порты (говоря о более чем десятилетнем опыте), поэтому просто смените порт, даже если это изменение на «Очевидного» альтернативного порта достаточно, чтобы значительно сократить количество злоумышленников, которые на самом деле представляют угрозу.
user avatar
флаг sa
@slebetman Это порт клиента, он не имеет ничего общего с портом сервера, поскольку, если бы он проверял разные порты для сервера, он не отображался бы в журналах SSH.
флаг tf
@SimonRichter: В таком случае продолжайте :-)
флаг in
Еще немного личного опыта: на практике fail2ban почти ничего не достигает. Все сканирование SSH, которое я получаю, происходит из ботнетов, где каждый удаленный хост пытается только 1 или 2 входа в систему, что недостаточно для запуска fail2ban (вы также можете увидеть это в журнале OP). Отключите вход с паролем и используйте только аутентификацию с открытым ключом.
Рейтинг:9
флаг in

Как упомянул @Simon Richter, это просто фоновый шум в Интернете, и вам не о чем беспокоиться. Вы должны убедиться в следующем:

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

Вот еще несколько рекомендаций вокруг SSH, а также контраргументы к основным аргументам «передовой практики».

Рейтинг:3
флаг in

Вы в Индии? Все перечисленные IP-адреса находятся в блоке:

223.196.160.0 - 223.196.191.255   

который согласно базе данных WHOIS отнесен к

описание: Andhra Pradesh State FiberNet Limited
адрес: 10-2-1, III этаж, комплекс FDC, AC Guards, Хайдарабад, Андхра-Прадеш-500028

Одним из краткосрочных решений является блокировка всего блока. 223.196.160.0/19 на брандмауэре, но это микроуправление IP-адресами и становится тяжелой битвой.


Вместо этого вы можете запретить ВСЕ ssh, кроме исходных IP-адресов, которые, как вы знаете, являются доверенными. Просто позаботьтесь о том, чтобы не заблокировать себя от своего собственного хоста. Если у вас нет статического IP-адреса, вы можете разрешить блокировку или, возможно, рассмотреть запуск VPN-сервера на хосте.

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

user10489 avatar
флаг nc
Или используйте стук портов, чтобы внести себя в белый список при изменении вашего IP.
Рейтинг:1
флаг in

Вот простой скрипт, который я написал для блокировки всех несанкционированных попыток входа на мой сервер разработки.

#!/бин/баш

бан=$HOME/banned.txt
b_log=/var/log/banned.log

журнал () {
кот $ бан | уникальный >> $b_log
}

l_log () {
последнийб | awk '{напечатать $3}' | sed -r '/(Пн|Вт|Ср|Чт|Пт|Сб|Вс|boot|tty2)/d' | сортировать | sed '/^$/d' | уникальный | тройник $ бан
}

уронить () {
для x в $(cat $ban); сделать iptables -A INPUT -s $x -j DROP; сделано
}

l_log
уронить
журнал
rm -f $бан
эхо > /var/журнал/btmp
iptables-сохранить

Если вы настроите скрипт на запуск через cron каждую минуту, это значительно уменьшит шум в ваших журналах и заблокирует нарушающие IP-адреса, что даст им всего 1 минуту, чтобы попытаться выполнить их грубую силу, прежде чем они будут заблокированы.

Было бы неплохо вставить свой IP-адрес и любые другие IP-адреса, с которыми вы получаете доступ к своему серверу, в брандмауэр. iptables -I ВВОД -s xxx.xx.xxx.xx -j ПРИНЯТЬ

Будет создан журнал всех заблокированных IP-адресов.

Criggie avatar
флаг in
Итак, вы берете выходные журналы fail2ban и навсегда удаляете эти исходные IP-адреса, используя правила iptables? Почему бы просто не настроить iptables так, чтобы плохие адреса оставались заблокированными дольше? Вы также рискуете заблокировать свои локальные IP-адреса, если неправильно наберете пароль или что-то подобное, тогда как у fail2ban есть опции «никогда не блокировать эти диапазоны».
HatLess avatar
флаг in
Нет. Fail2ban не использую, только iptables. Я получаю свой ввод от `lastb`, последних неудачных входов в систему, затем извлекаю только IP-адреса и удаляю их.
iBug avatar
флаг um
Похоже, вы заново изобретаете fail2ban. F2B уже является комплексным инструментом именно для этой задачи, нет причин отказываться от него.
Рейтинг:1
флаг de
  1. Используйте только авторизацию на основе ключа. Многие боты атакуют только системы, основанные на паролях. В любом случае использование авторизации на основе пароля — плохая идея.
  2. Использовать https://www.sshguard.net/ : он блокирует IP-адреса после пары неудачных входов в систему.
  3. Используйте случайный порт (не 22), это остановит некоторых ботов.
  4. Убедитесь, что ваша система не разрешает вход в систему root
  5. Если вы входите только из дома, рассмотрите возможность открытия SSH только для вашего IP/провайдера или страны.
Рейтинг:1
флаг ck

1. Измените свой sshd порт прослушивания

Как бы просто это ни звучало, изменить порт по умолчанию 22 к пользовательскому значению (например, 2200) на общедоступном IP-адресе может сократить количество сканирований портов с тысяч в день до нескольких десятков. Учебник см. здесь.

При этом, хотя это и уменьшает раздражение от сканирования портов, НЕ обеспечить реальную безопасность. «Безопасность по неизвестности» — это миф и не более того.

2. Используйте вход с открытым ключом и отключите вход с паролем

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

Обратите внимание, что это означает, что вы больше не сможете войти в систему с любой случайной машины, если вы не носите с собой ключ (который вам нужно защитить каким-либо другим способом).

3. Используйте fail2ban

Если они потерпят неудачу 5 раз, запретите им пытаться снова на день или что-то в этом роде. Это покажет им. Очень эффективен против попыток грубой силы. Учебник см. здесь.

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

4. Предварительно забанить список IP-адресов, известных злоупотреблением

Источники, такие как ЗлоупотреблениеIPDB вести большие списки известных вредоносных IP-адресов, доступных через API. Для его использования вам понадобится ключ API, но вы можете достаточно легко зарегистрировать бесплатную учетную запись. Вытяните список и используйте что-то вроде iptables для массового запрета этих известных IP-адресов. Настройте задание cron, чтобы периодически автоматизировать его для достижения наилучшего эффекта. Вот очень простой скрипт я написал (и я лично использую), чтобы сделать именно это. Не стесняйтесь использовать его как ссылку, но НЕ ИСПОЛЬЗУЙТЕ ЭТО В ПРОИЗВОДСТВЕ.

По моему личному опыту, этот метод столь же эффективен (если не более), как и метод №3.


Лично я использую все 4 метода, перечисленные выше, и мой VPS может получить одну или две злонамеренные попытки входа в мой журнал безопасности самое большее, в плохой месяц. Вот история перехвата iptables по способу №4:

$ абип-хист
Сеть abip-ban (1 ссылка)
 pkts bytes target prot opt ​​in out source target
  362 14480 УДАЛИТЬ все -- * * 45.143.200.6 0.0.0.0/0
  307 12280 УДАЛИТЬ все -- * * 185.156.73.104 0.0.0.0/0
  288 12672 УДАЛИТЬ все -- * * 212.133.164.75 0.0.0.0/0
  277 19911 УДАЛИТЬ все -- * * 146.88.240.4 0.0.0.0/0
  250 11000 УДАЛИТЬ все -- * * 212.133.164.14 0.0.0.0/0
  230 9200 УДАЛИТЬ все -- * * 45.146.164.213 0.0.0.0/0
  215 8600 УДАЛИТЬ все -- * * 185.156.73.67 0.0.0.0/0
  214 8560 УДАЛИТЬ все -- * * 5.188.206.18 0.0.0.0/0
  202 8080 УДАЛИТЬ все -- * * 193.27.228.63 0.0.0.0/0
  201 8040 УДАЛИТЬ все -- * * 193.27.228.64 0.0.0.0/0
  199 7960 УДАЛИТЬ все -- * * 193.27.228.59 0.0.0.0/0
  197 7880 УДАЛИТЬ все -- * * 193.27.228.65 0.0.0.0/0
  197 7880 УДАЛИТЬ все -- * * 193.27.228.61 0.0.0.0/0
  196 7840 УДАЛИТЬ все -- * * 45.135.232.119 0.0.0.0/0
  196 7840 УДАЛИТЬ все -- * * 193.27.228.60 0.0.0.0/0
  196 7840 УДАЛИТЬ все -- * * 193.27.228.58 0.0.0.0/0
  189 7560 УДАЛИТЬ все -- * * 45.146.165.149 0.0.0.0/0
  184 7360 УДАЛИТЬ все -- * * 45.155.205.247 0.0.0.0/0
  184 7360 УДАЛИТЬ все -- * * 195.54.160.228 0.0.0.0/0
  182 7280 УДАЛИТЬ все -- * * 45.143.203.12 0.0.0.0/0
  181 7240 УДАЛИТЬ все -- * * 45.141.84.57 0.0.0.0/0
  180 7200 УДАЛИТЬ все -- * * 45.135.232.85 0.0.0.0/0
  176 7040 УДАЛИТЬ все -- * * 45.146.165.148 0.0.0.0/0
...
это продолжается 1700 строк...

$ время безотказной работы
06:36:49 до 16 дней, 15:24
Z4-tier avatar
флаг us
+1 за «изменить порт». Просто не меняйте его на что-то столь же привлекательное (или более) для потенциального злоумышленника. Используйте неясный, неназначенный порт с более высоким номером; что-то выше 10000. Раньше я запускал ssh на 23 (порт telnet) только для *ха-ха*, и вау, получалось много подключений.
Рейтинг:0
флаг er
lev

Как упоминалось в других ответах, вам не нужно сильно беспокоиться об этом, но если вы хотите добавить еще один уровень безопасности, вы можете попробовать использовать стук портов.

Идея состоит в том, чтобы держать порт ssh закрытым и открывать его только для ips, которые предварительно выполняют определенную последовательность операций, например:

син порт 1000
син порт 2000
син порт 3000
# порт ssh теперь открыт
сш...

можно получить более подробную информацию здесь: https://www.rapid7.com/blog/post/2017/10/04/how-to-secure-ssh-server-using-port-knocking-on-ubuntu-linux/

Ответить или комментировать

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