
# **Цель работы:**
* Научиться работать с утилитами ip a, ifconfig, traceroute, ping;
* Научиться настраивать сетевой интерфейс;
* Научиться настраивать шифрование домашнего каталога;
* Научиться работать с Help, Man.
1. Создаем снимок состояния машины сразу после установки системы

# **Практическая работа "Linux управление сетью, устранению неполадок и отладка.**
## **Цель работы:**
* Научиться работать с утилитами для диагностики сети в Linux системах;
* Составить собственную инструкцию;
* Проработать каждую утилиту на своей сети максимально подробно.
# ***1. Конфигурация сети, средства устранения неполадок и отладки***
**ifconfig**
1. Перечислим все существующие интерфейсы, вверх или вниз, с помощью утилиты ifconfig используя флаг -a

2. Назначим свой IP адрес интерфейсу ens33

3. Теперь деактивируем этот интерфейс

4. И снова активируем

**ping**
1. Посмотрим доступные опции с помощью флага -help

2. Проверим на доступность несколько адресов (для удобства будем отсылать на каждый адрес по 4 пакета с помощью флага -c)

:::info
Также, используя различные флаги, мы можем изменять:
Размер пакетов (-s)
Интервал отправки пакетов (-i)
Включение звукового сигнала (-a)
Количество отправляемых пакетов (-c)
:::

**traceroute**
1. Синтаксис представляет собой наипростейшую структуру ==traceroute опции адрес_узла==
:::info
В качестве адреса может использоваться ip адрес или доменное имя. Рассмотрим основные опции:
-4 или -6 - использовать ipv4 или ipv6 протокол;
-I - использовать ICMP пакеты вместо UDP;
-T - использовать TCP пакеты вместо UDP;
-F - не фрагментировать пакеты;
-f - указать TTL с которого нужно начать;
-g - передавать пакет через указанный шлюз;
-i - передавать пакет через указанный интерфейс;
-m - максимальное количество узлов, через которые пройдет пакет;
-q - количество пакетов, отправляемых за раз, по умолчанию три;
-n - не узнавать доменные имена;
-p - указать порт вместо порта по умолчанию;
-w - установить время ожидания ответа от узла, по умолчанию полсекунды;
-r - использовать другой роутер вместо того, что указанный в таблице маршрутизации;
-z - минимальный интервал между пакетами;
-U - использовать UDP с увеличением номера порта;
-UL - использовать протокол UDPLITE;
-D - использовать протокол DCCP;
–mtu - указать размер пакета;
-P - протокол, доступны такие значения: raw, dccp, udplite, udp, tcpconn, tcp, icmp.
:::
2. Посмотрим маршрут к роуттеру используя отпраку TCP пакетов

**mtr**
1. My traceroute объединяет в себе утилиты traceroute и ping. Его вывод обновляется в реальном времени по умолчанию, пока вы не выйдете из программы, нажав q .

**route**
1. route - это утилита командной строки для отображения или управления таблицей IP-маршрутизации системы Linux.

**Nmcli**
Nmcli - это простой в использовании инструмент командной строки с поддержкой сценариев для сообщения о состоянии сети, управления сетевыми подключениями и управления NetworkManager.
1. Посмотрим все сетевые устройства

2. Теперь выведем все сетевые подключения

**ethtool**
ethtool - нужен для настройки сетевой карты
1. С помощью `# lspci | grep Eth` выведем на экран, какие сетевые карты установлены на сервере

2. Устанавливаем ethtool и командой ==ethtool ens33== выведем инфорамцию о сетевой карте

3. С помощью этой утилиты можно менять скорость, на которой работает сетевая карта
# ***2. Инструменты сетевого сканирования и анализа производительности***
**netstat**
netstat - это инструмент командной строки, который отображает полезную информацию, такую как сетевые соединения, таблицы маршрутизации, статистику интерфейса и многое другое, о сетевой подсистеме Linux.
1. Используем netstat для проверки того, какие программы какие порты прослушивают.
2. Чтобы просмотреть таблицу маршрутизации ядра, используйте флаг -r

