Базовая настройка iptables, для начинающих

Что такое iptables, как работает и много других полезных вещей можно узнать из шикарной статьи из Wikipedia http://ru.wikipedia.org/wiki/Iptables.

Рассмотрим базовые правила настройки iptables применимо к любому дистрибутиву Linux.
Далее под катом


Удаляем все правила(rule) в цепочках
iptables -F


Удаляем пользователи цепочки(chain).
iptables -X

Сбрасывает счетчики
iptables -Z


Политики по умолчанию.
Блокируем весь  трафик.(будьте осторожны если вы работаете удалено на сервере, нужно убедиться что есть разрешающее правило для вашего удаленного клиента.)
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP

Пользовательские правила.
Разрешаем локальный трафик.
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

Разрешаем трафик для соединений со статусом ESTABLISHED(установленные соединения) и RELATED(связанные с уже с установленными соединениями)
iptables -A INPUT   -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Уничтожаем все пакеты со статусом INVALID
iptables -A INPUT   -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT  -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP

Правила для входящих соединений

Разрешаем входящие соединения по ssh с любого ip адреса.
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT


Для ограничения по ip адресам после INPUT необходимо добавить опцию -s адрес источника.
iptables -A INPUT -s 192.168.1.0/24  -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT


Для ограничения по интерфейсу добавим опцию -i интерфейс
iptables -A INPUT -i eht1 192.168.1.0/24  -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
Правило читается - разрешить входящие соединения с интерфейса(сетевой карты) eth1 с ip адресов 192.168.1.1-192.168.1.255 по протоколу tcp на 22 порт со статусом NEW(т.е данное правило будет срабатывать только для новых соединений).

Правила для исходящих соединений.

iptables -A OUTPUT -p  icmp -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p udp  --dport 53 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT

Журнал
В журнале будут фиксироваться пакеты которые были заблокированы.
iptables -A INPUT   -j LOG --log-level DEBUG --log-prefix '[FW INPUT]:    '
iptables -A OUTPUT  -j LOG --log-level DEBUG --log-prefix '[FW OUTPUT]:   '

Итоговый скрипт
#!/bin/sh

PATH='/sbin'

## INIT

# Flush previous rules, delete chains and reset counters
iptables -F
iptables -X
iptables -Z

# Default policies
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP

# Enable loopback traffic
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Enable statefull rules (after that, only need to allow NEW conections)
iptables -A INPUT   -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Drop invalid state packets
iptables -A INPUT   -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT  -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP

## INPUT

# Incoming ssh from the
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

## OUTPUT

# Enable al outgoing traffic to internet
#ptables -A OUTPUT -o eth0 -d 0.0.0.0/0      -j ACCEPT
iptables -A OUTPUT -p  icmp -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p udp  --dport 53 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT

## FORWARD

## LOGGING

iptables -A INPUT   -j LOG --log-level DEBUG --log-prefix '[FW INPUT]:    '
iptables -A OUTPUT  -j LOG --log-level DEBUG --log-prefix '[FW OUTPUT]:   '


Далее читаем
iptables добавить правила в автозагрузку.
iptables как узнать какой порт заблокирован debug log
iptables NAT
logcheck держим руку на пульсе. Установка в Debian. Аудит журналов Linux.

Комментарии

  1. Разрешаем локальный трафик.
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEP
    -----------------------------------
    эти правила разрешают траффик хоста, для локалки нужно указать адрес подсети

    ОтветитьУдалить
  2. Для "локалки" нужно применять другой алгоритм фильтрации.
    Данные правила относятся именно к локальному траффику.

    ОтветитьУдалить
  3. У меня есть некоторые замечания по исппользованию -m conntrack.
    -m conntrack" в iptables используется для проверки состояния соединения (connection tracking)
    Использование "conntrack" модуля для проверки невалидных пакетов не имеет смысла. В iptables, состояние "INVALID" относится к пакетам, которые не могут быть корректно отслежены или идентифицированы относительно текущего состояния соединения.

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения