Этот урок закрывает практичную часть безопасности: сначала смотрим на свой сервер глазами атакующего (сканируем порты и сервисы через nmap), потом ставим сторожа, который замечает атаку в трафике и в логах (Suricata/Snort и fail2ban), и в конце прячем доступ внутрь зашифрованного туннеля (OpenVPN, а рядом WireGuard и IPsec). Задача администратора тут одна: знать, что у тебя торчит наружу, видеть, когда это ломают, и пускать к закрытым сервисам только своих.

Как это работает
Сканирование портов - это попытка достучаться до диапазона TCP/UDP-портов хоста и по реакции понять, что за ними слушает. nmap делает это аккуратно: при SYN-скане (-sS) он шлёт пакет SYN и по ответу решает, открыт порт (пришёл SYN/ACK), закрыт (RST) или фильтруется (тишина или ICMP unreachable). Полное TCP-рукопожатие не доводится до конца, поэтому скан быстрый и тише обычного подключения. Дальше определение версий (-sV) уже честно подключается к сервису и по баннеру/протоколу выясняет, что это, например, OpenSSH 9.6 или nginx 1.27 - именно версия подсказывает, есть ли известные дыры.
Проверка целостности - это контроль того, что важные файлы не подменили. Простой уровень - хэши (sha256sum) и подписи пакетов (rpm, dpkg сверяют контрольные суммы из своей базы). Серьёзный уровень - HIDS вроде AIDE: он один раз снимает слепок системы (хэши, права, владельцы, mtime) в базу, а потом регулярно сравнивает текущее состояние с эталоном и кричит про любое расхождение.
Сетевой IDS работает иначе - он смотрит не на файлы, а на пакеты. Suricata и Snort прогоняют трафик через набор правил (сигнатур): совпало с известным паттерном атаки - пишется алерт. В режиме IDS он только наблюдает и логирует, в режиме IPS (inline) - ещё и дропает пакет. fail2ban проще и точечнее: он не разбирает пакеты, а читает логи сервисов (sshd, веб-сервер), ловит regex-ом повторяющиеся неудачи и временно банит IP через файрвол.
VPN решает другую задачу - конфиденциальность и доступ. Туннель шифрует трафик и аутентифицирует стороны, так что закрытый сервис вообще не торчит в открытый интернет: до него дотянется только тот, у кого есть ключ или сертификат. OpenVPN строит туннель поверх TLS: сервер и клиенты опознают друг друга по сертификатам из общей PKI (свой CA подписывает каждый сертификат). Схема клиент-сервер - это много клиентов к одному серверу (типичный удалённый доступ), site-to-site - это два шлюза, сшивающих две сети в одну. Рядом стоят IPsec (стандарт, часто между железными шлюзами, два этапа IKE) и WireGuard - минималистичный современный протокол прямо в ядре Linux, где аутентификация это просто обмен публичными ключами Curve25519.
Команды и примеры
Установка nmap различается по семействам:
Код: Выделить всё
# Debian 13 / Ubuntu 24.04
apt install nmap
# RHEL 10 / Fedora 41+
dnf install nmapКод: Выделить всё
nmap -sS -sV --top-ports 100 10.0.0.5
nmap -p- 10.0.0.5 # все 65535 TCP-портов
nmap -sU --top-ports 50 10.0.0.5 # UDP, медленнее
nmap -A 10.0.0.5 # версии + ОС + скрипты, шумноПроверка целостности через AIDE (одинаково в обоих семействах, имена пакетов совпадают):
Код: Выделить всё
apt install aide # или: dnf install aide
aide --init # снять эталон
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
aide --check # сверить с эталономКод: Выделить всё
apt install suricata # или: dnf install suricata
suricata-update # подтянуть правила ET Open
suricata -i eth0 # запуск на интерфейсе
tail -f /var/log/suricata/fast.log # алертыКод: Выделить всё
apt install fail2ban # или: dnf install fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 4
bantime = 1hКод: Выделить всё
systemctl enable --now fail2ban
fail2ban-client status sshd # сколько забаненоOpenVPN, клиент-сервер. PKI поднимают через easy-rsa:
Код: Выделить всё
apt install openvpn easy-rsa # или: dnf install openvpn easy-rsa
make-cadir ~/ca && cd ~/ca
./easyrsa init-pki
./easyrsa build-ca # свой центр сертификации
./easyrsa build-server-full srv nopass
./easyrsa build-client-full client1 nopassКод: Выделить всё
dev tun
proto udp
port 1194
ca ca.crt
cert srv.crt
key srv.key
dh dh.pem
server 10.8.0.0 255.255.255.0WireGuard - на порядок короче по настройке:
Код: Выделить всё
apt install wireguard # или: dnf install wireguard-tools
wg genkey | tee priv | wg pubkey > pub
# в /etc/wireguard/wg0.conf указываем [Interface] и [Peer] с ключами
wg-quick up wg0
wg show- Сканировать чужие хосты без разрешения - это уже не учёба, а противоправное действие. nmap гоняйте только по своим стендам.
- UDP-скан читают как закрытый из-за тишины: отсутствие ответа nmap честно метит open|filtered, а не open. Не делайте по нему поспешных выводов.
- Забыть suricata-update перед запуском - движок поднимется, но правил нет, и алертов вы не увидите.
- Снять базу AIDE на уже скомпрометированной машине - тогда эталоном станет дыра, и проверки будут чистыми. Базу снимают сразу после установки.
- fail2ban банит по логам, а не по трафику: если сервис не пишет неудачные попытки в лог (или формат не тот) - jail молчит. Проверяйте filter и logpath.
- В OpenVPN перепутать назначение: ca.crt раздают всем, а server.key и ca.key (ключ центра) не покидают сервер. Утёк ключ CA - вся PKI скомпрометирована.
- Считать IDS файрволом. IDS в режиме наблюдения только сообщает об атаке, но не блокирует - блокировку дают IPS-режим, fail2ban или nftables.
- Открыть VPN-порт, но забыть про маршруты и форвардинг (net.ipv4.ip_forward=1) - туннель встаёт, а до сети за ним пакеты не идут.
- Поднимите два стенда: сервер (Debian 13) с sshd и веб-сервером и второй хост (Fedora 41+) для атак и сканов.
- С атакующего выполните nmap -sS -sV --top-ports 100 на сервер, запишите открытые порты и версии. Затем nmap -p- и сравните, что добавилось.
- На сервере поставьте AIDE, снимите эталон, измените один файл в /etc и докажите, что aide --check его поймал.
- Поставьте и запустите Suricata на внешнем интерфейсе, прогоните suricata-update, повторите скан nmap -A и найдите алерты в fast.log.
- Настройте fail2ban для sshd (maxretry 3), с атакующего сделайте несколько неверных логинов и убедитесь через fail2ban-client status sshd, что IP забанен.
- Поднимите OpenVPN в схеме клиент-сервер: свой CA через easy-rsa, сертификаты сервера и клиента, подключитесь и пропингуйте сервер по адресу 10.8.0.1.
- Соберите тот же доступ на WireGuard (пара ключей, wg0.conf, wg-quick up) и сравните объём конфигурации с OpenVPN.
- Чем SYN-скан (-sS) отличается от полного TCP-подключения и почему он требует прав root?
- Что показывает ключ -sV и почему версия сервиса важнее самого факта открытого порта?
- В чём принципиальная разница между сетевым IDS (Suricata) и fail2ban по тому, на что они смотрят?
- Почему базу AIDE нужно снимать сразу после установки системы, а не позже?
- Какие файлы в PKI OpenVPN можно раздавать клиентам, а какие обязаны остаться только на сервере?
- Чем схема клиент-сервер в OpenVPN отличается от site-to-site и для чего нужна каждая?
- Чем WireGuard принципиально проще OpenVPN в части аутентификации сторон?