Практикум:
Безопасный SSH

Настройка ключей, fail2ban и порт-нокинг для создания "неприступного" сервера.

🖥️ Ваше Окружение

Вам понадобится две машины: ваш локальный компьютер (клиент) и удаленный сервер. Все команды для сервера требуют sudo. Если сервера нет, используйте localhost.

1. Основы SSH

SSH — протокол для безопасного подключения. Начнем с базовых команд.

// 1. Обычное подключение
ssh user@192.168.1.100
// 2. Нестандартный порт
ssh user@192.168.1.100 -p 2222

Config File (Лайфхак)

Создайте файл ~/.ssh/config на клиенте, чтобы не вводить IP каждый раз.

Host myserver
    HostName 192.168.1.100
    User user
    Port 22

Теперь можно просто писать: ssh myserver.

🚀 ЧЕЛЛЕНДЖ:

1. Подключитесь к серверу.
2. Создайте ~/.ssh/config на клиенте.
3. Подключитесь, используя псевдоним.

2. Настройка SSH-ключей

Вход по паролю ненадежен. Используем криптографические ключи.

Как это работает?
  • id_ed25519 (Приватный ключ): Ваш паспорт. Хранится на клиенте. Никому не давать!
  • id_ed25519.pub (Публичный ключ): Замок. Копируется на сервер.

Генерация и Копирование

// 1. На клиенте: Генерация
ssh-keygen -t ed25519 -C "admin@example.com"
// 2. На клиенте: Отправка на сервер
ssh-copy-id user@192.168.1.100

3. Защита Сервера

Самый важный шаг: отключаем вход по паролю.

⚠️ КРИТИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ

Перед отключением пароля откройте ВТОРОЙ терминал и подключитесь к серверу. Не закрывайте его! Это ваш запасной вход, если что-то пойдет не так.

// На сервере: Редактируем конфиг
sudo nano /etc/ssh/sshd_config
// Измените эти строки:
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
// Перезапуск SSH
sudo systemctl restart sshd

4. Установка Fail2Ban

Банит IP-адреса ботов, которые пытаются подобрать пароль (даже если он отключен, они создают нагрузку).

sudo apt update
sudo apt install fail2ban

# Создаем локальный конфиг (никогда не меняйте jail.conf!)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Откройте jail.local и проверьте секцию [sshd]:

[sshd]
enabled = true
port = ssh
# bantime = 1h
// Перезапуск и статус
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

5. Порт-нокинг (PRO)

Техника "безопасности через неизвестность". SSH-порт закрыт для всех. Чтобы открыть его, нужно "постучать" по портам в правильном порядке (напр. 7000 -> 8000 -> 9000).

⚠️ ТОЛЬКО ДЛЯ ОПЫТНЫХ

Высокий риск заблокировать себя. Практикуйтесь только на VM с консольным доступом!

1. Установка и Firewall

sudo apt install knockd iptables

# Разрешаем текущие соединения
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Блокируем SSH (порт 22)
sudo iptables -A INPUT -p tcp --dport 22 -j DROP

2. Настройка Knockd

Редактируем /etc/knockd.conf:

[openSSH]
    sequence    = 7000,8000,9000
    seq_timeout = 5
    command     = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    tcpflags    = syn

[closeSSH]
    sequence    = 9000,8000,7000
    seq_timeout = 5
    command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    tcpflags    = syn

3. Как стучать (с клиента)

# Стук
knock 192.168.1.100 7000 8000 9000

# Теперь порт 22 открыт для вас!
ssh user@192.168.1.100