Iptables (Русский)
Iptables - это мощный файрволл, встроенный в ядро Linux. Он является частью проекта Netfilter. Он может быть сконфигурирован непосредственно или посредством различный графических надстроек. Iptables используется для фильтрации траффика с ipv4, а ip6tables для ipv6.
Contents |
Установка
Сначала установите пользовательские утилиты, которые предусмотрены пакетом 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].