Сеть, SSH и базовая настройка firewall
В прошлых статьях вы научились работать в командной строке, управлять пользователями и правами, устанавливать пакеты, смотреть процессы и читать логи. Следующий практический слой администрирования Linux — сеть: как сервер получает адрес, как диагностировать проблемы соединения, как безопасно подключаться по SSH и как ограничивать доступ с помощью firewall.
!Как SSH и сервисы проходят через firewall до служб на сервере
Базовые сетевые понятия, которые нужны администратору
IP-адрес — адрес узла в сети (IPv4 или IPv6).
Маска/префикс сети — показывает, какая часть адреса относится к сети (например, /24).
Шлюз по умолчанию — куда отправляется трафик «вне своей сети».
DNS — система, которая переводит имена (например, example.com) в IP-адреса.
Порт — логический «номер» сервиса на узле (например, SSH часто на 22/TCP).
TCP и UDP — основные транспортные протоколы; SSH почти всегда использует TCP.Если держать в голове простую цепочку, диагностика становится проще:
«Нет IP/маршрута» — проблема на уровне интерфейса и маршрутизации.
«Есть IP, но имя не резолвится» — проблема DNS.
«Имя резолвится, но порт не доступен» — проблема firewall/службы/маршрута.Быстрая диагностика сети: самые полезные команды
IP-адреса и интерфейсы: ip
Пакет инструментов iproute2 почти везде является стандартом.
Документация: ip(8) — man7.org
Проверка доступности узла: ping
ping помогает понять, «видим» ли мы узел на уровне ICMP. Важно: ICMP может быть запрещён, и тогда ping не докажет, что «всё сломано».
Документация: ping(8) — man7.org
DNS-проверки: getent
Для базовой проверки DNS удобно использовать getent, потому что он показывает результат через системную конфигурацию разрешения имён.
Проверка «порт слушается»: ss
ss показывает сокеты: какие порты открыты и какая программа их слушает.
Поля, на которые полезно смотреть:
LISTEN — сервис слушает порт.
users:(...) — какой процесс и PID держит порт.Документация: ss(8) — man7.org
Проверка HTTP/HTTPS: curl
curl удобен для проверки доступности веб-сервисов и диагностики редиректов/сертификатов.
Документация: curl — manpage
SSH: безопасный удалённый доступ
Что такое SSH и из чего он состоит
ssh — клиентская команда для подключения.
sshd — сервер (демон), который принимает подключения.
аутентификация — пароль или ключи.
шифрование — трафик защищён от прослушивания.Документация: OpenSSH Manual Pages
Подключение по SSH
Базовый вариант:
Часто полезные опции:
Ключи SSH: генерация и установка
Ключевая аутентификация безопаснее пароля при правильной настройке.
1) Сгенерировать ключ на клиенте:
2) Установить публичный ключ на сервер:
Если ssh-copy-id недоступен, можно сделать вручную:
Важно про права:
каталог ~/.ssh обычно должен быть 700.
файл authorized_keys обычно должен быть 600.Если права слишком «широкие», sshd может игнорировать ключи из соображений безопасности.
Документация: ssh-keygen(1) — OpenBSD man и sshd(8) — OpenBSD man
Файл known_hosts и проверка отпечатка
При первом подключении SSH спрашивает, доверяете ли вы ключу сервера, и записывает его в ~/.ssh/known_hosts. Это защита от атаки man-in-the-middle.
Если сервер переустановили или поменяли ключи, появится предупреждение. Тогда нужно:
подтвердить, что это действительно ваш сервер (через консоль провайдера или другой доверенный канал).
затем обновить запись в known_hosts.Пример удаления старой записи:
Документация: ssh-keygen(1) — OpenBSD man
Конфигурация клиента SSH: ~/.ssh/config
Чтобы не помнить параметры, их часто фиксируют в конфиге клиента:
Пример содержимого:
Теперь можно подключаться так:
Документация: ssh_config(5) — OpenBSD man
Настройка sshd: минимальный безопасный базис
Файл конфигурации сервера обычно здесь:
/etc/ssh/sshd_configПосле изменения конфигурации важно не потерять доступ. Практический подход:
1) Оставить текущую SSH-сессию открытой.
2) Проверить синтаксис.
3) Перезагрузить службу.
4) Открыть вторую сессию и проверить вход.
Полезные команды:
На разных дистрибутивах служба может называться ssh или sshd:
Типовые настройки, которые часто применяют в серверной среде (их выбирают осознанно, под свои требования):
запрет прямого входа root: PermitRootLogin no
запрет парольной аутентификации после настройки ключей: PasswordAuthentication no
ограничение пользователей: AllowUsers alice bobДокументация: sshd_config(5) — OpenBSD man
Логи SSH и диагностика проблем входа
Если не получается войти по SSH, почти всегда ответ в логах.
Systemd-журнал:
Классические файлы логов (зависит от дистрибутива):
Связь с предыдущими темами курса прямая:
права на ~/.ssh и authorized_keys влияют на возможность входа.
sudo нужен для чтения защищённых логов и правок /etc/ssh/sshd_config.Передача файлов по SSH: scp и sftp
scp
Документация: scp(1) — OpenBSD man
sftp
SFTP — интерактивный режим передачи файлов поверх SSH.
Документация: sftp(1) — OpenBSD man
Firewall в Linux: что именно он делает
Firewall на хосте фильтрует входящий и исходящий трафик по правилам. На практике вас обычно интересует входящий трафик на сервер:
какие порты доступны извне
кто может подключаться (все или конкретные IP/подсети)Технически в Linux фильтрация реализуется подсистемой netfilter, а правила задаются через разные инструменты:
nftables (современный интерфейс)
iptables (исторический интерфейс)
ufw (упрощённая оболочка, часто в Ubuntu)
firewalld (служба с зонами, часто в RHEL/Fedora)Документация:
nftables wiki
firewalld documentation
UncomplicatedFirewall (Ubuntu Wiki)Базовая стратегия правил: «запрещаем всё лишнее»
Практический минимум для сервера:
разрешить SSH (иначе вы потеряете доступ)
разрешить только те сервисы, которые реально нужны (например, 80/443 для веб-сервера)
по возможности ограничить доступ к SSH по IP (если есть фиксированные адреса администратора)Ключевой принцип: сначала разрешить себе доступ, и только потом включать строгие политики.
UFW: простой firewall (часто Ubuntu)
Проверка статуса:
Типовая базовая настройка:
Разрешение веб-трафика:
Ограничение SSH по IP:
Проверка, что правила применились:
firewalld: зоны и сервисы (часто RHEL/Fedora)
Понимание зон
firewalld работает с зонами: зона — это набор правил доверия для интерфейса. На сервере часто используется public.
Проверить состояние:
Посмотреть активные зоны и правила:
Разрешить SSH и HTTP/HTTPS
Разрешить временно (до перезапуска службы):
Разрешить постоянно:
Проверить результат:
Как не заблокировать себя
При работе с firewall соблюдайте дисциплину:
держите активную SSH-сессию до конца изменений
применяйте правила сначала для SSH, потом для остального
проверяйте, что служба реально слушает порт: ss -tulpen | grep ':22'
проверяйте логи при ошибках: journalctl -u ssh -b -n 200Если вы открыли порт в firewall, но подключение не работает, частые причины:
сервис не запущен или не слушает порт
сервис слушает только 127.0.0.1, а не внешний интерфейс
подключение идёт на другой порт/адрес
внешний сетевой firewall (в облаке или на маршрутизаторе) блокирует трафикМини-сценарий администратора: «поднять доступ по SSH и закрыть лишнее»
Ниже — пример логики действий на новом сервере:
Проверить IP и маршрут: ip -br addr, ip route.
Убедиться, что SSH-сервис запущен: systemctl status ssh или systemctl status sshd.
Проверить, что порт 22 слушается: ss -tulpen | grep ':22'.
Настроить вход по ключу и проверить вход новым подключением.
Включить firewall и разрешить только нужные порты.
При проблемах смотреть логи SSH.Эта последовательность связывает все предыдущие темы курса: пакеты (установить openssh-server при необходимости), процессы и systemd (статус службы), права доступа (~/.ssh), логи (journalctl), и безопасность (firewall).