Назад | Перейти на главную страницу

iptables для мониторинга трафика

У меня в IPTABLES есть такие правила:

-A INPUT -s 166.100.102.50/32 -j LOG --log-level 7

и я написал сценарий, который захватывает вывод этих правил и выводит байты с IP на мой сервер.

Я надеялся получить предложения о том, как создать правила, отслеживающие IP-трафик из подсетей диспергатора. IP-адрес не фиксирован, и даже подсети не фиксированы. Например:

120.2.33.45 может быть IP-адресом устройства в один день, а 204.65.3.88 может быть IP-адресом того же устройства на следующий день.

Я думаю, что если бы существовал способ написать правило, чтобы оно давало мне IP-адрес всего, кроме диапазона фиксированных IP-адресов, например 166.100.102.50, тогда я был бы в порядке.

Что-то вроде:

-A ВХОД -s НЕ РАВНЫЙ 166.100.102.50/32 -j LOG --log-level 7

заранее спасибо

Вы хотели (смотрите !):

iptables -A INPUT ! -s 166.100.102.50/32 -j LOG --log-level 7

Это будет соответствовать всему с исходным адресом НЕ 166.100.102.50.

Из man iptables

   [!] -s, --source address[/mask][,...]
          Source specification. Address can be either a  network  name,  a
          hostname,  a  network  IP  address  (with  /mask), or a plain IP
          address. Hostnames will be resolved once only, before  the  rule
          is  submitted  to  the  kernel.  Please note that specifying any
          name to be resolved with a remote query such as DNS is a  really
          bad idea.  The mask can be either a network mask or a plain num‐
          ber, specifying the number of 1's at the left side of  the  net‐
          work  mask.   Thus, a mask of 24 is equivalent to 255.255.255.0.

Здесь начинается соответствующая часть:

          A "!" argument before  the  address  specification  inverts  the
          sense  of  the  address.  The  flag  --src  is an alias for this
          option.  Multiple addresses can  be  specified,  but  this  will
          expand  to  multiple  rules (when adding with -A), or will cause
          multiple rules to be deleted (with -D).

Вы можете обнаружить, что построение цепочки значительно упростит работу.

Цепочка в основном похожа на подтаблицу. Вы отправляете ему материалы, а затем можете либо вернуть, либо обработать их в этой цепочке.

-t INPUT -N LOGME
# return stuff, that we don't want to handle
-A LOGME -s 166.100.102.50/32 -j RETURN
-A LOGME -s 192.168.27.0/24 -j RETURN
# log everything that hasn't been returned
-A LOGME -j LOG --log-level 7

Другой вариант - создать и использовать ipset, который в основном позволяет вам создать набор адресов, на которые затем можно ссылаться в правиле, используя --match-set вариант.