---
title: 'iptables для начинающих: правила и цепочки без страха | Zomro'
description: ''
image: 'https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2026/06/29/00-cover_fNKuwKf_q50.jpg'
---

![opened image]()

  * [Zomro](https://zomro.com/rus/)
  * [FAQ](https://zomro.com/rus/blog/faq/)
  * iptables для начинающих: правила и цепочки без страха 



# iptables для начинающих: правила и цепочки без страха

30-06-2026

![](https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2026/06/29/00-cover_fNKuwKf_q50.jpg)

iptables - инструмент управления сетевым фильтром ядра Linux (Netfilter). Несмотря на то что nftables постепенно его вытесняет, iptables по-прежнему стоит на большинстве серверов с Ubuntu 20.04/22.04 и CentOS 7. Пять минут практики - и базовая защита VPS готова.

## Как это работает: цепочки и таблицы

Входящий пакет проходит через последовательность правил. Proxmox VE делает то же самое для LXC и VM. Упрощённая схема:
    
    
    Входящий трафик -> PREROUTING -> [маршрутизация] -> INPUT (для локальных процессов)
                                                      -> FORWARD (для транзитного трафика)
    Исходящий трафик -> OUTPUT -> POSTROUTING -> сеть

Три главные цепочки:

  * **INPUT** \- пакеты, предназначенные локальному хосту

  * **OUTPUT** \- пакеты, исходящие от локального хоста

  * **FORWARD** \- транзитные пакеты (актуально для роутеров и VPN-серверов)




Таблица `filter` \- стандартная, используется по умолчанию. Есть также `nat` и `mangle`, но они нужны для более специфических задач.

Каждое правило заканчивается одним из действий (targets):

  * `ACCEPT` \- пропустить пакет

  * `DROP` \- отбросить без ответа

  * `REJECT` \- отбросить с ICMP-ошибкой (отправитель знает, что соединение отклонено)




## Просмотр текущих правил
    
    
    sudo iptables -L -v -n --line-numbers

Флаги:

  * `-L` \- показать правила

  * `-v` \- verbose, с счётчиками пакетов

  * `-n` \- числовой вывод IP без DNS-резолва (быстрее)

  * `--line-numbers` \- номера строк (нужны для удаления конкретного правила)




На чистом сервере Ubuntu вывод обычно показывает пустые цепочки с политикой `ACCEPT` \- весь трафик разрешён.

![](https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2026/06/29/01-iptables-default_q50.jpg)

## Базовый набор правил

Строим файрвол с нуля. Сначала создаём скрипт, чтобы легко переприменить правила после ребута:
    
    
    sudo nano /etc/iptables/rules.sh
    
    
    #!/bin/bash
    
    # Сбрасываем все текущие правила
    iptables -F
    iptables -X
    iptables -Z
    
    # Политики по умолчанию
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    
    # Разрешаем loopback
    iptables -A INPUT -i lo -j ACCEPT
    
    # Разрешаем established и related соединения
    iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    
    # SSH - разрешаем с любого IP
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
    # HTTP и HTTPS
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    
    # ICMP ping - разрешаем
    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
    
    echo "Правила применены"
    iptables -L -v -n
    
    
    sudo chmod +x /etc/iptables/rules.sh
    sudo bash /etc/iptables/rules.sh

Критически важна строка с `ESTABLISHED,RELATED` \- без неё исходящие соединения (apt update, curl, etc.) сломаются, потому что ответные пакеты будут отброшены политикой DROP на INPUT.

## Ограничение SSH по IP

Если SSH нужен только с конкретного IP, ограничиваем доступ:
    
    
    # Сначала удаляем общее правило для порта 22
    iptables -D INPUT -p tcp --dport 22 -j ACCEPT
    
    # Добавляем только для своего IP
    iptables -A INPUT -p tcp --dport 22 -s 203.0.113.5 -j ACCEPT

Если несколько офисов или IP меняется - создаём набор адресов через ipset:
    
    
    sudo apt install ipset -y
    ipset create allowed-admins hash:ip
    ipset add allowed-admins 203.0.113.5
    ipset add allowed-admins 198.51.100.10
    
    iptables -A INPUT -p tcp --dport 22 -m set --match-set allowed-admins src -j ACCEPT

## 

## 

## Защита от брутфорса

Ограничиваем количество новых SSH-соединений: не более 3 попыток в минуту:
    
    
    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

Первое правило регистрирует каждое новое соединение. Второе блокирует, если с одного IP за 60 секунд пришло 4 и более новых запросов.

Для более надёжной защиты используйте fail2ban в паре с iptables - fail2ban автоматически добавляет IP в blocklist на основе паттернов из логов.

## Дополнительные полезные правила

### Блокировка конкретного IP
    
    
    iptables -A INPUT -s 185.234.219.0/24 -j DROP

### 

### 

### Разрешить доступ к PostgreSQL только с определённого IP
    
    
    iptables -A INPUT -p tcp --dport 5432 -s 10.0.0.5 -j ACCEPT
    iptables -A INPUT -p tcp --dport 5432 -j DROP

### 

### 

### Логирование заблокированных пакетов
    
    
    iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables-DROP: " --log-level 4
    iptables -A INPUT -j DROP

Логи попадают в `/var/log/kern.log`. Флаг `--limit` предотвращает переполнение лога при DDoS.

![](https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2026/06/29/02-iptables-basic-rules_q50.jpg)

## Сохранение правил: iptables-persistent

Правила iptables сбрасываются при перезагрузке. Для сохранения устанавливаем `iptables-persistent`:
    
    
    sudo apt install iptables-persistent -y

При установке спрашивает, сохранить ли текущие правила IPv4 и IPv6. Отвечаем "Yes".

Правила сохраняются в:

  * `/etc/iptables/rules.v4` \- для IPv4

  * `/etc/iptables/rules.v6` \- для IPv6




Сохранить правила вручную в любой момент:
    
    
    sudo iptables-save > /etc/iptables/rules.v4
    sudo ip6tables-save > /etc/iptables/rules.v6

Загрузить сохранённые правила:
    
    
    sudo iptables-restore < /etc/iptables/rules.v4

Сервис `netfilter-persistent` автоматически загружает правила при старте системы.

## IPv6

Не забываем про IPv6 - если сервер имеет IPv6-адрес, трафик может обходить iptables (IPv4). Управляем отдельно:
    
    
    # Аналогичные правила для IPv6
    sudo ip6tables -P INPUT DROP
    sudo ip6tables -P FORWARD DROP
    sudo ip6tables -P OUTPUT ACCEPT
    sudo ip6tables -A INPUT -i lo -j ACCEPT
    sudo ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
    sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
    sudo ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
    sudo ip6tables -A INPUT -p icmpv6 -j ACCEPT

ICMP v6 полностью разрешаем - он нужен для корректной работы IPv6 (neighbor discovery, path MTU discovery).

## Удаление конкретного правила

Смотрим номер строки:
    
    
    iptables -L INPUT --line-numbers

Удаляем правило по номеру:
    
    
    iptables -D INPUT 3

Или удаляем по точному совпадению (заменяем `-A` на `-D`):
    
    
    iptables -D INPUT -p tcp --dport 8080 -j ACCEPT

![](https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2026/06/29/03-iptables-numbered_q50.jpg)

## nftables как альтернатива

На Debian 12 и Ubuntu 24.04 `iptables` фактически является враппером над nftables (`iptables-nft`). Команды те же, но под капотом используется nftables. Если начинаете с нуля на свежей системе, рассмотрите nftables напрямую: синтаксис удобнее, правила загружаются из одного файла, производительность немного выше при большом числе правил.

## Итог

Базовый файрвол сводится к трём шагам: политика DROP на INPUT, разрешаем ESTABLISHED/RELATED, разрешаем нужные порты. iptables-persistent сохраняет правила между перезагрузками. Ограничение SSH по IP и лимит новых соединений закрывают основные векторы атаки без дополнительного ПО. Для IPv6 нужны отдельные правила через `ip6tables`.

Похожие статьи

[Команда ps в действии: 30 примеров для продвинутого мониторинга Linux - Часть 2](https://zomro.com/rus/blog/faq/520-ps-command-in-action-30-examples-for-advanced-linux-monitoring-part-2) [Как поднять OpenSSH на Windows 2019](https://zomro.com/rus/blog/faq/406-how-to-raise-openssh-on-windows-2019) [Установка панели VestaCP](https://zomro.com/rus/blog/faq/327-ustanovka-paneli-vestacp) [Что такое DNS, для чего нужен и как работает](https://zomro.com/rus/blog/faq/510-what-is-dns-what-is-it-for-and-how-does-it-work) [Как установить свой терминал MT на FXTrade аккаунт?](https://zomro.com/rus/blog/faq/184-kak-ustanovit-svoj-terminal-mt-na-fxtrade-akkaunt)

[ Виртуальный хостинг от €3.98/мес ](/rus/virtual)
