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

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

Введение

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

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

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

getent hosts localhost

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

getent ahostsv4 example.com

Если проверка IP с помощью ping проходит, а этот запрос завершается ошибкой, сосредоточьтесь на конфигурации средства разрешения имён или доступности 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

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

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-ответ. Вы узнали, что каждый уровень отвечает на отдельный вопрос, а сбой на одной границе сужает область следующего исследования.

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