Основы Linux. Как управлять сетью

Привет, друг! Я уже неоднократно говорил, но продолжу повторять, что любой хакер или специалист по информационной безопасности (называй как хочешь) должен, просто обязан знать Linux. Причин тому миллион, и в очередной раз останавливаться на этом не вижу смысла. А раз мы определились, что Linux важен, давай продолжим изучать Linux. В прошлый раз мы разобрались как работать с файлами и каталогами, если ты пропусти этот материал, он ЗДЕСЬ. А теперь я предлагаю разобраться как в Linux работать с сетью. В этой статье будет только практическая часть вопроса. Если, вдруг у тебя присутствует пробел в теоретических знаниях основ работы сетей, то ознакомься с нашими материалами:

Основы работы сетей для начинающего хакера. Часть 1. IP, DHCP, NAT, port.
Основы понимания сетей для начинающего хакера. Часть 2. TCP/IP

Основы Linux. Как управлять сетью

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

Перед тем как работать с сетью в Linux, иногда (а лучше всегда) необходимо узнать какая сетевая карта установлена в системе. Например решать вопросы совместимости довольно трудно не зная модель сетевой карты. Проще всего использовать для этого утилиту lshw. Установим её и запустим:

sudo apt install lshw 
sudo lshw -class network 
lshw

Если запустить её без дополнительных параметров, она выдаст подробную информацию о всех компонентах и устройствах компьютера.

В результате мы видим довольно подробную информацию об установленных сетевых адаптерах: производитель, модель, способ подключения, mac адрес, конфигурационные настройки и т.д.

Ping

Суть работы этой утилиты заключается в отправке ICMP пакетов удалённому серверу, а после возврата пакета, ping подсчитывает время которое понадобилось ему, чтобы дойти до сервера и вернуться.

ping hacker-basement.com
linux ping

В результате работы утилиты ping мы видим что:

  • Мы можем установить соединение с сервером
  • DNS работает корректно (имя запрашиваемого сервера было успешно преобразовано в ip)
  • Соединение устойчиво, об этом говорит отсутствие пропусков в параметре icmp_seq
  • Значение time говорит нам сколько времени понадобилось пакету чтобы добраться до хоста и обратно (именно этот параметр часто называют скоростью пинга)

Пару слов о возможных неисправностях: если появилась ошибка в стиле «сеть недоступна», то можно попробовать определить на каком этапе возникает проблема. Для начала «пропингуй» ip адрес роутера, если ответа нет, значит проблема у тебя (обрыв кабеля, настройки системы, параметры адаптера и т.д.). Если роутер отозвался, можно послать запрос серверу провайдера (как узнать ip провайдера будет ниже), если ответ не получен, значит проблема в сетях провайдера. Если сервер провайдера отвечает, можно попробовать послать запрос сайту по IP, если ответ придет, значит некорректно работает DNS. Ну, а если всё это не помогло, то провести более детальный анализ можно с помощью утилиты traceroute.

Traceroute

Каждый отправленный нами пакет, прежде чем достигнуть своей цели вынужден пройти некоторое количество узлов. При этом каждый пакет имеет, так называемое, время жизни — это количество узлов которое может пройти пакет перед тем как будет уничтожен. Это значение записывается в заголовке пакета, и уменьшается на 1 при прохождении каждого узла, если значение достигает 0 — пакет уничтожается, а отправитель получает сообщение что время превышено. Утилита traceroute отправляет на случайный порт по три UDP пакета со значением времени жизни сначала 1, потом 2, потом 3 и так пока не достигнет цели, при этом каждый раз замеряется время прохождения пакета. Трассировка считается оконченной когда traceroute от целевого узла получает сообщение что порт недоступен.

traceroute hacker-basement.com

И очень часто в ответ ты увидишь звёздочки:

tracerout

Это не значит, что всё пропало, это значит, что фаервол на сервере заблокировал все лишние пакеты, и соответственно трассировка UDP пакетами не работает, но сработает трассировка ICMP пакетами, чтобы её выполнить надо добавить параметр -I:

traceroute -I hacker-basement.com 
tracerout

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

Также в четвертой строке мы можем увидеть ip адрес нашего провайдера, а если сделать ещё парочку трассировок на другие адреса:

linux tracerout

То можно прийти к выводу, что провайдер осуществляет доступ к глобальной сети из сети 81.23.23.0/24, а локальная сеть провайдера к которой непосредственно подключен наш роутер не очень охотно отвечает на сервисные запросы.

