# Iptables (Русский)

Iptables - это мощный файрволл, встроенный в ядро Linux. Он является частью проекта Netfilter. Он может быть сконфигурирован непосредственно или посредством различный графических надстроек. Iptables используется для фильтрации траффика с ipv4, а ip6tables для ipv6.

## Установка

Примечание: В ядро изначально встроена поддержка iptables.

Сначала установите пользовательские утилиты, которые предусмотрены пакетом iptables c официального репозитория.

Далее отредактируйте файл настроек и добавьте демона iptables автозагрузку:

    # nano /etc/conf.d/iptables

    IPTABLES_CONF=/etc/iptables/iptables.rules

    # systemctl enable iptables.service

## Базовые концепции

### таблицы

iptables содержит четыре таблицы: raw, filter, nat и mangle.

### цепочки

Цепочки используются для того, чтобы задавать набор правил. Пакет начинает движение с верхней цепочки и спускается вниз пока не наткнётся на правило. Есть три встроенных цепочки: INPUT, OUTPUT и FORWARD. Весь исходящий, локально сгенерированный траффик проходит через цепочкуOUTPUT, весь входящий траффик, адресованный машине, проходит через цепочку INPUT, и весь маршрутизируемый траффик цепочку FORWARD. Три встроенных цепочки по умолчанию имеют показатели target, которые используются в случае, если пакет не попадает ни под одно правило. User-defined chains can be added to make rulesets more efficient.

### targets

A "target" is the result that occurs when a packet hits a rule. Targets are specified using "jump" (-j). The most common targets are ACCEPT, DROP, REJECT and LOG.

### modules

There are many modules which can be used to extend iptables such as connlimit, conntrack, limit and recent. These modules add extra functionality to allow complex filtering rules.

## Конфигурация

### Командная строка

Вы можете проверить текущие значения правил и число обращений к ним командой:

    # iptables -nvL

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination

    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination

    Chain OUTPUT (policy ACCEPT 0K packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination

Если вывод команды такой, как указано выше, значит правила не заданы.

Вы можете сбросить правила iptables по умолчанию с помощью следующих команд:

    # iptables -P INPUT ACCEPT
    # iptables -P FORWARD ACCEPT
    # iptables -P OUTPUT ACCEPT
    # iptables -F
    # iptables -X

### Сохранение счетчиков

Вы также можете опционально сохранить счетчики байтов и пакетов. Чтобы выполнить это, отредактируйте /etc/rc.d/iptables

В секции save) исправьте строку:

    /usr/sbin/iptables-save > $IPTABLES_CONF

на

    /usr/sbin/iptables-save -c > $IPTABLES_CONF

В секции stop) добавьте следующее перед остановом:

    stop)
         $0 save
         sleep 2

В секции start)исправьте строку:

    /usr/sbin/iptables-restore < $IPTABLES_CONF

на

    /usr/sbin/iptables-restore -c < $IPTABLES_CONF

и сохраните файл

### Руководства

- Simple stateful firewall
- Router

## Logging

The LOG target can be used to log packets that hit a rule. Unlike other targets like ACCEPT or DROP, the packet will continue moving through the chain after hitting a LOG target. This means that in order to enable logging for all dropped packets, you would have to add a duplicate LOG rule before each DROP rule. Since this reduces efficiency and makes things less simple, a LOGDROP chain can be created instead.

    ## /etc/iptables/iptables.rules

    *filter
    :INPUT DROP [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [0:0]

    ... other user defined chains ..

    ## LOGDROP chain
    :LOGDROP - [0:0]

    -A LOGDROP -m limit --limit 5/m --limit-burst 10 -j LOG
    -A LOGDROP -j DROP

    ... rules ...

    ## log AND drop packets that hit this rule:
    -A INPUT -m state --state INVALID -j LOGDROP

    ... more rules ...

### Лимитирование количества лог-файлов

Установка лимита для логов iptables применяется для предотвращения чрезмерного увеличения журнальных файлов. Если вы не ограничиваете запись лог-файлов, злоумышленник может заполнить ваш диск (или ваш/var раздел) вызывая запись логов iptables.

-m limit используется для вызова специального модуля. Вы можете использовать --limit для установки средней скорости записи и --limit-burst to set an initial burst rate. Например:

    -A LOGDROP -m limit --limit 5/m --limit-burst 10 -j LOG

Это добавит правило в цепочку LOGDROP которая будет регистрировать все пакеты, проходящие через нее. Первые 10 пакетов будут зарегистрированы сразу, а затем только 5 пакетов в минуту будут записываться. The "limit burst" is restored by one every time the "limit rate" is not broken.

### syslog-ng

Предполагается, что вы используете <a href="/index.php/Syslog-ng" title="Syslog-ng">syslog-ng</a> в Archlinux, тогда вы можете контролировать логи iptables так:

    filter f_everything { level(debug..emerg) and not facility(auth, authpriv); };

to

    filter f_everything { level(debug..emerg) and not facility(auth, authpriv) and not filter(f_iptables); };

Это остановит вывод лог-файлов iptables в/var/log/everything.log.

Если вы хотите вывести логи iptables в файл, отличный от /var/log/iptables.log, вы можете изменить назначение файла d_iptables так (еще вsyslog-ng.conf) :

    destination d_iptables { file("/var/log/iptables.log"); };

### ulogd

ulogd это специализированный пользовательский пакет, обрабатывающий логи для сетевого фильтра, способный заменять стандартный LOG target. Пакет ulogd доступен в репозитории[community].

## Читайте далее

- Wikipedia Article on Iptables
- Iptables Homepage

Categories:

- Security (Русский)
- Networking (Русский)