**ss**
ss - мощная утилита командной строки для исследования сокетов. Он сбрасывает статистику сокетов и отображает информацию, аналогичную netstat. Кроме того, он показывает больше информации о TCP и состоянии по сравнению с другими аналогичными утилитами.
1. С помощью`# ss -ta` выведем на экран, список всех TCP-портов (сокетов), открытых на сервере.

2. Чтобы отобразить все активные TCP-соединения вместе с их таймерами, выполните следующую команду `$ ss -to`

:::info
опции утилиты ss
-V - Version показать версию утилиты.
-n - Numeric не определять имена служб.
-r - Resolve определять сетевые имена адресов с помощью DNS.
-a - All отобразить все сокеты (открытые соединения).
-l - Listening показать только прослушиваемые сокеты.
-o - Options показать информацию таймера.
-e - Extended выводить расширенную информацию о сокете.
-p - Processes, показать процессы, использующие сокет.
-i - Internal, посмотреть внутреннюю информацию TCP.
-s - Summary, статистика использования сокета.
-D - экспортировать текущее состояние TCP сокетов в файл.
-F - работать с информацией, взятой из файла.
Кроме того, можно вывести сокеты только нужного протокола:
-4, --ipv4 - только сокеты протокола IP версии 4.
-6 --ipv6 - только сокеты протокола IP версии 6.
-0, --packet - только PACKET сокеты.
-t, --tcp - TCP сокеты.
-u, --udp - UDP сокеты.
-d, --dhcp - DHCP сокеты.
-r, --raw - RAW сокеты.
-x, --unix - UNIX сокеты.
:::
**Nmap**
Nmap (Network Mapper) - мощный и чрезвычайно универсальный инструмент для системных/сетевых администраторов Linux. Он используется для сбора информации об одном узле или для исследования сетей в целом. Nmap также используется для сканирования безопасности, аудита сети, поиска открытых портов на удаленных хостах и многого другого.
1. Вы можете сканировать хост, например, используя его имя хоста или IP-адрес.
`$ nmap google.com `

:::info
Синтаксис nmap
Команда запуска Nmap очень проста для этого достаточно передать ей в параметрах целевой IP адрес или сеть, а также указать опции при необходимости:
$ nmap опции адрес
Теперь давайте рассмотрим основные опции, которые понадобятся нам в этой статье.
-sL - просто создать список работающих хостов, но не сканировать порты nmap;
-sP - только проверять доступен ли хост с помощью ping;
-PN - считать все хосты доступными, даже если они не отвечают на ping;
-sS/sT/sA/sW/sM - TCP сканирование;
-sU - UDP сканирование nmap;
-sN/sF/sX - TCP NULL и FIN сканирование;
-sC - запускать скрипт по умолчанию;
-sI - ленивое Indle сканирование;
-p - указать диапазон портов для проверки;
-sV - детальное исследование портов для определения версий служб;
-O - определять операционную систему;
-T[0-5] - скорость сканирования, чем больше, тем быстрее;
-D - маскировать сканирование с помощью фиктивных IP;
-S - изменить свой IP адрес на указанный;
-e - использовать определенный интерфейс;
–spoof-mac - установить свой MAC адрес;
-A - определение операционной системы с помощью скриптов.
:::
**host**
host - это простая утилита для поиска DNS, она переводит имена хостов в IP-адреса и наоборот.

**dig**
dig (поиск информации о домене) также является еще одной простой утилитой поиска DNS, которая используется для запроса информации, связанной с DNS, такой как A Record, CNAME, MX Record и т. д., например:
`$ dig ya.ru`

