> For the complete documentation index, see [llms.txt](https://denis-3.gitbook.io/linuxguide-linux-dlya-nachinayushikh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://denis-3.gitbook.io/linuxguide-linux-dlya-nachinayushikh/terminal-linux/rabota-s-setyu.md).

# Работа с сетью

Работа с сетью - это необязательный, но важный аспект, с которым лучше познакомиться в Linux. Этим, в основном, пользуются системные администраторы. Но и обычным обывателям будет полезно знать базовые команды, связанные с сетью.

## ping

Это, наверное, одна из самых частоиспользуемых сетевых команд, так как она довольно полезная при диагностике сети. В чём суть? Как известно, все данные в сети передаются пакетами. Так вот, ping отправляет специальные сетевые пакеты (ICMP) на указанный адрес узла (url сайта, домен...) и ожидает получения ответа. Если ответ (эхо-сообщение) пришёл, значит всё окей, считается, что узел доступен. Также программа считает время ответа для оценки задержки в сети. И такие пакеты утилита отправляет вслед за другим после получения ответа, и в итоге показывает общее время работы, количество отправленных и полученных пакетов и процент потерянных. Попробуем "пропинговать" сайт поисковика Google - google.com. Вводим в терминале `ping`, затем адрес узла. Немного подождите и нажмите Ctrl+C.

<figure><img src="/files/BkwJaZFgjPOme1JaMou0" alt=""><figcaption></figcaption></figure>

Как видно, ответы получены, потерь нет, а значит доступ к google.com есть. Чтобы отправить ограниченное количество пакетов, перед адресом узла надо прописать ключ `-c` и число пакетов. А параметр `-i` позволяет указать интервал отправки пакетов в секундах.

<figure><img src="/files/uO7pdGuiVZOh0rcd0Oke" alt=""><figcaption><p>Яндекс тоже доступен</p></figcaption></figure>

## ip и ifconfig

Раньше довольно часто пользовались утилитой ifconfig для настройки сети. Но сейчас всё чаще используется другая утилита ip, более новая и с другим синтаксисом. Рассмотрим обе. Чтобы узнать информацию о сетевых интерфейсах, введите `ifconfig`. Для вывода краткого списка интерфейс нужно прописать ключ `-s`.

<figure><img src="/files/6yx8ARoFfRLqrduaNL2L" alt=""><figcaption></figcaption></figure>

Ну а чтобы узнать ip-адрес через утилиту ip, надо ввести `ip address`. Таблицу маршрутизации можно просмотреть через `ip route`. Она даёт понять соответствие между адресами назначения и интерфейсами. По ней система определяет по какому маршруту пустить сетевой пакет.

<figure><img src="/files/cvk0wrORQ9RXRiTlhR7T" alt=""><figcaption></figcaption></figure>

## netstat

Эта команда входит в пакет net-tools, который может быть необходимо установить в систему, если его нет. В Linux Mint и Ubuntu-based введите `sudo apt install net-tools`

Она выводит информацию, связанную с сетью ("статистика сети"). Если ввести без ключей, то будет выведен огромный список всякой информации, разделённой на 2 секции: активные интернет-соединения и активные сокеты домена UNIX. При помощи ключей можно сортировать, группировать вывод по протоколам, статусам соединения, портам и т. д. Не буду вдаваться в подробности, затрону только 3 ключа. Просто введём `netstat` и всё увидим.

<figure><img src="/files/JxavgxoX0uA2D98A9b3G" alt=""><figcaption></figcaption></figure>

Ключ `-r` выводит уже известную нам таблицу маршрутизации, `-s` показывает статистику протоколов, а `-i` - сетевых интерфейсов.

У этой команды есть альтернатива. Это `ss`.

## dig

Это мощный инструмент для работы с DNS-серверами. Используя его, можно узнать подробную информацию о домене. Давайте попробуем.&#x20;

{% hint style="info" %}
DNS (**Domain Name System**) - система доменных имён, которая переводит URL-адрес сайта в его ip-адрес, его "имя" в уникальный "номер". С помощью DNS сайты регистрируются в сети и становятся доступными всем, а не только автору.
{% endhint %}

Вводим в Терминале dig и какой-нибудь сайт, тот же Google.&#x20;

<figure><img src="/files/8QlDLL9VNwObRld8JdY2" alt=""><figcaption></figcaption></figure>

Из всей этой информации можно получить тольео необходимую. Например, короткий вид при помощи `+short`, который прописывается после доменного имени. Или при помощи `+noall +answer` для вывода результата на отправленный запрос. А ещё можно получить домен по IP-адресу интернет-ресурса при помощи ключа `-x` и приписке `+short`. Попробуем, 8.8.8.8 (DNS Google) и 77.88.44.55 (Яндекс).

<figure><img src="/files/Pd67UkLqNkqz7QmFkDy6" alt=""><figcaption></figcaption></figure>

## host

Эта команда позволяет просмотреть информацию по домену, включая почтовые серверы, а также IP-адреса (v4, v6). Просто вводим `host` и адрес сайта. Более подробный вывод можно увидеть добавив ключ `-v`.

<figure><img src="/files/um4GK5aV5LWcanI5nH0s" alt=""><figcaption></figcaption></figure>

## curl и wget

Это важные утилиты, которые действительно стоит изучить. Они предназначены для загрузки файлов из Интернета. curl поддерживает больше протоколов, в отличии от wget. wget используется, в основном, для загрузки файлов из Интернета, поддерживает рекурсивную загрузку, сохраняет файлы непосредственно на диск. curl же больше подходит для работы с API, передачи между серверами, по умолчанию, выводит содержимое файла. Рассмотрим обе.

Попробуем с официальным сайтом Linux Mint.&#x20;

<div><figure><img src="/files/hUsptvmk08lawCz0djXq" alt=""><figcaption></figcaption></figure> <figure><img src="/files/ig9E2hYB2UDUnDcGE3B7" alt=""><figcaption></figcaption></figure></div>

И тут сразу видно различие логики утилит. wget сразу загружает сайт в файл. А curl выводит содержимое. Но при помощи ключа `-o` можно загружать сайт и через `curl`. Так можно загружать любые файлы (например, из репозитория на GitHub) через Терминал.

## Firewall

Ещё называется брандмауэр. Он контролирует трафик сети и по определённым правилам блокирует его. Такая система защиты. Она помогает ограничить доступ к сервисам и защитить нас от нежелательных подключений. В Linux существуют специальные инструменты для управления этим фаерволом. Разберём 2: ufw и iptables.

### iptables

Это мощный низкоуровневый инструмент для управления фаерволом в Linux. Работает с цепочками. Это наборы правил. INPUT - управляет входящим трафиком, OUTPUT - управляет исходящим трафиком и FORWARD - управляет трафиком, проходящим через устройство (если работает, как маршрутизатор или раздатчик сети). Есть ещё дополнительные цепочки. Это prerouting - пакет попадает туда перед обработкой iptables и postrouting - цепочка, куда попадает проходящий пакет от FORWARD. Для управления есть несколько действий. Вот одни из них: ACCEPT - разрешить пакет и его дальнейшее прохождение, DROP - удалить (отбросить) пакет, блокировка трафика, REJECT - отклонить пакет и отправить пользователю сообщение об ошибке и LOG - записать в файл информацию о пакете, может использоваться с другими действиями. Существуют ещё таблицы. Они позволяют выполнять определённые действия с пакетом, в зависимости от сценария использования. Их всего 4. Filter - фильтрация пакетов, используется по умолчанию, mangle - модификация пакетов (изменение маршрута или приоритета трафика), raw - обход системы отслеживания состояний пакетов, ну и nat - трансляция сетевых адресов (использование компьютера в качестве маршрутизатора). Вот несколько команд iptables.

Команды будем выполнять через `sudo`. Итак, чтобы посмотреть текущее правила всех цепочек, введите `sudo iptables -L`. Если нужно узнать правила определённой цепочки, просто укажите имя цепочки после ключа `-L`. По умолчанию, будут показываться правила таблицы filter. Чтобы посмотреть правила другой таблицы, используйте ключ `-t`. Кстати, если для пакета ни одно правило не подходит, то выполняется действие по умолчанию (строка policy).

<figure><img src="/files/BDunn0ZpNCbxrzdWI2D1" alt=""><figcaption></figcaption></figure>

Чтобы добавить новое правило, используйте ключ -A. Например, для блокировки входящего TCP-трафика на порт 22 (SSH), введите `sudo iptables -A INPUT -p tcp --dport 22 -j DROP`. `sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT` - для разрешения HTTP (порт 80). Или принятие всех входящих пакетов от IP-адреса 192.168.0.111, используя `sudo iptables -A INPUT -s 192.168.0.111 -j ACCEPT`.

<figure><img src="/files/zfcnGw7b6sW781Cz274X" alt=""><figcaption></figcaption></figure>

Для удаления правила синтаксис тот же. Только вместо ключа `-A`, используем ключ `-D`. А для очистки всех правил, нужно использовать `iptables` с ключом `-F`.

<figure><img src="/files/oelZL0lsk5c317XYco7g" alt=""><figcaption></figcaption></figure>

Чтобы изменить дефолтное действие для неопределённых пакетов в цепочке, используйте ключ -p. Например, для удаления таких входящих пакетов и принятия исходящих и проходящих, нужно ввести команды: `sudo iptables -P INPUT DROP; sudo iptables -P FORWARD ACCEPT; sudo iptables -P OUTPUT ACCEPT`.

<figure><img src="/files/CUZsdjd16WlC3x04cgKL" alt=""><figcaption></figcaption></figure>

Вот только всё это сохраняется до перезагрузки. После, всё будет как и было. Поэтому изменения нужно сохранить. Для Ubuntu-based: `sudo /sbin/iptables-save`, для CentOS и Fedora: `sudo /sbin/service iptables save`.

<figure><img src="/files/mS1ig47AzjIXka9JvSmJ" alt=""><figcaption></figcaption></figure>

### ufw

Это простая надстройка для удобства настройки фаервола. "Под капотом" тот же iptables, но управление легче и понятнее. Для начала узнаем статус ufw и включим (**если работаете с SSH, надо сначала настроить разрешения SSH!**), если неактивно. `sudo ufw status` (если добавить слово `verbose`, будет более подробный вывод), `sudo ufw enable`.

<figure><img src="/files/H4cTiOZP3ZWW120FcAOg" alt=""><figcaption></figcaption></figure>

Вместо того, чтобы запоминать порты, можно запомнить имена сервисов (ssh, http, samba), а порты ufw уже знает. Сначала разберём глобальную политику по умолчанию. Она будет работать для тех пакетов, которые не подходят под наши правила. Введём две команды. `sudo ufw default deny incoming` и `sudo ufw default allow outgoing`. Первая - запретит весь входящий трафик (безопасная настройка), вторая - разрешит исходящий (обычная настройка).

<figure><img src="/files/3RVD8a3wpYilTCSHKQlC" alt=""><figcaption></figcaption></figure>

Для разрешения трафика используйте слово `allow` и порт или имя службы, или порт/протокол, или `from` и IP-адрес. Например, `sudo ufw allow ssh`, `sudo ufw allow 8080/tcp`, `sudo ufw allow from 192.168.1.0`. Для просмотра доступных имён приложений используйте `sudo ufw app list`. Кстати, `sudo ufw allow 22`(или `ssh`) нужно прописать перед включением ufw, если работаете с SSH.

<figure><img src="/files/z3NKuFVIuLE02sHEVVRr" alt=""><figcaption></figcaption></figure>

Для запрета/отклонения трафика, используйте `deny`/`reject` вместо `allow`. Например, `sudo ufw deny 21/tcp` - запрет входящих пакетов от FTP и `sudo ufw reject smtp` - отклонение входящих SMTP-пакетов с отправкой сообщения об ошибке. Теперь можно посмотреть все правила в пронумерованном списке командой `sudo ufw status numbered`.

<figure><img src="/files/QND96HrbCZMlFdhh8PBF" alt=""><figcaption></figcaption></figure>

Чтобы удалить правило, используйте ключевое слово delete, а за ним само правило или порядковый номер из списка. Например, `sudo ufw delete allow ssh` - отключение правила, разрешающего HTTP, `sudo ufw delete 7`.

<figure><img src="/files/mlAWbLJ8XlhAHOVS3DVd" alt=""><figcaption></figcaption></figure>

Чтобы отслеживать изменения, надо включить логирование и указать его уровень (low - низкий, medium - средний, high - высокий). Введите `sudo ufw logging on` и `sudo ufw logging medium`.

<figure><img src="/files/731lj1YZzxCaZxwGq8V9" alt=""><figcaption></figcaption></figure>

Журнал сохраняется в файле /var/log/ufw\.log.

<figure><img src="/files/q5c8l9OfmcXY18iVG1qh" alt=""><figcaption></figcaption></figure>

Чтобы всё вернуть в прежнее состояние по настройкам, используйте `sudo ufw reset`. А чтобы полностью отключить ufw, введите `sudo ufw disable`.

<figure><img src="/files/sFsya1PRMfUiYnLFDEaH" alt=""><figcaption></figcaption></figure>

Сейчас покажу стандартную настройку ufw:

* `sudo ufw default deny incoming`
* `sudo ufw default allow outgoing`
* `sudo ufw allow ssh` **(Сделайте это ДО включения на сервере, если используете SSH!)**
* `sudo ufw allow http` (если нужен веб-сервер)
* `sudo ufw allow https` (если нужен HTTPS)
* `sudo ufw enable`
* `sudo ufw status verbose`

Вот и всё! Конечно, есть ещё много тонкостей при работе с сетью, в том числе с брандмауэром, но этой базы может быть вполне достаточно обычному пользователю.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://denis-3.gitbook.io/linuxguide-linux-dlya-nachinayushikh/terminal-linux/rabota-s-setyu.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
