Практика 5. Протоколы, SSH, файрвол и сниффинг
Цель работы
Изучить работу TCP/UDP на практике, освоить SSH, настройку файрвола и перехват пакетов.
Часть 1. TCP и UDP на практике
Задание 1.1. Просмотр прослушиваемых портов
-
Просмотрите все прослушиваемые TCP-порты:
Окно терминала ss -tlnpОбъясните флаги:
-t(TCP),-l(listening),-n(числовые),-p(процессы). -
Просмотрите UDP-порты:
Окно терминала ss -ulnp -
Просмотрите все активные соединения:
Окно терминала ss -tnpНайдите соединения в разных состояниях: ESTABLISHED, TIME_WAIT, CLOSE_WAIT.
-
Альтернативный инструмент (устаревший, но полезно знать):
Окно терминала netstat -tlnp
Задание 1.2. Исследование TCP-соединения
-
Установите TCP-соединение с помощью
curlи наблюдайте:Окно терминала # В первом терминале — мониторингwatch -n 1 'ss -tnp | grep :80'# Во втором терминале — запросcurl -v http://example.com -
Изучите заголовки HTTP-ответа:
Окно терминала curl -I http://example.comКакой код статуса вернулся? Какие заголовки присутствуют?
Часть 2. curl и HTTP
Задание 2.1. GET-запросы
-
Выполните простой GET-запрос:
Окно терминала curl http://httpbin.org/get -
Запрос с подробным выводом (видны заголовки запроса и ответа):
Окно терминала curl -v http://httpbin.org/getНайдите в выводе: метод, путь, заголовки запроса (
>) и ответа (<). -
Запрос только заголовков:
Окно терминала curl -I http://httpbin.org/get -
Запрос с пользовательским заголовком:
Окно терминала curl -H "Accept: application/json" -H "X-Custom: test" http://httpbin.org/headers
Задание 2.2. POST-запросы
-
Отправьте POST-запрос с данными:
Окно терминала curl -X POST -d "name=student&course=os" http://httpbin.org/post -
Отправьте JSON:
Окно терминала curl -X POST \-H "Content-Type: application/json" \-d '{"name": "student", "course": "os"}' \http://httpbin.org/post -
Сохраните ответ в файл:
Окно терминала curl -o ~/project/data/response.json http://httpbin.org/getcat ~/project/data/response.json
Задание 2.3. Коды ответов
Выполните запросы и объясните полученные коды:
curl -o /dev/null -s -w "Код: %{http_code}\n" http://httpbin.org/status/200curl -o /dev/null -s -w "Код: %{http_code}\n" http://httpbin.org/status/301curl -o /dev/null -s -w "Код: %{http_code}\n" http://httpbin.org/status/404curl -o /dev/null -s -w "Код: %{http_code}\n" http://httpbin.org/status/500Для каждого кода укажите: класс (1xx–5xx), название и описание.
Часть 3. SSH
Задание 3.1. Генерация SSH-ключей
-
Сгенерируйте пару ключей Ed25519:
Окно терминала ssh-keygen -t ed25519 -C "student@os-course"При запросе пути нажмите Enter (по умолчанию
~/.ssh/id_ed25519). -
Просмотрите созданные файлы:
Окно терминала ls -la ~/.ssh/cat ~/.ssh/id_ed25519.pub # Публичный ключКакие права установлены на приватный ключ? Почему это важно?
-
Проверьте отпечаток ключа:
Окно терминала ssh-keygen -l -f ~/.ssh/id_ed25519.pub
Задание 3.2. Настройка SSH-клиента
-
Создайте (или отредактируйте) файл конфигурации SSH:
Окно терминала cat > ~/.ssh/config << 'EOF'# Общие настройкиHost *ServerAliveInterval 60ServerAliveCountMax 3# Пример конфигурации для сервераHost myserverHostName 192.168.1.100User studentPort 22IdentityFile ~/.ssh/id_ed25519EOFchmod 600 ~/.ssh/config -
Объясните каждую директиву в конфигурации.
Задание 3.3. Подключение по SSH (если есть доступный сервер)
Если у вас есть второй хост (виртуальная машина, VPS или контейнер):
-
Скопируйте публичный ключ на сервер:
Окно терминала ssh-copy-id user@server_ip -
Подключитесь по ключу:
Окно терминала ssh user@server_ip -
Выполните команду без интерактивного входа:
Окно терминала ssh user@server_ip "uptime && free -h && df -h"
Задание 3.4. Передача файлов
-
Копирование через SCP:
Окно терминала # Загрузить файл на серверscp ~/project/data/response.json user@server_ip:/tmp/# Скачать файл с сервераscp user@server_ip:/etc/hostname ~/project/data/ -
Копирование каталога:
Окно терминала scp -r ~/project/src/ user@server_ip:/tmp/project_src/ -
Синхронизация через rsync:
Окно терминала rsync -avz ~/project/src/ user@server_ip:/tmp/project_src/Чем
rsyncлучшеscp?
Часть 4. Перехват пакетов (tcpdump)
Задание 4.1. Базовый перехват
-
Перехватите пакеты на основном интерфейсе:
Окно терминала sudo tcpdump -i any -c 10Объясните формат вывода.
-
Фильтрация по порту:
Окно терминала # В первом терминале — перехватsudo tcpdump -i any port 80 -c 5# Во втором терминале — генерация трафикаcurl http://example.com -
Фильтрация по хосту:
Окно терминала sudo tcpdump -i any host 8.8.8.8 -c 5ping -c 2 8.8.8.8
Задание 4.2. Наблюдение TCP Handshake
-
Перехватите трёхстороннее рукопожатие:
Окно терминала # В первом терминалеsudo tcpdump -i any port 80 -nn -c 10# Во втором терминалеcurl http://example.comНайдите в выводе пакеты с флагами:
[S]— SYN[S.]— SYN-ACK[.]— ACK[F.]— FIN-ACK
-
Сохраните перехваченный трафик в файл
.pcap:Окно терминала sudo tcpdump -i any port 80 -c 20 -w ~/project/data/capture.pcap# В другом терминалеcurl http://example.com# Прочитать файлsudo tcpdump -r ~/project/data/capture.pcap
Задание 4.3. Наблюдение DNS-запросов
# В первом терминалеsudo tcpdump -i any port 53 -nn -c 10
# Во втором терминалеdig google.comnslookup ya.ruНайдите DNS-запрос и ответ. Какой транспортный протокол используется (TCP или UDP)?
Часть 5. Файрвол (ufw)
Задание 5.1. Установка и базовая настройка
-
Установите ufw:
Окно терминала sudo apt install ufw -
Проверьте текущий статус:
Окно терминала sudo ufw status verbose -
Установите политики по умолчанию:
Окно терминала sudo ufw default deny incomingsudo ufw default allow outgoing
Задание 5.2. Добавление правил
-
Разрешите SSH (важно сделать ДО включения файрвола!):
Окно терминала sudo ufw allow 22/tcp -
Разрешите HTTP и HTTPS:
Окно терминала sudo ufw allow 80/tcpsudo ufw allow 443/tcp -
Разрешите доступ с конкретного IP:
Окно терминала sudo ufw allow from 192.168.1.0/24 -
Включите файрвол:
Окно терминала sudo ufw enable -
Просмотрите правила:
Окно терминала sudo ufw status numbered
Задание 5.3. Управление правилами
-
Удалите правило по номеру:
Окно терминала sudo ufw delete 3 -
Запретите конкретный порт:
Окно терминала sudo ufw deny 8080/tcp -
Просмотрите итоговый набор правил:
Окно терминала sudo ufw status verbose -
Отключите файрвол (для учебной среды):
Окно терминала sudo ufw disable
Часть 6. Netcat — сетевой «швейцарский нож»
Задание 6.1. Простой чат
-
В первом терминале запустите сервер:
Окно терминала nc -l -p 12345 -
Во втором терминале подключитесь как клиент:
Окно терминала nc localhost 12345 -
Введите текст в любом терминале — он появится в другом. Это простейший TCP-чат.
Задание 6.2. Передача файлов
-
Приёмник (первый терминал):
Окно терминала nc -l -p 12345 > ~/project/data/received_file.txt -
Отправитель (второй терминал):
Окно терминала echo "Файл передан через netcat!" | nc localhost 12345 -
Проверьте:
Окно терминала cat ~/project/data/received_file.txt
Задание 6.3. Сканирование портов
nc -zv localhost 22nc -zv localhost 80nc -zv localhost 1-100 2>&1 | grep succeededКакие порты открыты?
Мини-проект: настройка безопасного сервера
Выполните полную настройку безопасности сетевого доступа (на виртуальной машине):
-
Создайте нового пользователя с правами sudo:
Окно терминала sudo useradd -m -s /bin/bash secureusersudo passwd secureusersudo usermod -aG sudo secureuser -
Настройте SSH-доступ только по ключу:
- Сгенерируйте ключ для нового пользователя.
- Добавьте публичный ключ в
~secureuser/.ssh/authorized_keys. - Отключите вход по паролю в
/etc/ssh/sshd_config:PasswordAuthentication noPermitRootLogin no - Перезапустите sshd:
sudo systemctl restart sshd.
-
Настройте файрвол:
Окно терминала sudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow 22/tcpsudo ufw allow 80/tcpsudo ufw enable -
Проверьте с помощью tcpdump что трафик на закрытые порты отклоняется:
Окно терминала sudo tcpdump -i any port 8080 -c 5 &nc -zv localhost 8080 -
Составьте отчёт со всеми выполненными шагами и результатами проверок.
Контрольные вопросы
- Чем TCP отличается от UDP? Приведите по 3 примера применения каждого протокола.
- Опишите трёхстороннее рукопожатие TCP. Зачем оно нужно?
- Что такое порт? Чем well-known порты отличаются от ephemeral?
- Как работает DNS? Опишите процесс резолвинга имени
www.example.com. - Перечислите основные типы DNS-записей и их назначение.
- Что показывают коды ответов HTTP 200, 301, 404, 500?
- Как работает HTTPS? Что обеспечивает TLS?
- Чем аутентификация по SSH-ключу безопаснее пароля?
- Что такое межсетевой экран? Чем stateful firewall отличается от пакетного фильтра?
- Какие флаги TCP можно наблюдать в tcpdump при установлении и разрыве соединения?