> For the complete documentation index, see [llms.txt](https://spacecore.gitbook.io/wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://spacecore.gitbook.io/wiki/network-and-security-configuration/iptables-configuration.md).

# Настройка IPTables

## Общая информация

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

### Debian / Ubuntu

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

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

### CentOS \[Fedora]

```
sudo yum install iptables
```

## Настройка

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

### Аргументы

{% 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 %}

### Открытие порта(-ов)

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

```
iptables -L
```

![Как видим, все пусто.](/files/-Ml0mfy2cbiUJ3z0vqSt)

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

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

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

![Отлично! Порт 80 открыт](/files/-Ml0mtE25Dc_rH37wWUd)

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

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

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

![Есть. Диапазон UDP-портов доступен.](/files/-Ml0p-mskIKOCaFPsBO1)

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

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

![Готово!](/files/-Ml0qAY0egz59Nl35EKx)

### &#x20;Удаление правил

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

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

![Правило удалено.](/files/-Ml0raIatQCl3Lp3GBPL)

### Удаление всех правил

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

```
iptables -F
```

![Все правила успешно очищены!](/files/-Ml0sOppL9y_JP15ys9d)

### Сохранение созданных правил

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

```
iptables-save
```

![](/files/-Ml0sqc4Xvk0ozKy6Qas)

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