Validation

validation

Расширенная инструкция по работе с iptables в Linux

iptables — это мощный инструмент для настройки сетевого экрана (firewall) в операционных системах Linux. Он позволяет контролировать входящий и исходящий трафик, а также управлять правилами перенаправления пакетов. В этой инструкции мы рассмотрим основные команды и принципы работы с iptables.


1. Основные концепции

1.1 Таблицы (Tables)

iptables работает с несколькими таблицами, каждая из которых отвечает за определенные типы правил:

  • filter (по умолчанию): используется для фильтрации пакетов.
  • nat: используется для Network Address Translation (NAT), например, для перенаправления или маскарадинга.
  • mangle: используется для изменения параметров пакетов (например, TOS, TTL).
  • raw: используется для исключения пакетов из процесса трекинга соединений.

1.2 Цепочки (Chains)

Каждая таблица содержит цепочки, которые представляют собой набор правил:

  • INPUT: обрабатывает пакеты, предназначенные для локальной машины.
  • OUTPUT: обрабатывает пакеты, отправляемые с локальной машины.
  • FORWARD: обрабатывает пакеты, проходящие через машину (маршрутизация).
  • PREROUTING: обрабатывает пакеты до применения маршрутизации (таблица nat).
  • POSTROUTING: обрабатывает пакеты после применения маршрутизации (таблица nat).

1.3 Правила (Rules)

Правило состоит из условий и действия, которое будет выполнено, если условия совпадают:

  • Условия могут быть основаны на IP-адресах, портах, протоколах и других параметрах.
  • Действия: ACCEPT, DROP, REJECT, LOG, MASQUERADE и др.

2. Базовые команды

2.1 Просмотр текущих правил

# Просмотр всех правил в таблице filter (по умолчанию)
sudo iptables -L
# Вывести правила с их номерами
sudo iptables -L --line-numbers

# Просмотр всех правил с детальной информацией о пакетах
sudo iptables -L -v -n

# Просмотр правил в конкретной таблице (например, nat)
sudo iptables -t nat -L

2.2 Очистка правил

# Очистка всех правил в таблице filter
sudo iptables -F

# Очистка всех правил в таблице nat
sudo iptables -t nat -F

# Сброс политик (например, установка политики DROP)
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

2.3 Удаление правила по номеру

Чтобы вывести правила с их номерами, используйте следующую команду:

sudo iptables -L --line-numbers

Объяснение:—line-numbers: добавляет нумерацию правил в выводе.

Пример вывода:

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
2    DROP       tcp  --  anywhere             anywhere             tcp dpt:http

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Удаление правила по номеру

Чтобы удалить правило по его номеру, используйте команду -D вместе с номером правила и указанием цепочки (INPUT, OUTPUT, FORWARD):

sudo iptables -D <CHAIN> <RULE_NUMBER>

Пример:

Если нужно удалить правило №1 из цепочки INPUT:

sudo iptables -D INPUT 1

Важные замечания:

Порядок правил важен: После удаления правила все последующие правила будут перенумерованы.

