Вопрос или проблема
Мой системный лог-файл (/var/log/auth.log) показывает сотни и сотни попыток входа в систему с разных IP. Как я могу предотвратить все эти атаки? Похоже, что все IP-адреса поддельные (“pin” или “traceroute”) всегда показывают сотни разных IP-адресов в файле auth.log??
Мне действительно нужна помощь с этим! Спасибо!
Я читаю, что другие люди предлагают
- StrictModes yes (что это делает?)
- hosts.allow ALL : (позволит ли это мне подключаться, если IP адрес из кафе и это “я”?)
Вот как выглядит мой файрвол “iptables”..
asher@starparty:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Я читаю, что другие люди рекомендуют…
- iptables -I INPUT -s -p tcp -m tcp –dport 22 -j ACCEPT
ПРИМЕР ВЫВОДА SSH УДАЛЕННОГО ВХОДА: “tail /var/log/auth.log”
Dec 3 21:24:31 StarParty sshd[66702]: Failed password for root from 51.210.122.207 port 45722 ssh2
Dec 3 21:24:32 StarParty sshd[66702]: Received disconnect from 51.210.122.207 port 45722:11: Bye Bye [preauth]
Dec 3 21:24:32 StarParty sshd[66702]: Disconnected from authenticating user root 51.210.122.207 port 45722 [preauth]
Dec 3 21:24:38 StarParty sshd[66712]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=150.158.171.64 user=root
Dec 3 21:24:40 StarParty sshd[66712]: Failed password for root from 150.158.171.64 port 55444 ssh2
Dec 3 21:24:41 StarParty sshd[66721]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=142.93.34.237 user=root
Dec 3 21:24:41 StarParty sshd[66712]: Received disconnect from 150.158.171.64 port 55444:11: Bye Bye [preauth]
Dec 3 21:24:41 StarParty sshd[66712]: Disconnected from authenticating user root 150.158.171.64 port 55444 [preauth]
Dec 3 21:24:44 StarParty sshd[66721]: Failed password for root from 142.93.34.237 port 58226 ssh2
Dec 3 21:24:44 StarParty sshd[66721]: Received disconnect from 142.93.34.237 port 58226:11: Bye Bye [preauth]
Dec 3 21:24:44 StarParty sshd[66721]: Disconnected from authenticating user root 142.93.34.237 port 58226 [preauth]
Dec 3 21:25:00 StarParty sshd[66728]: Unable to negotiate with 218.92.0.212 port 45440: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1 [preauth]
Dec 3 21:25:01 StarParty CRON[66730]: pam_unix(cron:session): session opened for user root by (uid=0)
Dec 3 21:25:01 StarParty CRON[66730]: pam_unix(cron:session): session closed for user root
Dec 3 21:25:26 StarParty sshd[66776]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=150.158.171.64 user=root
Dec 3 21:25:27 StarParty sshd[66776]: Failed password for root from 150.158.171.64 port 33534 ssh2
Dec 3 21:25:30 StarParty sshd[66776]: Received disconnect from 150.158.171.64 port 33534:11: Bye Bye [preauth]
Dec 3 21:25:30 StarParty sshd[66776]: Disconnected from authenticating user root 150.158.171.64 port 33534 [preauth]
“tcpdump -A”
curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256...Arsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256,[email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]@openssh.com,[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1....none,[email protected],[email protected].......................
21:27:59.780431 IP 46.101.194.220.40238 > starparty.ssh: Flags [.], ack 1098, win 501, options [nop,nop,TS val 431378467 ecr 1031716663], length 0
21:27:59.781114 IP 46.101.194.220.40238 > starparty.ssh: Flags [P.], seq 22:462, ack 1098, win 501, options [nop,nop,TS val 431378471 ecr 1031716663], length 440
[email protected],ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1...#ecdsa-sha2-nistp256,ssh-rsa,ssh-dss...daes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,blowfish-cbc,3des-cbc,des-cbc-ssh1...daes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,blowfish-cbc,3des-cbc,des-cbc-ssh1... hmac-sha1... hmac-sha1....none....none......
21:27:59.781131 IP starparty.ssh > 46.101.194.220.40238: Flags [.], ack 462, win 507, options [nop,nop,TS val 1031716853 ecr 431378471], length 0
21:27:59.983564 STP 802.1d, Config, Flags [none], bridge-id 8000.14:cc:20:b5:54:68.8003, length 35
Другие советы, которые я нашел…
https://help.ubuntu.com/community/IptablesHowTo
Вы можете попробовать использовать программу Fail2Ban https://www.fail2ban.org/wiki/index.php/Main_Page
Она автоматически блокирует исходящий IP после неудачных попыток входа.
Она работает довольно хорошо, и у вас есть много опций для ее настройки. Например, можно указать, сколько попыток может быть сделано до бана или на какое время будет блокироваться IP.
Но вы должны подумать, если вы действительно хотите, чтобы SSH был открыт для всего мира. Если ваша машина подключена непосредственно к Интернету, я бы рекомендовал использовать файрвол с политикой блокировки всего по умолчанию и открытием доступа только с того IP, с которого вам нужно входить в SSH.
Существует несколько способов, которые могут уменьшить риск безопасности, связанный с открытым доступом к SSH для всех.
-
Fail2ban (уже упоминалось) хорош. Он поддерживает блокировку
на постоянной основе или только на некоторое время в файрволе. -
Запустите SSH на странном высоком уровне порта, что-то выше 8000. Это
не останавливает атаки, но значительно уменьшает трафик,
так как большинство скрипт-карманников проверяют порт 22. -
Убедитесь, что PermitRootLogin в sshd_config не имеет значения
Yes. Вам не нужны root-входы через ssh. Вы можете входить
как обычный пользователь, а затем использовать su. Таким образом, потребуется два пароля
для получения доступа администратора (если только это не Ubuntu или аналог, где
обычный пользователь имеет права sudo). -
Рассмотрите возможность использования двухфакторной аутентификации. Это можно сделать с помощью коммерческих
продуктов, таких как Duo, или используйте что-то вроде Google Authenticator.
Шаги настройки будут получены от поставщика. -
Получайте email-уведомления при успешном входе. Это позволит вам
немедленно узнать о доступе, прежде чем взломщик сможет
уничтожить какие-либо установленные вами защитные меры. Для этого
нужно добавить строку сессии в /etc/pam.d/sshd, которая будет выглядеть
следующим образом:session required pam_exec.so /root/scripts/send-ssh-notice.sh
Есть пример сценария, который может предоставить детали в
переменных, и он доступен на
github: Github hosted sshlogin_alert.sh(Да, я предоставил ссылку в своем ответе, и почему бы и нет? Код Github поддерживается, поддерживает форки и имеет хороший фидбэк. Мой ответ не будет пересмотрен мной через месяцы или годы. Кроме того, кредит должен быть дан, где это заслужено, и этот пользователь Github проделал хорошую работу.)
Если вы действительно не хотите устанавливать какое-либо программное обеспечение (fail2ban – это именно то, что может решить вашу проблему), вы можете использовать iptables для блокировки IP адресов, которые пытаются совершить вредоносные попытки входа.
Например:
sudo iptables -I INPUT -s [IPADDRESSTOEBLOCKED] -j DROP
Вы также можете блокировать IP-адрес для определенного порта или блокировать определенные диапазоны IP-адресов.
Однако, iptables – это довольно сложный механизм (также в понимании порядка применения правил). Некоторые ресурсы для лучшего понимания:
- https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands
https://phoenixnap.com/kb/iptables-linux
В качестве альтернативы, если UFW установлен в вашей системе, вы можете попробовать использовать его для блокировки вредоносных IP-адресов.
Конечно, убедитесь, что вы не заблокируете сами себя случайно.
Вы не можете использовать поддельные IP-адреса для подключения к SSH через TCP. Все эти IP-адреса реальны, многие из этих хостов, вероятно, взломаны.
Вместо отслеживания и, возможно, блокировки адресов, за которыми стоят неудачные попытки входа, гораздо более простой подход – это по умолчанию заблокировать все адреса и только разрешать те адреса или сети, из которых вы на самом деле заходите в систему.
Вы также можете скрыть SSH-вход за VPN, но тогда вы увидите все эти атаки против вашего VPN-шлюза.
Возможно, есть какой-то “ПРОСТОЙ” способ без установки дополнительного ПО?
Это пока не решает проблему… но, думаю, это правильный путь?
sudo gedit /etc/ssh/ssh_config
sudo systemctl restart ssh.service
Вот как выглядит “ssh_config”…
Include /etc/ssh/ssh_config.d/*.conf
Host *
# PermitRootLogin no
# ForwardAgent no
# ForwardX11 no
# ForwardX11Trusted yes
# PasswordAuthentication yes
# HostbasedAuthentication no
# GSSAPIAuthentication no
# GSSAPIDelegateCredentials no
# GSSAPIKeyExchange no
# GSSAPITrustDNS no
# BatchMode no
# CheckHostIP yes
# AddressFamily any
# ConnectTimeout 0
# StrictHostKeyChecking ask
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
# IdentityFile ~/.ssh/id_ecdsa
# IdentityFile ~/.ssh/id_ed25519
Port 22
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
# MACs hmac-md5,hmac-sha1,[email protected]
# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
# RekeyLimit 1G 1h
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
Также есть некоторые возможные изменения в “iptables”?
.
Ответ или решение
Предотвращение многочисленных неудачных попыток входа в систему с фальшивых или подложных IP-адресов — актуальная проблема для системных администраторов и специалистов по безопасности в сфере ИТ. Атаки с использованием поддельных адресов могут привести к снижению производительности и безопасности системы, поэтому важно принимать соответствующие меры для их предотвращения. В данной статье мы рассмотрим теоретическую основу проблемы, далее приведем примеры решений и, наконец, предложим конкретные шаги, которые помогут эффективно защитить вашу систему.
Теория
Обеспечение безопасности SSH-сервера. Основная цель атаки на SSH — получение несанкционированного доступа к системе. Злоумышленники, как правило, предпринимают автоматические атаки с использованием ботов или скриптов для перебора паролей. Попытки войти под учетной записью "root" или любой другой учетной записью — часто встречающееся явление в системных логах.
Подложные IP-адреса. Хотя кажется, что многие из этих IP-адресов могут быть поддельными, на практике это зачастую реальные адреса, скомпрометированные компьютеры или сервера. Спуфинг IP может применяться для сокрытия истинного источника атаки.
Меры защиты. Защита системы от брутфорс-атак требует комплексного подхода. Необходимо использовать инструменты, блокирующие IP-адреса, и ограничивать доступ к SSH-серверу только разрешенным устройствам.
Примеры решений
-
Fail2Ban. Fail2Ban — это популярная утилита, которая анализирует логи на наличие признаков злоумышленных действий и временно блокирует IP-адреса, с которых исходит угроза. Она предоставляет различные параметры настройки, к примеру, число разрешенных попыток входа до блокировки и продолжительность блокировки. Fail2Ban отлично подходит для защиты SSH-сервера от атак, не требуя значительных усилий для настройки.
-
Изменение порта SSH. Хотя это не решает проблему кардинально, перенос SSH-сервиса на нестандартный порт (например, выше 8000) снижает число автоматических попыток атаки, так как большинство сканеров ищут сервисы именно на стандартном 22 порту. Однако, если злоумышленник целенаправленно нацелен на ваш сервер, данный прием не остановит его.
-
Ограничение доступа по IP. Одним из самых надежных методов является настройка брандмауэра на блокировку всех входящих соединений, кроме тех, которые происходят из доверенных источников. Конфигурация может быть выполнена с помощью iptables, либо аналогичных инструментов, таких как ufw (Uncomplicated Firewall).
-
Двухфакторная аутентификация (2FA). Использование 2FA добавляет дополнительный уровень безопасности, требующий подтверждения через другое устройство или приложение (например, Google Authenticator). Это делает несанкционированный доступ значительно более трудным.
Применение на практике
Настройка Fail2Ban:
-
Установите Fail2Ban на ваш сервер командой:
sudo apt-get install fail2ban
-
Создайте конфигурационный файл, если он отсутствует:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
-
Отредактируйте
jail.local
для активации защиты SSH:[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5
-
Перезапустите Fail2Ban:
sudo systemctl restart fail2ban
Перенос порта SSH
-
Откройте файл конфигурации SSH:
sudo nano /etc/ssh/sshd_config
-
Найдите строку
#Port 22
и измените ее на:Port 8022
-
Перезапустите SSH сервис:
sudo systemctl restart ssh
Настройка iptables для ограничения доступа
-
Добавьте правило для разрешения доступа:
sudo iptables -A INPUT -p tcp -s <доверенный_IP> --dport 8022 -j ACCEPT
-
Заблокируйте все остальные попытки:
sudo iptables -A INPUT -p tcp --dport 8022 -j DROP
Эти меры значительно повысят уровень безопасности вашего SSH-сервера и помогут предотвратить несанкционированный доступ. Важно регулярно обновлять сервер и программы защиты, а также следить за логами, чтобы быстро реагировать на новые тактики злоумышленников.