> For the complete documentation index, see [llms.txt](https://wiki.qwins.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.qwins.co/nastroika-seti-i-bezopasnost/nastroika-iptables.md).

# Настройка IPTables

<figure><img src="/files/7PQK91FMcaVFiVgwZMFl" alt=""><figcaption></figcaption></figure>

## Общая информация <a href="#obshaya-informaciya" id="obshaya-informaciya"></a>

**IPTables** уже по умолчанию встроена в основное ядро **Linux**, но инструменты для работы с ней во многих дистрибутивах не поставляются по умолчанию, поэтому давайте используем команду для установки утилиты.

## Debian / Ubuntu <a href="#debian-ubuntu" id="debian-ubuntu"></a>

```
[sudo] apt install iptables
```

{% hint style="info" %}
**Sudo** предназначена для использования на **ОС Ubuntu**. Для **Debian** используется обыкновенная команда.
{% endhint %}

## CentOS \[Fedora] <a href="#centos-fedora" id="centos-fedora"></a>

```
sudo yum install iptables
```

## Настройка <a href="#nastroika" id="nastroika"></a>

После установки утилиты перейдем к ее подробной настройке.

## Аргументы <a href="#argumenty" id="argumenty"></a>

{% hint style="info" %}
**-A** — добавить правило в раздел.

**-С** — проверить все правила.

**-D** — удалить правило.

**-I** — вставить правило с необходимым номером.

**-L** — вывести все правила в текущем разделе.

**-S** — вывести все правила.

**-F** — очистить все правила.

**-N** — создать раздел.

**-X** — удалить раздел.

**-P** — установить действие по умолчанию.

**-p** — установить протокол.

**-s** — указать адрес отправителя.

**-d** — указать адрес получателя.

**-i** — входной сетевой интерфейс.

**-o** — исходящий сетевой интерфейс.

**-j** — выполнить при соответствии правила.
{% endhint %}

{% hint style="info" %}
**INPUT** — отвечает за обработку входящих пакетов и подключений.

**FORWARD** — применяется для проходящих соединений. Именно сюда попадают соответствующие пакеты, которые отправлены на Ваш сервер, но не определяют его как цель доставки.

**OUTPUT** — полностью противоположно первому. Используется для исходящих пакетов и соединений.
{% endhint %}

{% hint style="info" %}
**ACCEPT** — пропустить пакет.

**DROP** — удалить пакет.

**REJECT** — отклонить пакет.

**LOG** — сделать лог-файл соответствующего пакета.

**QUEUE** — отправить пакет приложению пользователя.
{% endhint %}

## Открытие порта(-ов) <a href="#otkrytie-porta-ov" id="otkrytie-porta-ov"></a>

Для начала давайте проверим список наших правил:

```
iptables -L
```

<figure><img src="/files/3gdPqTinXwyvtuvfM6oT" alt=""><figcaption><p>Как видим, все пусто</p></figcaption></figure>

Попробуем открыть один **TCP-порт** **80** для **входящих соединений**:

```
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
```

Проверим список еще раз...

<figure><img src="/files/78PUw9uExxvNufoHyp42" alt=""><figcaption><p>Как видим, все открыто.</p></figcaption></figure>

Теперь давайте попытаемся открыть диапазон **UDP-портов** **от** **25565** **до** **25570** для **исходящих подключений**:

```
iptables -t filter -A OUTPUT -p udp --dport 25565:25570 -j ACCEPT
```

Проверим результат.

<figure><img src="/files/UACxfBh66hoirqMqUUDz" alt=""><figcaption><p>Диапазон UDP-портов доступен.</p></figcaption></figure>

Хотите закрыть **все входящие подключения** для **TCP 250**? Не проблема.

```
iptables -t filter -A INPUT -p tcp --dport 250 -m state --state ESTABLISHED -j DROP
```

<figure><img src="/files/tMtSAtN0l3dTnXyJNv5X" alt=""><figcaption><p>Готово</p></figcaption></figure>

## Удаление правил <a href="#udalenie-pravil" id="udalenie-pravil"></a>

Теперь попробуем удалить правило, которое разрешает **входящие соединения** для **TCP 80**:

```
iptables -t filter -D INPUT -p tcp --dport 80 -j ACCEPT
```

<figure><img src="/files/tUAmaYscHTszd0pKT7s8" alt=""><figcaption><p>Правило удалено.</p></figcaption></figure>

## Удаление всех правил <a href="#udalenie-vsekh-pravil" id="udalenie-vsekh-pravil"></a>

Для этого используйте команду

```
iptables -F
```

<figure><img src="/files/4FEv1jdHPqZXHMCKXIUN" alt=""><figcaption><p>Все правила успешно очищены</p></figcaption></figure>

## Сохранение созданных правил <a href="#sokhranenie-sozdannykh-pravil" id="sokhranenie-sozdannykh-pravil"></a>

По умолчанию все созданные правила применяются до следующей перезагрузки и будут удалены во время ее выполнения. Чтобы избежать этого, давайте сохраним созданные нами правила **IPTables**. Для этого необходимо использовать соответствующую команду.

```
iptables-save
```

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

Получилось. Правила сохранены и будут активны даже после перезагрузки нашего сервера.