Проверка после удаления: После удаления правила можно снова проверить список с нумерацией:

       sudo iptables -L --line-numbers

    Таким образом, вы можете легко управлять правилами с помощью их номеров.

    Затем заходим в фаил /etc/iptables/rules.v4 , удаляем правила которые мы уже удалили выше. Сохраняем изменения и выходим.

    3. Создание правил

    3.1 Разрешение трафика

    # Разрешить все входящие подключения
    sudo iptables -A INPUT -j ACCEPT
    
    # Разрешить входящий трафик на определенный порт (например, SSH)
    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
    # Разрешить трафик только от определенного IP-адреса
    sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT

    3.2 Запрет трафика

    # Запретить все входящие подключения
    sudo iptables -A INPUT -j DROP
    
    # Запретить входящий трафик на определенный порт
    sudo iptables -A INPUT -p tcp --dport 80 -j DROP
    
    # Запретить трафик от определенного IP-адреса
    sudo iptables -A INPUT -s 192.168.1.200 -j DROP

    3.3 Логирование трафика

    # Логировать все входящие пакеты
    sudo iptables -A INPUT -j LOG --log-prefix "Dropped: "
    
    # Логировать только определенный тип трафика
    sudo iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH Attempt: "

    4. NAT и перенаправление трафика

    4.1 Маскарадинг (Masquerading)

    Маскарадинг позволяет скрыть внутренние IP-адреса за внешним адресом.

    # Включить маскарадинг для интерфейса eth0
    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    4.2 Перенаправление портов

    # Перенаправить входящий трафик с порта 80 на порт 8080
    sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

    5. Сохранение и восстановление правил

    5.1 Сохранение правил

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

    На Ubuntu/Debian:

    # Сохранить правила в файл
    sudo sh -c "iptables-save > /etc/iptables/rules.v4"
    
    # Восстановить правила из файла
    sudo sh -c "iptables-restore < /etc/iptables/rules.v4"

    На CentOS/RHEL:

    # Сохранить правила
    sudo service iptables save
    
    # Восстановить правила
    sudo service iptables restart

    6. Примеры сложных правил

    6.1 Разрешить только определенные сервисы

    # Разрешить SSH, HTTP и HTTPS
    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    
    # Запретить остальной трафик
    sudo iptables -A INPUT -j DROP

    6.2 Защита от SYN-атак

    # Ограничить количество одновременных SYN-пакетов
    sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
    sudo iptables -A INPUT -p tcp --syn -j DROP

    6.3 Ограничение количества попыток входа

    # Разрешить максимум 3 попытки входа через SSH в минуту
    sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
    sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 -j DROP

    7. Полезные параметры

    ПараметрОписание
    -AДобавить правило в конец цепочки.
    -IВставить правило в начало цепочки.
    -DУдалить правило.
    -RЗаменить правило.
    -pУказать протокол (tcp, udp, icmp).
    --dportУказать порт назначения.
    --sportУказать порт источника.
    -sУказать источник (IP-адрес или подсеть).
    -dУказать назначение (IP-адрес или подсеть).
    -jУказать действие (ACCEPT, DROP, REJECT и др.).

    8. Работа с модулями

    iptables поддерживает множество дополнительных модулей, которые расширяют его функциональность:

    • conntrack: управление состоянием соединений.
    • limit: ограничение скорости или частоты событий.
    • recent: отслеживание недавних подключений.
    • string: поиск строк в пакетах.

    Пример использования модуля string:

    # Блокировать запросы, содержащие слово "attack"
    sudo iptables -A INPUT -p tcp --dport 80 -m string --string "attack" --algo bm -j DROP

    9. Отладка и тестирование

    9.1 Проверка активных правил

    sudo iptables -L -v -n

    9.2 Проверка статистики правил

    sudo iptables -L -v -n --line-numbers

    9.3 Тестирование правил

    Используйте утилиту ping, telnet или nc для проверки доступности портов и сервисов.


    10. Альтернативы iptables

    Если вам нужен более современный и удобный инструмент, рассмотрите использование:

    • nftables: новое поколение файрвола, заменяющее iptables.
    • ufw (Uncomplicated Firewall): простой интерфейс для управления iptables.

    Это базовая и расширенная инструкция по работе с iptables. Для более сложных задач рекомендуется изучать документацию и примеры конфигураций.

    Общие рекомендации

    Тестирование правил : Перед сохранением правил убедитесь, что они работают корректно. Например, проверьте, что вы можете подключиться к серверу через SSH после изменений.

    Бэкап правил : Перед внесением значительных изменений сделайте резервную копию текущих правил.

    Автоматическое восстановление : Убедитесь, что ваша система настроена на автоматическую загрузку правил при старте. Это обычно делается через соответствующие службы (iptables-persistent, netfilter-persistent или iptables).