Доступ и защита сервера¶
Кто и как заходит на сервер, как отбиваться от перебора паролей и что пользователь видит при входе.
SSH-ключи¶
См. SSH.
Ключ под конкретный сервер удобно делать отдельным файлом с комментарием:
ssh-keygen -t ed25519 -a 64 -f ~/.ssh/id_ed25519_harbor -C "ramil@harbor"
ssh-copy-id -i ~/.ssh/id_ed25519_harbor.pub ramil@harbor # допишет ключ в ~/.ssh/authorized_keys на сервере
-a 64- число раундов KDF, которым шифруется приватный ключ под passphrase. Больше раундов - дольше перебор-C- комментарий в конце публичного ключа, по нему видно, чей это ключ, вauthorized_keys~/.ssh/id_ed25519_harbor- приватный ключ, никому не показывать..pub- публичный, его копируют на сервер
# ~/.ssh/config на локальной машине
Host harbor
HostName harbor
User ramil
IdentityFile ~/.ssh/id_ed25519_harbor
IdentitiesOnly yes # предлагать серверу только этот ключ, а не все из агента
Fail2ban¶
Fail2ban - Это служба, которая читает логи (например, неудачные входы по SSH) и банит IP, с которых идёт перебор. Набор правил для одного сервиса называется jail.
sudo fail2ban-client status # какие jail'ы активны
sudo fail2ban-client status sshd # статус jail sshd: сколько попыток, кто забанен
sudo fail2ban-client set sshd unbanip 101.91.192.9 # снять бан с IP
sudo tail -n 200 /var/log/fail2ban.log # логи
sudo journalctl -u fail2ban -n 200 --no-pager
sudo nft list set inet f2b-table addr-set-sshd # какие IP реально забанены в nftables
sudo fail2ban-client status sshd | sed -n '/Banned IP list/p' # только строка со списком забаненных IP
sed -n '/Banned IP list/p' - -n выключает печать всех строк, /.../p печатает только строку, где встретился
шаблон. Из длинного статуса остаётся одна строка со списком IP.
Аудит входов¶
Кто сейчас в системе:
История входов:
last -a # успешные входы и перезагрузки, IP в последней колонке
last -a | grep -E "sshd|pts/" # только SSH-сессии
last | grep -v "still logged in\|crash" # только завершённые сессии
lastlog # когда каждый пользователь входил последний раз
lastlog -u ramil # по одному пользователю
Неудачные попытки и SSH-сессии из логов:
sudo grep -i "failed password" /var/log/auth.log | tail -n 50
sudo grep -i "invalid user" /var/log/auth.log | tail -n 50
sudo journalctl -u ssh -S today | grep -E "Accepted|session opened|session closed" | tail -n 200
/var/log/auth.log есть в Debian и Ubuntu. В Fedora и RHEL те же события - в /var/log/secure и в journalctl,
а сервис называется sshd, а не ssh.
Процессы пользователя:
motd¶
motd (message of the day) - Это текст, который пользователь видит после входа по SSH.
/etc/motd- статический текст/etc/update-motd.d/- скрипты, которые выполняются по порядку имён и собирают динамический motd (Debian, Ubuntu)
cat /etc/motd # статический motd
ls -l /etc/update-motd.d/ # скрипты динамического motd
run-parts /etc/update-motd.d/ # прогнать все скрипты и посмотреть результат
bash /etc/update-motd.d/99-harbor # проверить один скрипт
sudo chmod -x /etc/update-motd.d/* # выключить все скрипты
sudo chmod +x /etc/update-motd.d/99-justheader-harbor # включить только свой
Выполняются только скрипты с правом x, поэтому chmod -x - способ выключить лишние без удаления.