# OSINT. Практическая работа. Настройка сети в Linux. Найденов Иван Вадимович ББСО-01-22
<h2>Цель работы:</h2>
В данной практической работе необходимо научиться работать с утилитами, помогающими осуществлять настройку сети, проверку сети на работоспособность: **ip a**, **ifconfig**, **traceroute**, **ping**. Также мы должны научиться настраивать сетевой интерфейс и шифрование домашнего каталога. Помимо этого необходимо научиться работать с утилитами-справками **help** и **man**.
<h2>Практическая работа 1.0 “Пользовательское окружение ОС Linux”</h2>
<h3>Цель работы:</h3>
В практике 1.0 необходимо обучиться взаимодействию с терминалом и узнать, что делают команды **tty**, **users**, **who**,**w**.

<h4>tty</h4>
Данная команда печатает имя файла терминала, подключенного к стандартному вводу, что видно из скриншота ниже.

В моем случае она отображает следующее

По сути она отображает номер открытого окна терминала. Так как открыто одно окно, то его номер 0. Если же я открою 4 окна, то у 4го будет номер 3:

<h4>who</h4>
Команда **who** достаточно простая. Она показывает всех пользователей, которые залогинены в системе в данный момент.

<h4>users</h4>
Команда **users** печатает имя пользователя, который вошел на текущий хост в данный момент.

Здесь мы видим стандартного пользователя - kali.
<h4>w</h4>
Команда **w** отображает информацию о пользователях, находящихся в данный момент на машине, и их процессах. Заголовок показывает в этом порядке текущее время, как долго работает система, сколько пользователей в настоящее время вошли в систему,
и средние значения загрузки системы за последние 1, 5 и 15 минут.

<h3>Вывод:</h3>
Мы изучили команды **tty**, **users**, **who**,**w**, узнали что они делают. Научились основам взаимодействия с терминалом Linux.
<h3>Практическая работа 1.1 "Linux управление сетью, устранению неполадок и отладка."</h3>
<h4>Цель работы:</h4>
В этой практической работе мы научимся работать с утилитами для диагностики сети в Linux - системах, составим собственную инструкцию и поробно разберем и проработаем каждую утилиту на своей сети.
<h3>1. Конфигурация сети, средства устранения неполадок и отладки</h3>
<h4>ifconfig </h4>
**ifconfig** используется для настройки сетевого интерфейса во время загрузки системы. После этого он обычно нужен только при отладке или настройке системы. Как и у других команд у ifconfig есть различные аргументы.

**ifconfig -a** отображет все интерфейсы, доступные в данный момент, даже если они отключены.
Для назначения нового ip-адреса интерфейсу используется следующая команда: **$sudo ifconfig eth0 (новый ip) netmask 255.255.255.0**
Назначим нашему интерфейсу новый ip 192.168.45.4

Для активации или деактивации сетевого интерфейса используется следующая команда: **$sudo ifconfig eth0 (ip адрес) up (или down)**

На данном скриншоте мы поочередно включили и выключили сетевой интерфейс и посмотрели состояние сети.
# <h4>ping</h4>
**ping** - это утилита, которая проверяет возможность соединения между двумя системами как по локальной сети, так и по глобальной. Программа передает небольшой пакет с данными ICMP и ожидает получить обратно пакет ответа, если получает, то считается что удаленный узел доступен. ICMP или Internet Control Message Protocol - это надстройка над протоколом IP, которая используется для передачи служебных сообщений и сообщений и ошибках.
На данном скриншоте я пингую мой смартфон, подключенный, как и компьютер, к одной домашней сети. Флаг -с 10 указывает на количество запросов к серверу 192.168.1.105 (т.е к телефону).

# <h4>Traceroute</h4>
**Traceroute** - это утилита, показывающая путь пакетов от устройства до другого сетевого хоста. Она необходима для выявления неполадок сети. Если **ping** просто показывает есть ли связь между устройствами, то **traceroute** показывает весь путь пакетов и все промежуточные узлы. С помощью нее можно узнать где пакеты задерживаются.

# <h4>MTR</h4>
MTR является комбинацией **ping** и **traceroute** в одном инструменте. Его вывод обновляется в реальном времени по умолчанию, пока вы не выйдете из программы, нажав q.