:::info
Синтаксис команды dig
Использовать команду dig несложно. Достаточно ввести название сервера, имя домена и передать команде подходящие опции:
$ dig @сервер доменное.имя тип записи флаги
Где:
@cервер — IP-адрес или доменное имя DNS-сервера (если не указано, dig будет обращаться к DNS-серверу, используемому по умолчанию);
доменное.имя — доменное имя интернет-ресурса, о котором необходимо получить информацию;
тип записи — позволяет указать, для какого типа записи необходим вывод, например A, NS, MX или TXT;
флаги — с помощью флагов утилите dig отдаются дополнительные команды; оговаривается, каким должен быть вывод команды (что в нём должно быть, а чего нет).
ОПЦИИ И ФЛАГИ DIG
Во время работы утилиты dig могут использоваться следующие флаги:
+[no]all — отображает или скрывает все установленные по умолчанию флаги отображения;
+[no]answer — отображает только ответ на запрос;
+[no]fail — эта опция указывает, должна ли утилита переключаться на следующий DNS сервер, если текущий не отвечает (по умолчанию стоит +fail);
+short — сокращает вывод утилиты;
+[no]cmd — отключает вывод заголовка и информации об использованных опциях утилиты;
+[no]identify — используется вместе с флагом +short и отображает информацию об IP-адресе сервера;
+[no]comments — удаляет все комментарии из вывода утилиты;
+[no]trace - позволяет вывести список DNS серверов через которые прошёл запрос на получение информации о домене, по умолчанию отключено.
Вместе с dig можно применять следующие опции:
-4 — позволяет использовать только IPv4;
-6 — позволяет использовать только IPv6;
-x — предназначена для получения домена по IP;
-f — используется для чтения списка доменов из файла;
-b IP-адрес — позволяет указать исходящий IP-адрес, с которого отправлен запрос к DNS-серверу, полезно, если к компьютеру подключено несколько сетевых карт;
-r — предотвращает чтение настроек из файла ~/.digrc;
-t — позволяет указать тип записи, которую надо получить;
-p — позволяет указать номер порта DNS сервера;
-u — отображает время в секундах вместо миллисекунд.
:::
**Nslookup**
Nslookup также является популярной утилитой командной строки для интерактивного и неинтерактивного запроса DNS-серверов. Она используется для запроса записей ресурсов DNS (RR).
`$ nslookup google.com`

:::info
Команда nslookup
Синтаксис достаточно прост:
$ sudo nslookup опции домен сервер
Домен - это то доменное имя, для которого необходимо посмотреть информацию, а сервер - необязательный параметр, который указывает, что нужно использовать другой dns сервер. Основные опции nslookup:
-type - тип информации, которую хотим получить, возможные типы: txt, soa, ptr, ns, mx, mr, minfo, mg, mb, hinfo, gid, cname, a, any;
-port - другой порт DNS сервера;
-recurse - использоваться другие DNS серверы, если на этом нет ответа;
-retry - количество попыток получить нужную информацию;
-timeout - время между попытками запросов к серверу;
-fail - пробовать другой сервер имен, если этот вернул ошибку.
:::
# 3. Анализаторы сетевых пакетов Linux
**Tcpdump**
Tcpdump - очень мощный и широко используемый сетевой сниффер командной строки. Он используется для захвата и анализа пакетов TCP/IP, переданных или полученных по сети на определенном интерфейсе.
1. Чтобы перехватить пакеты с заданного интерфейса, укажите его с помощью параметра -i

:::info
Команда tcpdump
Перед тем как перейти к примерам работы с утилитой, давайте рассмотрим ее синтаксис и основные опции. Команда имеет такой синтаксис:
$ tcpdump опции -i интерфейс фильтры
При вызове обязательно нужно передать интерфейс, который будете отслеживать. Если интерфейс не указать, то будет использован первый в списке. Опции настраивают отображение и основные возможности утилиты, а фильтры позволяют отсеять ненужные пакеты. А теперь рассмотрим основные опции:
-A - выводить все пакеты в формате ASCII;
-c - закрыть программу после перехвата n-ого количества пакетов;
-C - при записи пакетов в файл, проверять размер файла, и если он больше заданного - создать новый файл;
-D - вывести список доступных сетевых интерфейсов;
-e - выводить информацию уровня соединения для каждого пакета, это может быть полезно, например, для отображения MAC адреса;
-f - выводить доменное имя для ip адресов;
-F - читать пакеты из файла, а не интерфейса;
-G - создавать новый файл лога через указанный промежуток времени;
-H - обнаруживать заголовки 802.11s;
-i - имя интерфейса для перехвата пакетов. Вы можете захватывать пакеты со всех интерфейсов, для этого укажите any;
-I - переключить интерфейс в режим монитора для захвата всех проходящих пакетов;
-j - установить формат Timestamp для записи пакетов;
-J - посмотреть доступные Timestamp;
-K - не проверять контрольные суммы пакетов;
-l - добавить поддержку прокрутки к выводу;
-L - вывести поддерживаемые протоколы подключения для интерфейса;
-n - не отображать доменные имена;
-r - прочитать пакеты из файла, созданного с помощью -w;
-v, -vv, -vvv - более подробный вывод;
-q - выводить минимум информации;
-w - записать вывод в файл;
-Z - пользователь, от имени которого будут создаваться файлы.
Это не все опции, но их вам будет вполне достаточно для решения большинства задач.
:::
**Wireshark**
Wireshark - это популярный, мощный, универсальный и простой в использовании инструмент для захвата и анализа пакетов в сети с коммутацией пакетов в режиме реального времени.

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

