# Настройка 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
```

![Как видим, все пусто.](https://1206415929-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXbCSSBR0J1rX84BjWO%2F-Ml0VrAosGRH6cQ6n-Cg%2F-Ml0mfy2cbiUJ3z0vqSt%2Fimage.png?alt=media\&token=63d4e37e-7660-4d6c-a22b-60a29261926e)

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

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

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

![Отлично! Порт 80 открыт](https://1206415929-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXbCSSBR0J1rX84BjWO%2F-Ml0VrAosGRH6cQ6n-Cg%2F-Ml0mtE25Dc_rH37wWUd%2Fimage.png?alt=media\&token=c032ea87-a8af-4705-90d0-f6369c3c7081)

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

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

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

![Есть. Диапазон UDP-портов доступен.](https://1206415929-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXbCSSBR0J1rX84BjWO%2F-Ml0VrAosGRH6cQ6n-Cg%2F-Ml0p-mskIKOCaFPsBO1%2Fimage.png?alt=media\&token=aa2a37b9-1f4b-4ae7-aaea-8c66582cf135)

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

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

![Готово!](https://1206415929-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXbCSSBR0J1rX84BjWO%2F-Ml0pEr2KUFKj_qwYOfV%2F-Ml0qAY0egz59Nl35EKx%2Fimage.png?alt=media\&token=698a3f81-3f1f-4aed-b8a5-d7e590baa9a6)

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

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

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

![Правило удалено.](https://1206415929-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXbCSSBR0J1rX84BjWO%2F-Ml0pEr2KUFKj_qwYOfV%2F-Ml0raIatQCl3Lp3GBPL%2Fimage.png?alt=media\&token=6edf70a2-3670-46f8-ba5a-aca81be47714)

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

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

```
iptables -F
```

![Все правила успешно очищены!](https://1206415929-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXbCSSBR0J1rX84BjWO%2F-Ml0rwxrtaUFiShmBWEJ%2F-Ml0sOppL9y_JP15ys9d%2Fimage.png?alt=media\&token=4fc2ea21-bc4c-4a3b-bfc2-0bdb780f664b)

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

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

```
iptables-save
```

![](https://1206415929-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LXbCSSBR0J1rX84BjWO%2F-Ml0rwxrtaUFiShmBWEJ%2F-Ml0sqc4Xvk0ozKy6Qas%2Fimage.png?alt=media\&token=d013b684-c0f1-4d10-bb00-2ebdbeb15369)

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