Налагоджувач для Iptables


47

Я шукаю простий спосіб слідувати пакету через правила iptables. Мова йде не стільки про ведення журналів, тому що я не хочу реєструвати весь трафік (і хочу лише мати цілі LOG для дуже мало правил).

Щось на зразок Wireshark для Iptables. А може навіть щось подібне до налагоджувача для мови програмування.

Дякую Крису

Примітка. Це не повинно бути привабливим інструментом графічного інтерфейсу. Але він повинен зробити більше, ніж просто показати лічильник пакетів або близько того.

Оновлення: це майже виглядає так, ніби ми не можемо знайти нічого, що забезпечує функціональність, яку вимагають. У такому випадку: Давайте хоча б знайдемо хорошу техніку, засновану на реєстрації в iptables - яку можна легко включати та вимикати, і не потрібно зайво писати правила iptables (потрібно писати те саме правило для -j LOGта -j ...)

Відповіді:


10

Я не можу придумати прямого рішення, але я можу подумати про те, як відстежувати пакет.

  1. Запишіть кожне правило за допомогою директиви префіксу журналу (--log-prefix "Правило 34")
  2. Створіть тестовий пакет або потік пакетів із скапієм та встановіть поле TOS на щось унікальне
  3. перетягніть вихідний файл журналу для цього параметра TOS і подивіться, які правила його зареєстрували.

Дякую за ідею. На жаль, я не можу зареєструвати кожне правило (в одній системі диск, мабуть, не був би досить швидким, щоб це зробити. В іншому, в ядрі журнал iptables недоступний.)
Кріс Лерчер,

1
Використовуйте названу трубку як файл softpanorama.org/Logs/Syslog/pipes_in_syslog.shtml Однак, оскільки ви не можете увійти у своє ядро, ви свого роду SOL
Haakon

Дякую, це, мабуть, не вирішить мою проблему, але, як правило, приємно знати, що трубопровідний syslog був би можливий - може стати в нагоді в інший час!
Кріс Лерчер

Одне пов'язане питання щодо ведення журналу: чи iptables обробляє декілька пакетів одночасно (щоб записи журналу могли бути переплетені)? У такому випадку я думаю, що ідея TOS була б абсолютною необхідністю для багатьох аналізів журналів LOP!
Кріс Лерчер

Я не знаю відповіді на це. Я очікую, що кожен інтерфейс буде оброблятися одночасно iptables як мінімум.
Хокон

82

Якщо у вас є досить недавнє ядро ​​та версія iptables, ви можете використовувати ціль TRACE (здається, вона буде вбудована принаймні на Debian 5.0). Ви повинні встановити умови вашого сліду максимально конкретними та відключити будь-які правила TRACE, коли ви не налагоджуєтесь, оскільки це залучає багато інформації до журналів.

TRACE
Ця ціль позначає пакети, щоб ядро ​​записувало кожне правило, яке відповідає пакетам, як ті, що перетинають таблиці, ланцюги, правила. (Модуль ipt_LOG або ip6t_LOG необхідний для ведення журналу.) Пакети записуються з префіксом рядка: "TRACE: ім'я таблиці: ім'я ланцюга: тип: rulenum", де тип може бути "правило" для звичайного правила, "повернення" для неявного правила наприкінці визначеного користувачем ланцюга та "політики" для політики вбудованих ланцюгів. Її можна використовувати лише в сирої таблиці.

Якщо ви додали такі правила

iptables -t raw -A PREROUTING -p tcp --destination 192.168.0.0/24 --dport 80 -j TRACE
iptables -t raw -A OUTPUT -p tcp --destination 192.168.0.0/24 --dport 80 -j TRACE

Вам поставлять вихід, який виглядає приблизно так.

# cat /var/log/kern.log | grep 'TRACE:'
Mar 24 22:41:52 enterprise kernel: [885386.325658] TRACE: raw:PREROUTING:policy:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325689] TRACE: mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325713] TRACE: nat:PREROUTING:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: nat:nat.1:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: mangle:INPUT:policy:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:INPUT:rule:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world_all_c1:return:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world:rule:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world_irc_c2:return:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)

8
Дякую, це приголомшливо! Це насправді найкраща відповідь, я б хотів, щоб я міг її прийняти (це було щедро запитання, тому прийнята відповідь є однозначною). Хоча я не можу використовувати його у всіх своїх системах (через обмеження ядра), у деяких системах я можу. Ця відповідь заслуговує на користь, бо вона дійсно близька до того, що я шукав.
Кріс Лерчер