# 4.Инструменты управления брандмауэром Linux
iptables - это инструмент командной строки для настройки, обслуживания и проверки таблиц фильтрации IP-пакетов и набора правил NAT. Он использовался для настройки и управления брандмауэром Linux (Netfilter). Это позволяет вам перечислить существующие правила фильтрации пакетов; добавлять, удалять или изменять правила фильтрации пакетов; список счетчиков правил фильтрации пакетов.
## Вывод:
В данной практической работе я научился работать с одними из самых распростанённых утилит для диагностики сети в Linux.
# Практическая работа по команде ip a (с примерами)
## Цель работы:
* научиться работать с командой ip a.
* проделать ручками все команды.
Команда ip — это мощный инструмент для настройки сетевых интерфейсов, который должен знать любой системный администратор Linux. Он используется для включения или выключения интерфейсов, назначения и удаления адресов и маршрутов, управления кешем ARP и многого другого.
Синтаксис команды ip следующий:
==ip [ OPTIONS ] OBJECT { COMMAND | help }==
*
Типы объектов:
* link ( l ) — отображение и изменение сетевых интерфейсов.
* address ( a ) — отображение и изменение IP-адресов.
* route ( r ) — отображение и изменение таблицы маршрутизации.
* neigh ( n ) — Отображение и управление соседними объектами (таблица ARP).
**Важно!
Конфигурации, установленные с помощью команды ip , не являются постоянными. После перезапуска системы все изменения теряются. Чтобы сделать изменения постоянными, вам необходимо отредактировать файлы конфигурации конкретного дистрибутива или добавить команды в сценарий запуска.**
1. Выведем информацию о всех адресах

2. Отобразим информаци. только об одном интерфейсе

3. Назначим IP адрес интерфейсу
`$ ip addr add ADDRESS dev IFNAME`
Где IFNAME — это имя интерфейса, а ADDRESS — это IP-адрес, который вы хотите назначить интерфейсу.

4. Также можно назначить несколько адресов одному интерфейсу
```
sudo ip address add 192.168.121.241/24 dev ens33
sudo ip address add 192.168.121.45/24 dev ens33
```

5. Синтаксис для удаления IP-адреса из интерфейса следующий:
`ip addr del ADDRESS dev IFNAME`

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

7. Чтобы получить информацию о конкретном сетевом интерфейсе, используйте ip link show dev за которым следует имя устройства. Например, чтобы запросить eth0 вы должны ввести:
`$ip link show dev ens33`