Основы Linux. Ifconfig

Чтобы получить общую информацию о сетевых интрефейсах, проще всего использовать утилиту:

ifconfig 
linux ifconfig

После ввода этой команды мы увидим на экране достаточно большое количество технической информации, распределенной на группы в зависимости от типа сетевого интерфейса:

  • eth0 — проводное соединение;
  • wlan0 — беспроводное соединение;
  • lo — петлевой интерфейс т.е. интерфейс с обратной связью (используется компьютером для «общения с самим собой», он нужен, в основном, для диагностики, а также для подключения к серверам работающим на локальном компьютере.

В зависимости от используемого дистрибутива название сетевых интерфейсов может отличаться, но смысл от этого не меняется

Что касается самой полученной информации, то из всего этого набора непонятных слов и символов стоит выделить наиболее необходимые сведения:

  • RUNNING — означает, что интерфейс активен и пропускает трафик;
  • BROADCAST — широковещательное соединение;
  • inet — ip адрес протокола IPv4;
  • netmask — маска подсети, это информация о том, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети;
  • broadcast — диапазон широковещательного соединения broadcast;
  • inet6 — ip адрес протокола IPv6;
  • ether — уникальный адрес сетевой карты;
  • RX/TX — активность сетевого интерфейса.

IP

Помимо ifconfig общую информацию о сетевых интерфейсах можно получить использовав утилиту ip (более новая и в некоторых моментах более функциональная, чем ifconfig):

ip l  
ip l

Чтобы получить более подробную информацию о сетевых интерфейсах, необходимо выполнить команду (сведения аналогичны полученным от ifconfig) :

ip a
ip a

Иногда возникает необходимость увидеть маршруты в таблице маршрутизации, для этого также используется утилита ip:

ip rout show
linux ip

Здесь мы видим ip нашего маршрутизатора, ip нашего компьютера и в какой подсети он находится.

Чтобы отключить какой-либо интерфейс, вводим команду:

ip link set eth0 down 

Чтобы включить:

ip link set eth0 up

Если возникла необходимость сменить ip адрес, сделать это можно использовав утилиту ifconfig, указав какому интерфейсу, какой ip мы хотим назначить;

ifconfig wlan0 10.0.1.100
linux

Также можно задать не только ip, но и подсеть и широковещательный адрес (можно задавать каждый параметр по отдельности):

 
ifconfig wlan0 10.0.1.100 netmask 255.255.255.0 broadcast 10.0.1.255
замена ip, netmask. broadcast

По такому же принципу можно изменить MAC адрес нашей сетевой карты, что иногда бывает полезно с точки зрения «заметания следов», (например если ты решил похулиганить в общественной wi-fi сети). Нужно предварительно отключить сетевой интерфейс (выше показывал как это сделать) и задать новый mac, предварительно указав какому именно интерфейсу мы меняем mac-адрес:

ifconfig wlan0 hw ether 92:de:d1:10:92:d7
linux замена mac

Основы Linux. Контроль состояния сети

Чтобы контролировать состояние твоей сети, существует масса сторонних приложений (например NetHogs), но раз уж эта статья называется «основы», то давай рассматривать возможности самой системы, а в самой системе для этого существует утилита netstat.

Для начала используем флаг -i, чтобы увидеть состояние наших сетевых интерфейсов, с данные счётчиков трафика:

netstat -i 
netstat

В результате мы видим данные по каждому интерфейсу. Где RX — это общее количество пакетов полученных интерфейсом, а TX — это количество пакетов пропущенных через интерфейс с момента текущей активации. RX-ERR и TX-ERR — это количество ошибок, есть разные мнения о допустимом количество ошибок, но, как правило, если их меньше 5% от общего количества — это нормально, если больше значит, в большинстве случаев, есть проблемы с сетевой картой или с самим соединением.

Если ввести команду netstat без каких-либо дополнительных параметров, то мы увидим список процессов для которых установлены сетевые соединения, с адресом, портом, типом соединения, службой и количеством запросов в очереди:

linux netstat

Для того чтобы определить какие именно процессы какие порты слушают и по какому протоколу, нужно использовать параметры lpn:

netstat -lpn
netstat -lpn

Чтобы получить информацию о таблице маршрутизации, необходимо использовать параметр r:

netstat -r
Linux netstat

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

Твой Pulse.