Основы Linux. Как управлять сетью
Привет, друг! Я уже неоднократно говорил, но продолжу повторять, что любой хакер или специалист по информационной безопасности (называй как хочешь) должен, просто обязан знать Linux. Причин тому миллион, и в очередной раз останавливаться на этом не вижу смысла. А раз мы определились, что Linux важен, давай продолжим изучать Linux. В прошлый раз мы разобрались как работать с файлами и каталогами, если ты пропусти этот материал, он ЗДЕСЬ. А теперь я предлагаю разобраться как в Linux работать с сетью. В этой статье будет только практическая часть вопроса. Если, вдруг у тебя присутствует пробел в теоретических знаниях основ работы сетей, то ознакомься с нашими материалами:
Основы работы сетей для начинающего хакера. Часть 1. IP, DHCP, NAT, port.
Основы понимания сетей для начинающего хакера. Часть 2. TCP/IP
Что бы эта статья была полезна максимальному количеству людей, я постараюсь дать обобщённую информацию о наиболее необходимых сетевых утилитах и способах их применения. Т.е. я не буду расписывать все возможные способы применения той или иной утилиты, а дам наиболее необходимые, на мой взгляд, функции, которые наиболее часто могут применяться на практике.
Перед тем как работать с сетью в Linux, иногда (а лучше всегда) необходимо узнать какая сетевая карта установлена в системе. Например решать вопросы совместимости довольно трудно не зная модель сетевой карты. Проще всего использовать для этого утилиту lshw. Установим её и запустим:
sudo apt install lshw sudo lshw -class network
Если запустить её без дополнительных параметров, она выдаст подробную информацию о всех компонентах и устройствах компьютера.
В результате мы видим довольно подробную информацию об установленных сетевых адаптерах: производитель, модель, способ подключения, mac адрес, конфигурационные настройки и т.д.
Ping
Суть работы этой утилиты заключается в отправке ICMP пакетов удалённому серверу, а после возврата пакета, ping подсчитывает время которое понадобилось ему, чтобы дойти до сервера и вернуться.
ping hacker-basement.com
В результате работы утилиты ping мы видим что:
- Мы можем установить соединение с сервером
- DNS работает корректно (имя запрашиваемого сервера было успешно преобразовано в ip)
- Соединение устойчиво, об этом говорит отсутствие пропусков в параметре icmp_seq
- Значение time говорит нам сколько времени понадобилось пакету чтобы добраться до хоста и обратно (именно этот параметр часто называют скоростью пинга)
Пару слов о возможных неисправностях: если появилась ошибка в стиле «сеть недоступна», то можно попробовать определить на каком этапе возникает проблема. Для начала «пропингуй» ip адрес роутера, если ответа нет, значит проблема у тебя (обрыв кабеля, настройки системы, параметры адаптера и т.д.). Если роутер отозвался, можно послать запрос серверу провайдера (как узнать ip провайдера будет ниже), если ответ не получен, значит проблема в сетях провайдера. Если сервер провайдера отвечает, можно попробовать послать запрос сайту по IP, если ответ придет, значит некорректно работает DNS. Ну, а если всё это не помогло, то провести более детальный анализ можно с помощью утилиты traceroute.
Traceroute
Каждый отправленный нами пакет, прежде чем достигнуть своей цели вынужден пройти некоторое количество узлов. При этом каждый пакет имеет, так называемое, время жизни — это количество узлов которое может пройти пакет перед тем как будет уничтожен. Это значение записывается в заголовке пакета, и уменьшается на 1 при прохождении каждого узла, если значение достигает 0 — пакет уничтожается, а отправитель получает сообщение что время превышено. Утилита traceroute отправляет на случайный порт по три UDP пакета со значением времени жизни сначала 1, потом 2, потом 3 и так пока не достигнет цели, при этом каждый раз замеряется время прохождения пакета. Трассировка считается оконченной когда traceroute от целевого узла получает сообщение что порт недоступен.
traceroute hacker-basement.com
И очень часто в ответ ты увидишь звёздочки:
Это не значит, что всё пропало, это значит, что фаервол на сервере заблокировал все лишние пакеты, и соответственно трассировка UDP пакетами не работает, но сработает трассировка ICMP пакетами, чтобы её выполнить надо добавить параметр -I:
traceroute -I hacker-basement.com
Теперь мы видим, что наши пакеты прошли через 8 узлов, перед тем как достигнуть цели. Также мы видим время которое понадобилось каждому из трёх отправленных пакетов. Если бы на каком-то этапе возникла ошибка, мы бы увидели соответствующее сообщение.
Также в четвертой строке мы можем увидеть ip адрес нашего провайдера, а если сделать ещё парочку трассировок на другие адреса:
То можно прийти к выводу, что провайдер осуществляет доступ к глобальной сети из сети 81.23.23.0/24, а локальная сеть провайдера к которой непосредственно подключен наш роутер не очень охотно отвечает на сервисные запросы.
Основы Linux. Ifconfig
Чтобы получить общую информацию о сетевых интрефейсах, проще всего использовать утилиту:
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
Чтобы получить более подробную информацию о сетевых интерфейсах, необходимо выполнить команду (сведения аналогичны полученным от ifconfig) :
ip a
Иногда возникает необходимость увидеть маршруты в таблице маршрутизации, для этого также используется утилита ip:
ip rout show
Здесь мы видим ip нашего маршрутизатора, ip нашего компьютера и в какой подсети он находится.
Чтобы отключить какой-либо интерфейс, вводим команду:
ip link set eth0 down
Чтобы включить:
ip link set eth0 up
Если возникла необходимость сменить ip адрес, сделать это можно использовав утилиту ifconfig, указав какому интерфейсу, какой ip мы хотим назначить;
ifconfig wlan0 10.0.1.100
Также можно задать не только ip, но и подсеть и широковещательный адрес (можно задавать каждый параметр по отдельности):
ifconfig wlan0 10.0.1.100 netmask 255.255.255.0 broadcast 10.0.1.255
По такому же принципу можно изменить MAC адрес нашей сетевой карты, что иногда бывает полезно с точки зрения «заметания следов», (например если ты решил похулиганить в общественной wi-fi сети). Нужно предварительно отключить сетевой интерфейс (выше показывал как это сделать) и задать новый mac, предварительно указав какому именно интерфейсу мы меняем mac-адрес:
ifconfig wlan0 hw ether 92:de:d1:10:92:d7
Основы Linux. Контроль состояния сети
Чтобы контролировать состояние твоей сети, существует масса сторонних приложений (например NetHogs), но раз уж эта статья называется «основы», то давай рассматривать возможности самой системы, а в самой системе для этого существует утилита netstat.
Для начала используем флаг -i, чтобы увидеть состояние наших сетевых интерфейсов, с данные счётчиков трафика:
netstat -i
В результате мы видим данные по каждому интерфейсу. Где RX — это общее количество пакетов полученных интерфейсом, а TX — это количество пакетов пропущенных через интерфейс с момента текущей активации. RX-ERR и TX-ERR — это количество ошибок, есть разные мнения о допустимом количество ошибок, но, как правило, если их меньше 5% от общего количества — это нормально, если больше значит, в большинстве случаев, есть проблемы с сетевой картой или с самим соединением.
Если ввести команду netstat без каких-либо дополнительных параметров, то мы увидим список процессов для которых установлены сетевые соединения, с адресом, портом, типом соединения, службой и количеством запросов в очереди:
Для того чтобы определить какие именно процессы какие порты слушают и по какому протоколу, нужно использовать параметры lpn:
netstat -lpn
Чтобы получить информацию о таблице маршрутизации, необходимо использовать параметр r:
netstat -r
А на этом пожалуй всё. В моём понимании перечисленных утилит вполне достаточно начинающему линуксоиду для комфортной работы с сетью, а если какие-то важные утилиты я пропустил значит либо я о них забыл, либо они выходят за моё понимание основ работы с сетью. Ну и не забывай возвращаться, ведь нужно изучить ещё очень много.
Твой Pulse.