Основы сетевого взаимодействия и межсетевого экрана в Linux

LinuxBeginner
Практиковаться сейчас

Введение

Диагностировать сеть проще, если проверять её уровень за уровнем. Сначала определите имя хоста, затем проверьте его интерфейсы и адреса, выбор маршрута, базовую доступность, разрешение имён, прослушиваемые сокеты, ответ приложения и, наконец, локальную политику межсетевого экрана.

В этой лабораторной работе вы пройдёте эту последовательность на хосте Ubuntu. Подготовленный HTTP-сервис прослушивает только loopback-порт 8088, предоставляя безопасную цель для практики с ss, curl и правилами UFW. Вы не будете изменять конфигурацию интерфейсов хоста, маршрут по умолчанию, настройки DNS или доступ по SSH.

Определите хост

На этом шаге вы изучите имя хоста и локальные записи имён, с помощью которых программы идентифицируют эту машину.

Перейдите в рабочую директорию лаборатории:

cd /home/labex/project/network-lab

Выведите текущее имя хоста:

hostname

Отобразите статическое, временное имя и идентификатор операционной системы, известные systemd:

hostnamectl

Static hostname — это настроенное имя. На учебных облачных машинах временное имя может назначаться во время загрузки.

Проверьте локальные сопоставления имён:

cat /etc/hosts

Имена loopback localhost, 127.0.0.1 и ::1 обозначают этот же хост без использования внешней сети. Выведите назначенные хосту IP-адреса в компактном виде:

hostname -I

Сохраните имя хоста и список адресов:

printf 'hostname=%s\naddresses=%s\n' "$(hostname)" "$(hostname -I | xargs)" > host-identity.txt
cat host-identity.txt

Изучите интерфейсы и IP-адреса

На этом шаге вы определите сетевые интерфейсы, состояние каналов, IPv4-адреса, префиксы и область действия адресов.

Используйте краткое представление каналов:

ip -brief link

lo — это loopback-интерфейс. Другой интерфейс, обычно с именем eth0 или ens..., подключает виртуальную машину к сети. Состояние UP означает, что интерфейс административно включён.

Отобразите адреса в компактном виде:

ip -brief address

Адрес вроде 192.0.2.10/24 объединяет IPv4-адрес и длину префикса. Префикс показывает, какие старшие биты определяют локальную сеть.

Подробно изучите loopback-интерфейс:

ip address show dev lo

IPv4-адрес 127.0.0.1/8 имеет scope host, поэтому действителен только внутри этого хоста. Найдите интерфейс, используемый маршрутом по умолчанию:

primary_if=$(ip route show default | awk 'NR==1 {print $5}')
echo "Primary interface: $primary_if"
ip address show dev "$primary_if"

ifconfig — более старый инструмент работы с интерфейсами, который всё ещё встречается в существующих инструкциях и руководствах по устранению неполадок. Сравните его вывод с современным выводом ip, который вы только что изучили:

ifconfig

Сохраните также устаревшее представление:

ifconfig > ifconfig-addresses.txt

Сохраните краткий снимок интерфейсов:

ip -brief address > interface-addresses.txt
cat interface-addresses.txt

Изучите таблицу маршрутизации

На этом шаге вы определите шлюз по умолчанию и узнаете, какой маршрут Linux выбрал бы для указанного назначения.

Отобразите основную таблицу маршрутизации:

ip route

Подключённые маршруты описывают сети, присоединённые напрямую. Строка, начинающаяся с default via, используется, когда не найден более специфичный маршрут.

Узнайте у ядра, как оно достигло бы общедоступного назначения. Эта команда показывает выбранные шлюз, интерфейс и исходный адрес, не отправляя пакет:

ip route get 1.1.1.1

Извлеките шлюз и интерфейс по умолчанию:

gateway=$(ip route show default | awk 'NR==1 {print $3}')
primary_if=$(ip route show default | awk 'NR==1 {print $5}')
echo "Default gateway: $gateway via $primary_if"

Сохраните сводку по маршруту:

printf 'gateway=%s\ninterface=%s\n' "$gateway" "$primary_if" > route-summary.txt
cat route-summary.txt

Проверьте сетевую доступность

На этом шаге вы используете ping для проверки всё более удалённых границ сети, учитывая, что некоторые сети блокируют диагностические пакеты.

Начните с loopback. Параметр -c 2 отправляет два запроса, а -W 2 ожидает каждый ответ не более двух секунд:

ping -c 2 -W 2 127.0.0.1

Успешная проверка loopback подтверждает, что локальный IP-стек отвечает. Затем получите адрес шлюза по умолчанию и проверьте его:

gateway=$(ip route show default | awk 'NR==1 {print $3}')
ping -c 2 -W 2 "$gateway" || echo "The gateway does not answer ICMP echo requests"