# <h4>route</h4>
route - утилита показывает и управляет таблицей ip-маршрутизации адресов. Пример на скрине ниже.

Существует множество команд, которые можно использовать для настройки маршрутизации. Вот некоторые из них:
`$ sudo route add default gw <gateway-ip>` - добавляет шлюз по умолчанию в таблицу маршрутизации. Пример на скрине ниже.

`$ sudo route add -net <network ip> gw <gateway ip> <interface>` - добавляет сетевой маршрут в таблицу маршрутизации. Пример:

`$ sudo route del -net <network ip>` - удаляет конкретную запиь маршрута из таблицы маршрутизации

(Сравним таблицы из предыдущих двух скриншотов. ip 168.168.122.0 удалился)
`$ sudo route add -host <ip> reject` - данная команда отклоняет все сетевые пакеты для одного хоста. Выделенный желтым цветом флаг !H означает, что цель отправляемых пакетов хост(о чем говорит H) и что пакеты отклоняются (! перед H).

`$ sudo route add -net <ip> netmask <маска> reject` - отклоняет сетевые пакеты для всей сети. (Помогает нам увидеть это опять же флаг "!")

# <h4>Nmcli</h4>
Nmcli инструмент командной строки с поддержкой сценариев для сообщения о состоянии сети, управления сетевыми подключениями и управления NetworkManager.
`$ nmcli dev status` показывает все сетевые устройства.
`$ nmcli con show` проверка сетевых подключений в системе.
`$ nmcli con show -a` просмотр активных соединений

# <h4>ethtool</h4>
Бывают ситуации, когда необходимо настроить непосредственно сетевую карту. Давайте попробуем сделать это. Чтобы посмотреть какие сетевые карты есть на сервере используется команда `$ lspci | grep Eth` (grep - это утилита, которая выполняет поиск образца, в данном случае Eth, и выдает все строки, содержащие этот образец. На скриншоте видно выделение красным цветом строки, содержащей "Eth". ). Мы видим, что в данном случае на сервере (т.е на устройстве) установлена сетевая карта **Intel Corporation 82545EM Gigabit Enthernet Controller**

<!--Необходимо заметить, что вывполнить настройки сетевой карты можно только на реальном железе, а в данной практической используется виртуальная машина, поэтому команды, расмотренные далее, будут просто описаны.-->
# <h2>2. Инструменты сетевого сканирования и анализа производительности</h2>
# <h3>netstat</h3>
**netstat** - это инструмент, показывающий сетевые соединения, таблицу маршрутизации, статистику интерфейса и другое о сетевой системе Linux. Это полезно для устранения неполадок в сети и анализа производительности. Кроме того, это также основной инструмент отладки сетевых служб, используемый для проверки того, какие программы какие порты прослушивают.
`$ netstat -r` - просмотр таблицы маршрутизации (аналог route)

`$sudo netstat -tnlp` - показ прослушиваемых tcp портов и программ, которые это делают. В моём случае их нет.

# <h3>ss</h3>
**ss (statics sockets)** - утилита для исследования сокетов. Он сбрасывает статистику сокетов и отображает информацию, аналогичную **netstat**. Также он показывает больше информации о tcp чем другие утилиты.
`$ ss -ta` - отображение всех открытых TCP-портов.
`$ ss -to` - все активные TCP-соединения.

# <h3>NC (NetCat)</h3>
**NC (NetCat)** - мощная утилита, используемая практически для любых задач, связанных с сокетами tcp, udp, или unix-доменами. Он используется для открытия TCP-соединений, прослушивания произвольных TCP- и UDP-портов, выполнения сканирования портов и многого другого. Также его можно использовать в качестве TCP-прокси для тестирования сетевых демонов и проверки доступности удаленных портов и др.
Команда `$ nc -zv <ip> <порты или их диапазон>` - сканер открытых портов


# <h3>Nmap</h3>
**Nmap** - мощный инструмент сетевых и системных администраторов.Nmap также используется для сканирования безопасности, аудита сети, поиска открытых портов на удаленных хостах и u многого другого.
`$ nmap <домен или ip>`

У nmap есть множество функций:

`$ sudo nmap --traceroute (хост)` - трассировка до хоста

`$ sudo nmap --traceroute -sn` - трассировка без сканирования портов

