Внутреннее устройство Linux - Уорд Брайан (читать книги полностью .txt) 📗
# tcpdump tcp
Чтобы увидеть веб-пакеты и пакеты UDP, введите такую команду:
# tcpdump udp or port 80
примечание
Если вам необходима тщательная проверка пакетов, попробуйте использовать альтернативу команде tcpdump с графическим интерфейсом — например, приложение Wireshark.
Примитивы
В предыдущих примерах элементы tcp, udp и port 80 называются примитивами. Самые важные примитивы приведены в табл. 10.3.
Таблица 10.3. Примитивы команды tcpdump
Примитив
Спецификация пакета
tcp
Пакеты TCP
udp
Пакеты UDP
port port
Пакеты TCP и/или UDP к порту port или от него
host host
Пакеты к хосту host или от него
net network
Пакеты к сети network или от нее
Операторы
В предыдущем примере в качестве оператора применяется слово or. Команда tcpdump может использовать несколько операторов (таких как and и !), которые можно группировать с помощью скобок. Если вы планируете какую-либо серьезную работу с командой tcpdump, обязательно прочтите страницы руководства, в особенности раздел, который описывает примитивы.
Когда не следует применять команду tcpdump
Будьте очень осторожны при использовании команды tcpdump. Отчет команды tcpdump, показанный выше в этом разделе, содержит только информацию заголовка пакетов TCP (транспортный уровень) и IP (интернет-уровень), но вы можете также вывести с помощью команды tcpdump все содержимое пакета. Хотя многие сетевые операторы позволяют с легкостью просматривать сетевые пакеты, не следует шпионить за сетями, если вы не являетесь их владельцем.
10.5.3. Команда netcat
Если вам необходимо больше гибкости, чем позволяет команда вроде telnet host port при соединении с удаленным хостом, используйте команду netcat (или nc). Эта команда может подключаться к удаленным портам TCP/UDP, определять локальный порт, прослушивать и сканировать порты, перенаправлять стандартный ввод/вывод к сетевым соединениям и от них, а также многое другое. Чтобы открыть TCP-соединение с портом с помощью команды netcat, запустите:
$ netcat host port
Команда netcat завершает работу, только если другая сторона соединения разрывает его. Это может привести к путанице, если вы перенаправляете стандартный ввод в команду netcat. Разорвать соединение в любой момент можно с помощью нажатия сочетания клавиш Ctrl+C. Если вы предпочитаете, чтобы команда завершала работу и разрывала соединение на основе стандартного потока ввода, попробуйте команду sock.
Для прослушивания конкретного порта запустите такую команду:
$ netcat -l -p port_number
10.5.4. Сканирование портов
Иногда неизвестно даже то, какие службы предлагают компьютеры вашей сети или какие IP-адреса используются. Утилита Network Mapper (Nmap) сканирует все порты компьютера или сети компьютеров в поисках открытых портов, а затем выводит список всех обнаруженных портов. Большинство версий ОС содержит пакет Nmap, который можно также получить на сайте http://www.insecure.org/. Ознакомьтесь со страницей руководства по утилите Nmap или онлайн-источниками, чтобы узнать о том, что она может делать.
При перечислении портов вашего компьютера удобно запустить сканирование по крайней мере с двух точек: на вашем компьютере и на каком-либо еще (возможно, за пределами вашей локальной сети). Так вы получите представление о том, что блокируется вашим брандмауэром.
внимание
Если кто-либо еще контролирует сеть, которую вы собираетесь просканировать с помощью команды Nmap, спросите разрешение. Администраторы сети следят за сканированием портов и, как правило, лишают доступа те компьютеры, которые пользуются этим.
Запустите команду nmap host, чтобы выполнить обобщенное сканирование портов. Например, так:
$ nmap 10.1.2.2
Starting Nmap 5.21 ( http://nmap.org ) at 2015-09-21 16:51 PST
Nmap scan report for 10.1.2.2
Host is up (0.00027s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
8800/tcp open unknown
9000/tcp open cslistener
9090/tcp open zeus-admin
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
Как видите, здесь открыто несколько служб, многие по умолчанию не включены в большинстве версий ОС. На самом деле единственным портом, который по умолчанию включен, является порт 111 (порт rpcbind).
10.6. Удаленный вызов процедур (RPC)
Что же это за служба rpcbind, которую вы только что видели в предыдущем разделе при сканировании? RPC означает «удаленный вызов процедур» (Remote Procedure Call). Это система, которая расположена в нижней части прикладного уровня. Она предназначена для того, чтобы программистам было легче получать доступ к сетевым приложениям, используя следующее обстоятельство: команды вызывают функции в удаленных командах (которые идентифицируются по номерам), а затем удаленные команды возвращают результат или сообщение.
В реализациях RPC использованы транспортные протоколы, такие как TCP и UDP, и для них необходима специальная посредническая служба, которая сопоставляет номера команд с портами TCP и UDP. Сервер под названием rpcbind должен быть запущен на каждом компьютере, который будет использовать службы RPC.
Чтобы узнать, какие службы RPC есть на вашем компьютере, запустите такую команду:
$ rpcinfo -p localhost
Протокол RPC является одним из тех, который просто не должен выйти из употребления. Сетевая файловая система (NFS, Network File System) и служба сетевого информирования (NIS, Network Information Service) используют протокол RPC, но они абсолютно излишни для автономных компьютеров. Однако, как только вы решите, что полностью избавились от необходимости в команде rpcbind, возникает что-либо еще, например поддержка монитора доступа к файлам (FAM, File Access Monitor) в среде GNOME.
10.7. Сетевая безопасность
Поскольку Linux является очень популярным вариантом Unix для персональных компьютеров, в особенности потому, что широко используется для веб-серверов, она притягивает внимание многих субъектов, которые пытаются проникнуть в компьютерные системы. Нами были рассмотрены брандмауэры, но на этом рассказ о безопасности не заканчивается.
Сетевая безопасность привлекает экстремистов: как тех, кому действительно по душе вторжение в чужие системы (ради развлечения или ради денег), так и тех, кто создает замысловатые схемы и кому действительно нравится бороться со взломщиками систем (это также может быть очень прибыльным делом). К счастью, вам не надо знать очень много, чтобы обезопасить свою систему. Вот несколько основных правил.
• Запускайте как можно меньше служб. Взломщики не смогут взломать службу, которой нет в вашей системе. Если вы знаете о какой-либо службе, что она не используется вами, не включайте ее только из соображений, что она может вам пригодиться «когда-нибудь потом».
• Блокируйте с помощью брандмауэра настолько много, насколько возможно. В системах Unix есть несколько внутренних служб, о которых вы можете не догадываться (например, TCP-порт 111 для сервера RPC), и о них не следует знать никакой другой системе в мире. Может оказаться очень трудно отслеживать службы и управлять ими, если различные команды прослушивают разные порты. Чтобы не позволить взломщикам определить внутренние службы вашей системы, используйте эффективные правила для брандмауэра, а также установите брандмауэр в вашем маршрутизаторе.