Цю особливість я знайшов минулої ночі, коли я перечитував сторінку man iptables, щоб я міг відповісти на інше питання. Здається, це відносно нова особливість. Не хвилюйтеся, що не зможете відзначити це як прийняте. Можливо, за цей час проголосують достатньо, щоб заробити мені ще один популістський знак.
Зоредаче

Це справді канонічна відповідь для відстеження пакетів в iptables. Це дуже погано, що деякі останні ядра не включають його за замовчуванням.
Пітер Грейс

Як давно ядро ​​підтримує TRACE? Я успішно використовував CentOS 6.4, але не в CentOS 6.2
sebelk

6

Три відповіді на один пост:

1) Налагодження за сценарієм:

#!/bin/bash
debug() {
    if [ -n "$debug" ]; then
        $@ || echo -e "The command which launched the error:\n$@"
    else
        $@
    fi
}
debug=1
IPTABLES="debug /sbin/iptables"

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
....

2) Налагодження за допомогою syslog

З цього веб-сайту: http://www.brandonhutchinson.com/iptables_fw.html

If you want to make a syslog entry of dropped packets, change:

# Drop all other traffic
/sbin/iptables -A INPUT -j DROP

To:

# Create a LOGDROP chain to log and drop packets
/sbin/iptables -N LOGDROP
/sbin/iptables -A LOGDROP -j LOG
/sbin/iptables -A LOGDROP -j DROP

# Drop all other traffic
/sbin/iptables -A INPUT -j LOGDROP


You may also want to configure the --log-level to log dropped packets to a separate file instead of /var/log/messages:

# Drop all other traffic
/sbin/iptables -A INPUT -j LOGDROP --log-level debug


/etc/syslog.conf change:

# Send iptables LOGDROPs to /var/log/iptables
kern.=debug                                             /var/log/iptables

Reload the syslogd service for the change to take effect.
/sbin/service syslog reload

3) Немає налагодження, приємні iptables редагують:

Також це може бути корисним: http://www.fwbuilder.org/


1
Дякую. Пункти 1) та 3) не мають великого відношення до наступних пакетів через правила iptables, але пункт про перенаправлення записів журналу на основі "--log-level" може бути корисним, якщо мені нарешті справді доведеться повернутися до ведення журналів (якщо немає іншого рішення).
Кріс Лерчер

2

виникло те саме питання і виявив, що Zoredache вказує на TRACE / ipt_LOG було рішенням!

Крім того, я знайшов сценарій, який вставляє / видаляє LOG-правила, що передують усім поточним діючим правилам iptables. Я спробував це і виявив, що це дійсно приємний інструмент. - Вихід схожий з рішенням TRACE - Перевага: він працює на конфігурації активних iptables, незалежно від того, звідки він завантажений. Ви можете ввімкнути / вимкнути вхід в режим льоту! Вам не потрібно змінювати будь-які сценарії брандмауера, які могли б бути створені Firewall Builder або інструментом будь-якого використання ... - Недолік: без змін сценарій створює LOG-правила для ВСІХ активних правил. Натомість, використовуючи правила TRACE, ви, ймовірно, обмежуватимете реєстрацію адресами / службами / з'єднаннями, для яких зараз потрібно дослідити обробку iptables.

Як би то не було мені подобається :) Кудо до Тоні Клейтона, подивіться: http://lists.netfilter.org/pipermail/netfilter/2003-March/043088.html

З повагою, Кріс


0

Зазвичай я використовую лічильники пакетів і байтів, щоб побачити, як працюють правила, і щоб знайти те, що відсутнє або неправильне.

Ви можете переглянути їх за допомогою "iptables -nvL".


2
Я бачу, чого хоче автор; якщо ви намагаєтеся перевірити свої правила iptables на зайнятому інтерфейсі, просто перегляд лічильників не допоможе багато, особливо якщо пакет, ймовірно, збігається за кількома правилами і стрибає навколо визначених користувачем ланцюгів у процесі (як це характерно, коли фільтрація небажаних IP-адрес та правила захисту від повені).
ПП.

@PP: Точно, ти читаєш мою думку. @Vi: Спасибі, це може бути корисним за деяких обставин, і я це іноді використовував. Тепер мені потрібно щось більш потужне.
Кріс Лерчер

-2

AFAIK пакет IP проходить ланцюжок правил до першого відповідності. Тож я насправді не бачу, у чому тут проблема. Якщо у вас є:

  1. правило 1
  2. правило 2
  3. правило 3 ЛОГ

І пакет вносить його в журнал, це означає, що правило 3 є першим правилом узгодження.


Неправда. Пакети можуть відповідати декільком правилам, і вони. Якщо правило не має дії (на кшталт -j DROPабо -j ACCEPT), воно просто продовжуватиме відповідати далі по ланцюжку.
ПП.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.