Бывают случаи, когда данные о трассировке выводятся не полными. Тогда можно добавить флаг -PE.
# <h3>host</h3>
Команда **host** - это простая утилита для поиска DNS, она переводит имена хостов в IP-адреса и наоборот.

# <h3>dig</h3>
**dig** - аналог хост. Тоже самое в другой обертке.

# <h3>Nslookup</h3>
**Nslookup** - еще один аналог **dig** и **host** :D

# <h2>3.Анализаторы сетевых пакетов Linux</h2>
# <h3>tcpdump</h3>
**tcpdump** - утилита,позволяющая перехватывать и анализировать сетевой трафик. Он используется для захвата и анализа пакетов TCP/IP, переданных или полученных по сети на определенном интерфейсе.
`$ sudo tcpdump -i eth0` - перехват пакетов по определенному интерфейсу. В данном случае по eth0.

### wireshark
**wireshark** - это очень мощный и популярный инструмент для захвата и анализа пакетов в сети в реальном времени. Схож с **tcpdump**, но имеет больше возможностей и фильтров, а также графический интерфейс. Открыть его можно из терминала `$ wireshark` или через список приложений.

### bmon
**bmon** - утилита для сетевого мониторинга и отладки на основе командной строки для Unix-подобных систем, она собирает статистику, связанную с сетью, и выводит ее визуально в удобном для человека формате.

### Вывод
В данной практической работе мы научились работать с самыми распространенными утилитами для диагностики сети в Linux. Также мы составили собственную инструкцию и опробовали утилиты на собственной сети.
## Практическая работа по команде ip a
### Цели
- научиться работать с командой ip a.
- Опробовать все команды самим
**Команда ip** - это мощный инструмент для настройки сетевых интерфейсов. Она отображает и управляет маршрутами, сетевыми устройствами, интерфейсами и туннелями.
### 1.1 Как использовать команду ip
Как и у многих других команд у ip есть свой синтаксис.
`ip [ OPTIONS ] OBJECT { COMMAND | help }`
Доступные OPTIONS

OBJECT — это тип объекта, которым вы хотите управлять. Вот все доступные

Объект может быть написан в полной или сокращенной (краткой) форме. При настройке сетевых интерфейсов необходимо выполнять команды как root или пользователь с привилегиями sudo.
***Важное замечание:***
Конфигурации, установленные с помощью команды ip , не являются постоянными. После перезапуска системы все изменения теряются. Чтобы сделать изменения постоянными, необходимо отредактировать файлы конфигурации конкретного дистрибутива или добавить команды в сценарий запуска.
### 1.2 Отображение и изменение IP-адресов
При работе с объектом addr команды принимают следующий вид:
`ip addr [ COMMAND ] ADDRESS dev IFNAME`
### 1.3 Отображение информации обо всех IP-адресах
Например `ip address show` показывает все адреса на устройстве.

Если вы хотите отображать только IP-адреса IPv4 или IPv6 , используйте ip -4 addr или ip -6 addr.

### 1.4 Отображение информации обо всех IP-адресах. Отображение информации об одном сетевом интерфейсе
Чтобы получить информацию о конкретном сетевом интерфейсе, используйте ip addr show dev за которым следует имя устройства. Например, чтобы запросить eth0 , вы должны ввести:
`ip address show dev <имя сетевого интерфейса>`

### 1.5 Назначение IP-адреса интерфейсу
Чтобы назначить IP-адрес интерфейсу, используйте следующий синтаксис:
`ip addr add ADDRESS dev IFNAME`
### 1.6 Назначение несколько IP-адресов одному интерфейсу
С помощью ip можно назначить несколько адресов одному интерфейсу. Например:
`sudo ip address <ip-адрес 1> dev eth0`
`sudo ip address <ip-адрес 2> dev eth0`

### 1.7 Удалить IP-адрес из интерфейса
Синтаксис для удаления IP-адреса из интерфейса следующий:
`ip addr del <ip-адрес> dev <имя интерфейса>`
Удалим адреса, добавленные в предыдущем пункте

### 1.8 Отображение и изменение сетевых интерфейсов
Для управления и просмотра состояния сетевых интерфейсов используйте объект link .
При работе с объектами link наиболее часто используются следующие команды: show , set , add и del .
Для отображения всех сетевых интерфейсов используется следующая команда
`ip link show`

