Введение
Добро пожаловать в эту лабораторную работу по анализу сетевого трафика и безопасному удаленному доступу в Linux. Понимание того, как отслеживать сетевую активность и обеспечивать безопасность коммуникаций, является критически важным навыком для любого системного администратора, разработчика или энтузиаста в области безопасности.
В этой лабораторной работе вы получите практический опыт работы с набором мощных инструментов командной строки. Вы научитесь:
- Проверять активные сетевые соединения и прослушиваемые службы с помощью
netstatи его современного преемникаss. - Захватывать и анализировать пакеты сетевого трафика в реальном времени с помощью
tcpdump. - Устанавливать безопасное удаленное соединение с вашим собственным компьютером с помощью
ssh. - Проверять целостность DNS-ответов с помощью
digи DNSSEC.
К концу этой лабораторной работы вы получите практическое понимание этих основных сетевых утилит и их роли в управлении и обеспечении безопасности системы Linux.
Проверка активных сетевых соединений с помощью Netstat/SS
На этом этапе вы научитесь просматривать активные сетевые соединения и прослушиваемые порты в вашей системе. Это фундаментально для понимания того, какие службы запущены и доступны по сети. Мы будем использовать два распространенных инструмента: netstat и ss.
Сначала давайте воспользуемся netstat, классической и широко известной утилитой. Пакет net-tools, содержащий netstat, был установлен для вас во время настройки лабораторной работы.
Выполните следующую команду, чтобы вывести список всех прослушиваемых TCP (-t) и UDP (-u) портов в числовом формате (-n) без разрешения имен, фокусируясь только на прослушиваемых сокетах (-l):
netstat -tuln
Вы должны увидеть вывод, похожий на этот. Обратите внимание на записи для SSH-сервера (порт 22) и веб-сервера Python (порт 8000), которые были запущены для вас, а также на дополнительные службы на портах 3001 и 3002:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3001 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3002 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.11:37199 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 127.0.0.11:60120 0.0.0.0:*
udp 0 0 0.0.0.0:3001 0.0.0.0:*
Теперь давайте воспользуемся ss, который является современной заменой netstat. Он, как правило, быстрее и предоставляет более подробную информацию. Команда и флаги очень похожи.
ss -tuln
Вывод будет немного отличаться по формату, но будет содержать ту же основную информацию: службы, прослушиваемые на портах 22, 3001, 3002 и 8000, а также некоторые внутренние службы Docker:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.11:60120 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:3001 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 5 0.0.0.0:3001 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:3002 0.0.0.0:*
tcp LISTEN 0 5 0.0.0.0:8000 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.11:37199 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:*
Используя эти команды, вы можете быстро получить снимок сетевых служб вашей системы.
Захват локального сетевого трафика с помощью Tcpdump
На этом этапе вы будете использовать tcpdump, мощный анализатор пакетов командной строки, для захвата и анализа сетевого трафика в реальном времени. Это бесценно для отладки сетевых проблем или понимания работы протоколов.
Сначала давайте посмотрим, какие сетевые интерфейсы доступны для захвата трафика.
sudo tcpdump -D
Вывод перечислит доступные интерфейсы. lo — это "loopback" (обратный) интерфейс, который используется для сетевой связи внутри одной машины (например, для подключения к localhost). Вы увидите различные интерфейсы, включая основной сетевой интерфейс eth1:
1.eth1 [Up, Running, Connected]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless]
5.nflog (Linux netfilter log (NFLOG) interface) [none]
6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
7.dbus-system (D-Bus system bus) [none]
8.dbus-session (D-Bus session bus) [none]
Мы будем захватывать трафик на интерфейсе обратной связи (lo), чтобы увидеть запросы к нашему локальному веб-серверу. Для этого вам понадобятся два терминала.
В текущем терминале выполните следующую команду tcpdump. Она будет слушать на интерфейсе lo (-i lo) и остановится после захвата 5 пакетов (-c 5).
sudo tcpdump -i lo -c 5
Теперь нажмите значок + на панели вкладок терминала, чтобы открыть новый терминал. В этом новом терминале сгенерируйте сетевой трафик, отправив запрос к локальному веб-серверу с помощью curl.
curl http://localhost:8000
Переключитесь обратно на ваш первый терминал. Вы увидите, что tcpdump захватил пакеты, связанные с вашим запросом curl. Вывод будет выглядеть примерно так, показывая TCP-хендшейк и передачу данных:
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes
14:57:14.158058 IP localhost.57272 > localhost.8000: Flags [S], seq 2025143228, win 65495, options [mss 65495,sackOK,TS val 1006286113 ecr 0,nop,wscale 7], length 0
14:57:14.158072 IP localhost.8000 > localhost.57272: Flags [S.], seq 403368374, ack 2025143229, win 65483, options [mss 65495,sackOK,TS val 1006286113 ecr 1006286113,nop,wscale 7], length 0
14:57:14.158083 IP localhost.57272 > localhost.8000: Flags [.], ack 1, win 512, options [nop,nop,TS val 1006286113 ecr 1006286113], length 0
14:57:14.158129 IP localhost.57272 > localhost.8000: Flags [P.], seq 1:79, ack 1, win 512, options [nop,nop,TS val 1006286113 ecr 1006286113], length 78
14:57:14.158133 IP localhost.8000 > localhost.57272: Flags [.], ack 79, win 511, options [nop,nop,TS val 1006286113 ecr 1006286113], length 0
5 packets captured
24 packets received by filter
0 packets dropped by kernel
Обратите внимание, что если вы запустите tcpdump без генерации конкретного трафика, вы можете увидеть фоновые DNS-запросы и другие системные коммуникации, как показано в ваших логах. Это нормальное поведение системы и демонстрирует, что даже когда вы активно не просматриваете веб-страницы, ваша система поддерживает различные сетевые коммуникации.
Вы успешно захватили и просмотрели сетевой трафик в реальном времени.
Демонстрация безопасного удаленного доступа с использованием SSH
На этом этапе вы научитесь использовать SSH (Secure Shell) для безопасного удаленного доступа. Мы настроим аутентификацию по ключу, которая более безопасна, чем использование паролей, для входа в вашу собственную машину (localhost). Сервер openssh-server уже был запущен для вас.
Сначала вам нужно сгенерировать пару SSH-ключей (приватный ключ и публичный ключ). Мы создадим ключ RSA с длиной ключа 2048 бит. Флаг -f указывает файл для сохранения ключа, а -N "" устанавливает пустую кодовую фразу для удобства в этой лабораторной работе.
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""
Эта команда создает id_rsa (ваш приватный ключ) и id_rsa.pub (ваш публичный ключ) в каталоге ~/.ssh.
Далее, чтобы разрешить вашему пользователю вход с использованием этого ключа, вы должны добавить публичный ключ в файл authorized_keys. Этот файл содержит список всех публичных ключей, которым разрешен вход.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
В целях безопасности SSH требует строгих разрешений для каталога .ssh и его файлов. Давайте убедимся, что они установлены правильно. Скрипт настройки уже создал эти файлы с правильными разрешениями, но полезно знать эти команды.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Теперь все настроено. Вы можете протестировать безопасное соединение с localhost. Команда выполнит echo "Hello from SSH" на удаленной стороне (которая является вашей собственной машиной) и выведет результат.
ssh labex@localhost 'echo "Hello from SSH"'
При первом подключении вас могут попросить проверить отпечаток (fingerprint) хоста. Введите yes и нажмите Enter. Затем вы должны увидеть вывод команды echo.
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
Hello from SSH
Вы успешно настроили и использовали SSH для безопасной аутентификации по ключу.
Проверка разрешения DNSSEC с помощью Dig
На этом этапе вы будете использовать dig (Domain Information Groper) для выполнения DNS-запросов и изучения DNSSEC (DNS Security Extensions). DNSSEC помогает защититься от подмены DNS путем добавления криптографических подписей к данным DNS.
Сначала выполним стандартный DNS-запрос для labex.io, чтобы увидеть его IP-адрес.
dig labex.io
Вывод покажет вам детали запроса и, что наиболее важно, ANSWER SECTION с A-записями (IP-адресами). Обратите внимание, что labex.io имеет несколько IP-адресов для балансировки нагрузки:
; <<>> DiG 9.18.24-0ubuntu0.22.04.1-Ubuntu <<>> labex.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9789
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;labex.io. IN A
;; ANSWER SECTION:
labex.io. 10 IN A 104.26.10.219
labex.io. 10 IN A 104.26.11.219
labex.io. 10 IN A 172.67.72.162
;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11) (UDP)
;; WHEN: Tue Aug 05 14:58:16 CST 2025
;; MSG SIZE rcvd: 85
Теперь выполним тот же запрос, но попросим DNS-резолвер предоставить данные, связанные с DNSSEC, добавив опцию +dnssec.
dig labex.io +dnssec
Вывод включает дополнительную информацию, связанную с DNSSEC, в OPT PSEUDOSECTION, показывая, что DNSSEC был запрошен (флаг do означает "DNSSEC OK"). Однако обратите внимание, что раздел flags не содержит флага ad (Authenticated Data):
; <<>> DiG 9.18.24-0ubuntu0.22.04.1-Ubuntu <<>> labex.io +dnssec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1042
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 65494
; OPT=5: 05 07 08 0a 0d 0e 0f (".......")
; OPT=6: 01 02 04 ("...")
; OPT=7: 01 (".")
;; QUESTION SECTION:
;labex.io. IN A
;; ANSWER SECTION:
labex.io. 5 IN A 172.67.72.162
labex.io. 5 IN A 104.26.11.219
labex.io. 5 IN A 104.26.10.219
;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11) (UDP)
;; WHEN: Tue Aug 05 14:58:21 CST 2025
;; MSG SIZE rcvd: 108
Отсутствие флага ad указывает на то, что, хотя информация DNSSEC была запрошена, резолвер либо не смог проверить подписи, либо домен не имеет включенного DNSSEC.
Попробуем другой известный домен, использующий DNSSEC, icann.org, чтобы увидеть это снова.
dig icann.org +dnssec
Снова проверьте заголовок в выводе:
; <<>> DiG 9.18.24-0ubuntu0.22.04.1-Ubuntu <<>> icann.org +dnssec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54437
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 65494
; OPT=5: 05 07 08 0a 0d 0e 0f (".......")
; OPT=6: 01 02 04 ("...")
; OPT=7: 01 (".")
;; QUESTION SECTION:
;icann.org. IN A
;; ANSWER SECTION:
icann.org. 10 IN A 192.0.43.7
;; Query time: 72 msec
;; SERVER: 127.0.0.11#53(127.0.0.11) (UDP)
;; WHEN: Tue Aug 05 14:58:26 CST 2025
;; MSG SIZE rcvd: 77
Аналогично предыдущему запросу, в ответе нет флага ad. Это указывает на то, что DNS-резолвер в данной среде не выполняет проверку DNSSEC, что часто встречается в контейнеризированных или виртуализированных средах, где DNS-резолвер может быть настроен иначе, чем стандартный системный резолвер.
Резюме
Поздравляем с завершением лабораторной работы! Вы получили практический опыт работы с несколькими важными инструментами Linux для работы с сетью и обеспечения безопасности.
В этой лабораторной работе вы научились:
- Использовать
netstatиssдля проверки того, какие сетевые службы запущены и ожидают соединений. - Захватывать пакеты сетевого трафика в реальном времени на определенном интерфейсе с помощью
tcpdumpдля анализа трафика. - Настраивать и использовать
sshс аутентификацией по ключу для безопасного удаленного доступа. - Использовать
digдля запросов к системе доменных имен (DNS) и понимания концепций DNSSEC, включая то, как запрашивать информацию DNSSEC и интерпретировать результаты.
Это фундаментальные навыки, которые имеют решающее значение для управления, устранения неполадок и обеспечения безопасности любой среды Linux. Мы призываем вас продолжать изучать множество опций, которые предлагают эти мощные инструменты.