8. Чтобы вывести интерфейсы онлайн или оффлайн, используйте ip link set dev за которым следует имя устройства и желаемое состояние:
`ip link set dev {DEVICE} {up|down}`
# 2. Отображение и изменение таблицы маршрутизации
**Чтобы добавить новую запись в таблицу маршрутизации, используйте команду route add за которой следует имя сети или устройства.**
Чтобы добавить маршрут по умолчанию, используйте ключевое слово default . Следующая команда добавит маршрут по умолчанию через локальный шлюз 192.168.121.1 который может быть достигнут на устройстве eth0 .
`ip route add default via 192.168.121.1 dev eth0`
**Чтобы удалить запись из таблицы маршрутизации, используйте команду route del . Синтаксис удаления маршрута такой же, как и при добавлении.**
Следующая команда удалит маршрут по умолчанию:
`ip route del default`
# Выводы
К настоящему времени я понял как использовать команду Linux ip.
# Практическая работа “Справочные системы”.
Самой известной справочной системой, сопровождающей UNIX практически с момента ее рождения, является справочная система страниц руководства, информация из которой доступна при помощи команд man, apropos и whatis.
Справочная система man- pages состоит из отдельных страниц, посвященных отдельным командам, специальным файлам устройств, конфигурационным файлам, системным и библиотечным вызовам и другим понятиям, которые сгруппированы по восьми (обычно, но есть исключения из правил) секциям. Каждая секция имеет заголовочную страницу intro, описывающую назначение самой секции.
**Секции справочной системы man:**
```
user@ubuntu:~$ whatis intro
user@ubuntu:~$ whatis whatis
user@ubuntu:~$ whatis apropos
user@ubuntu:~$ whatis nan
```
**Формат страниц справочной системы man**
```
user@ubuntu:~$ man -w man
user@ubuntu:~$ file /usr/share/man/m/manl/man.l.gz
user@ubuntu:~$ file -z /usr/share/man/ru/manl/man.l.gz
user@ubuntu:~$ whatis file
```
**Форматирование справочных страниц руководства для печати и для html-браузера**
```
user@ubuntu:~$ man -t man > man.print.1
user@ubuntu:~$ file man.print.1
user@ubuntu:~$ $ man -T lz4 man > man.print.2
user@ubuntu:~$ file man.print.2
user@ubuntu:~$ man -thtml man > man.html
user@ubuntu:~$ file man.html
```
:::info
$ man раздел название_страницы
Обычно название страницы совпадает с именем команды или названием программы. Вся справка разделена на несколько разделов. По умолчанию страницы справки выводятся из всех разделов, но вы можете выводить страницы справки из определённого раздела. Для этого достаточно передать номер раздела команде. Вот список основных разделов:
1 - команды оболочки или программы;
2 - системные вызовы;
3 - функции библиотек;
4 - файлы из каталога /dev;
5 - форматы файлов;
6 - игры;
7 - разное;
8 - команды администрирования системы;
9 - процедуры ядра.
:::
**Help**
Однако обращаться каждый раз к весьма внушительной справке по командному интерпретатору не совсем удобно, поэтому встроенная в командный интерпретатор команда help позволяет получить краткую справку по встроенным командам интерпретатора

```
user@ubuntu:~$ help -d help
user@ubuntu:~$ help -d cd
user@ubuntu:~$ help cd
```

# Создаем нового пользователя
1. С помощью команды useradd добавим пользователя

2. Установить пользователю пароль

```
useradd -m user - создать пользователя user с домашней директорией
userdel –r user - стереть пользователя user с его домашней директорией
/etc/skel - это шаблон домашней директории
passwd user - изменить пароль для пользователя user
```
# Практическая работа “Шифрование домашнего каталога на базе Ubuntu”
## Цель работы:
* Разобраться как происходит процесс шифрования каталога.
* Научиться шифровать выбранных пользователей.
Для шифрования всего домашнего каталога пользователя можно использовать
программу ecryptfs. Допустим, что у вас в системе есть пользователь user1, тогда его домашний каталог можно зашифровать следующей командой:
`sudo ecryptfs-migrate-home -u user0`

Если программа ecryptfs не установлена, то ее можно установить так:
`sudo apt-get install ecryptfs-utils cryptsetup`
Отсутствие на компьютере программы еcryptfs- не единственная причина, почему
команда ее запуска может не выполниться:
файлы в домашнем каталоге пользователя в этот момент использоваться не должны. Лучше всего, если пользователь полностью выйдет из системы.
Если команда миграции выполнилась успешно, то вы должны увидеть инструкцию,
согласно которой пользователь должен войти в систему, и это нужно сделать до ее
перезагрузки. Если он это сделает и сможет работать с файлами, то все прошло успешно.
Осталась одна возможность, которая может стать причиной утечки зашифрованной информации, файл подкачки. Если какая-либо пользовательская информация попала в память и ОС сбросила эту страницу памяти на диск в файл подкачки, а хакер смог прочитать этот файл, то это станет для вас серьезной проблемой.
Поэтому рекомендуется зашифровать и файл подкачки, для чего администратор
системы должен выполнить команду:
`ecryptfs-setup-swap`

## Вывод:
Я смог разобраться как происходит шифрование домашнего каталога инаучился шифровать пользователей
# Вывод по работе:
Я научился с утилитами ip a, ifconfig, traceroute, ping;
настраивать сетевой интерфейс; настраивать шифрование домашнего каталога;работать с Help, Man.