По аналогии можно отобразить и конкретный сетевой интерфейс
`ip link show dev <имя интерфейса>`
### 1.9 Измените статус интерфейса ВВЕРХ / ВНИЗ
Чтобы вывести интерфейсы вверх или вниз, используется
`ip link set dev <имя сетевого интерфейса> <состояние (up или down)>`
Отключим интерфейс

А теперь включим обратно

### 2. Отображение и изменение таблицы маршрутизации
Для назначения, удаления и отображения таблицы маршрутизации ядра используется объект route . Наиболее часто используемые команды при работе с объектами маршрутов: list , add и del .
### 2.1 Показать таблицу маршрутизации
Чтобы получить список записей маршрута ядра используем команду
`ip route`

Чтобы отобразить только маршрутизацию для определенной сети, необходимо ввести `ip r list <ip-адрес>`

### 2.2 Добавление нового маршрута
Чтобы добавить новую запись в таблицу маршрутизации, используйтся команда route add за которой следует имя сети или устройства.


Удаление производится аналогично
### Вывод
Познакомились с командой **ip a** и выполнили все действия из данной практической работы самостоятельно.
## Traceroute
Команда traceroute может применяться для тестирования, администрирования и оценки значений параметров сети.
1) Команда ping позволяет убедиться, что удаленная сеть IP достижима. Однако с ее помощью нельзя обнаружить и устранить неполадки.
Если маршрут от системы к целевому хосту содержит много транзитных узлов (например, шлюзов и маршрутизаторов), то неполадка может возникнуть на любом из этих узлов. В этом случае нужно выяснить, на каком этапе теряется пакет. Если пакет не удается доставить, команда ping не сообщает причину ошибки. Команда traceroute позволяет узнать, где в данный момент находится пакет, и почему его нельзя доставить по заданному маршруту. Если пакет будет передаваться через маршрутизаторы и каналы связи, принадлежащие другим организациям, то вам вряд ли удастся проверить состояние этих маршрутизаторов с помощью команды telnet. В этом случае можно воспользоваться командами traceroute и ping.
2) Команда traceroute применяет протокол UDP и функцию создания отчета об ошибках, предусмотренную в ICMP. Эта команда трижды отправляет пакет UDP каждому шлюзу или маршрутизатору, входящему в маршрут. Первый пакет отправляется ближайшему шлюзу. Второй пакет отправляется следующему за ним транзитному узлу и т.д. Последний пакет отправляется целевой системе. В выводе команды указывается имя шлюза, IP-адрес шлюза и время оборота трех пакетов, отправленных шлюзу.
3) Примеры неполадок, возникающих при выполнении команды traceroute. Если маршрут к целевому хосту включает большое число транзитных узлов или проходит через сети со сложной конфигурацией, то при вызове команды traceroute часто возникают различного рода ошибки. Поскольку многие аспекты работы команды зависят от ее реализации, во многих случаях невозможно найти причину ошибки. Однако если все маршрутизаторы и системы, через которые передается пакет, относятся к вашей организации, то вы можете проанализировать причину ошибки.
## 2. Методические указания к выполнению
### 2.1 Определение состояния сетевого подключения.
Просмотрим информацию по всем сетевым интерфейсам командой **ifconfig –a**

MAC: 00:0c:29:c8:c0:b9
IP-адрес: 192.168.181.128
Маска: 255.255.255.0
Адрес широковещательной рассылки: 192.168.181.255
### 2.2 Задайте пароль для пользователя root. Для этого:
Чтобы задать пароль для суперпользователя root необходимо прописать следущую команду `$ sudo passwd root`

### 2.3 Настройка сетевых параметров через графический интерфейс.

### Вывод
В данной практической работе научились работать с утилитами, помогающими осуществлять настройку сети, проверку сети на работоспособность: **ip a**, **ifconfig**, **traceroute**, **ping**. Также мы научились настраивать сетевой интерфейс и шифрование домашнего каталога. Помимо этого научились работать с утилитами-справками **help** и **man**. Развернули две виртуальных машины, поняли процесс запуска систем Linux, выполнили практику 1.0 и 1.1, практику по команде **ip a**, **traceroute**