Резервное сообщение важно: маршрутизатор может пересылать трафик, одновременно не отвечая на ping. Проверьте общедоступный IP-адрес, не полагаясь на DNS:

ping -c 2 -W 2 1.1.1.1 || echo "Public ICMP is blocked or unavailable"

Сохраните стабильный результат проверки локальной связности, не зависящий от внешней политики:

ping -c 1 -W 2 127.0.0.1 > loopback-ping.txt
tail -n 2 loopback-ping.txt

Проверьте разрешение имён хостов

На этом шаге вы изучите конфигурацию разрешения имён и преобразуете имена хостов в адреса.

Просмотрите файл разрешения имён, используемый стандартными приложениями Linux:

cat /etc/resolv.conf

Обычно он содержит одну или несколько строк nameserver. На хостах с systemd-resolved этот адрес может указывать на локальный промежуточный преобразователь, а не непосредственно на внешний DNS-сервер.

Разрешите локальное имя с учётом всей системной конфигурации служб имён:

getent hosts localhost

getent следует настройкам /etc/nsswitch.conf, поэтому может объединять данные из /etc/hosts, DNS и других настроенных источников. Разрешите внешнее имя и запросите адреса IPv4-сокетов:

getent ahostsv4 example.com

Если ping по IP-адресу успешен, но этот запрос завершается ошибкой, проверьте конфигурацию преобразователя или доступность DNS. Сохраните первую найденную запись IPv4:

getent ahostsv4 example.com | head -n 1 > dns-result.txt
cat dns-result.txt

Изучите прослушиваемый порт и HTTP-ответ

На этом шаге вы свяжете прослушиваемый TCP-сокет с процессом-владельцем и проверите протокол приложения.

Подготовленный демонстрационный сервис прослушивает loopback-порт 8088. Используйте ss, чтобы изучить прослушиваемые TCP-сокеты. Параметры -l, -t, -n и -p означают прослушивание, TCP, числовые адреса и информацию о процессах:

sudo ss -ltnp | grep ':8088'

Найдите 127.0.0.1:8088. Привязка к loopback означает, что сервис доступен только с этого хоста.

Проверьте процесс сервиса, которому принадлежит сокет:

systemctl status labex-network-demo.service --no-pager

Используйте curl -i, чтобы вывести заголовки и тело HTTP-ответа:

curl -i http://127.0.0.1:8088/

Статус HTTP 200 OK подтверждает больше, чем просто открытый порт: приложение приняло HTTP-запрос и вернуло содержимое. Сохраните только тело ответа с помощью тихого режима -s:

cd /home/labex/project/network-lab
curl -s http://127.0.0.1:8088/ > http-response.html
grep 'network demo ready' http-response.html

Сохранение доступа и включение UFW

На этом шаге вы проверите состояние UFW, сохраните удалённый административный доступ, разрешите порт учебного сервиса и включите межсетевой экран.

UFW — это интерфейс управления правилами фильтрации пакетов Linux. Проверьте текущее состояние:

sudo ufw status verbose

Подготовка оставляет UFW неактивным и очищает набор правил. Перед удалённым включением межсетевого экрана хоста разрешите используемый канал администрирования. Эта виртуальная машина использует TCP-порт 22 для SSH:

sudo ufw allow 22/tcp

Теперь разрешите входящий TCP-трафик на порт учебного сервиса:

sudo ufw allow 8088/tcp

Перед активацией проверьте подготовленные изменения:

sudo ufw show added

Включите UFW без интерактивного запроса подтверждения:

sudo ufw --force enable

Убедитесь, что межсетевой экран активен и оба разрешения присутствуют:

sudo ufw status verbose

Сервис привязан к адресу обратной петли, поэтому после изменения межсетевого экрана проверьте его локально:

curl -fsS http://127.0.0.1:8088/

Сохраните активное состояние как проверяемый результат:

cd /home/labex/project/network-lab
sudo ufw status verbose > firewall-status.txt
cat firewall-status.txt

Порядок важен: сохраните канал администрирования, добавьте необходимые правила для сервисов, включите межсетевой экран и сразу проверьте политику и доступность приложения. На рабочих хостах может использоваться другой порт SSH, поэтому уточняйте фактический канал администрирования, а не предполагайте порт 22.

Итоги

Вы прошли структурированную последовательность сетевой диагностики Linux: идентификация хоста, интерфейсы и IP-адреса, выбор маршрута, проверка доступности, разрешение имён, прослушиваемые сокеты и HTTP-ответ. Вы увидели, что каждый уровень отвечает на отдельный вопрос, а сбой на одной границе сужает область дальнейшего поиска.

Кроме того, вы проверили состояние UFW и безопасно настроили узкое правило для loopback, не рискуя удалённым доступом. Эти приёмы помогут диагностировать и защищать сетевой сервис без широких и потенциально disruptive изменений.