Iptables (Русский)

From ArchWiki
Jump to: navigation, search

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

Contents

Установка

Примечание: В ядро изначально встроена поддержка 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/conf.d/iptables . Это правила загружаемые при старте демона.

/etc/conf.d/iptables
# Configuration for iptables rules
IPTABLES_CONF=/etc/iptables/iptables.rules
IP6TABLES_CONF=/etc/iptables/ip6tables.rules

# Enable IP forwarding (both IPv4 and IPv6)
# NOTE: this is not the recommended way to do this, and is supported only for
# backward compatibility. Instead, use /etc/sysctl.conf and set the following
# options:
# * net.ipv4.ip_forward=1
# * net.ipv6.conf.default.forwarding=1
# * net.ipv6.conf.all.forwarding=1
#IPTABLES_FORWARD=0

Для сохранения текущего набора правил используйте команду:

# rc.d save iptables

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

# rc.d restart iptables

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

Вы также можете опционально сохранить счетчики байтов и пакетов. Чтобы выполнить это, отредактируйте /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

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

Руководства

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="00008988.html" 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].

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