Як перерахувати IP-адреси, заблоковані iptables?


16

Для запобігання грубої атаки проти ssh я додав деякі правила iptables (нижче). Питання: Як я можу перерахувати заблоковані IP-адреси?

(1)
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP

1
iptables -L INPUT -v -nпоказує всі заблоковані ip
динамічні

Відповіді:


16

Одним із варіантів може стати журнал будь-якого скинутого пакету за допомогою правила на зразок:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl -j LOG --log-prefix "FW_DROPPED: "

Вставте це безпосередньо перед DROPправилом. Потім ви можете отримати файл syslog за будь-що, в ньому є "FW_DROPPED", і список IP-адрес буде там. Записи у файлі журналу виглядають приблизно так:

Jun  3 08:05:57 some-machine kernel: [15852451.420557] FW_DROPPED: IN=eth0 OUT= MAC=00:50:ba:4a:d9:e3:00:12:17:3a:e3:64:08:00 SRC=228.23.45.189 DST=192.168.1.1 LEN=48 TOS=0x00 PREC=0x00 TTL=106 ID=10941 PROTO=TCP SPT=58212 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

Отже, викриваючи наступне "SRC =", ви покажете знищені IP-адреси. Сортуйте це, усуваючи дублікати, і ви отримаєте свій список.

Я знайшов, що підручник Iptables є найбільш корисною документацією для iptables / netfilter.


Так, це спосіб зробити це.
Brent

Це зажадає від вас дублювати свої правила, оскільки ви не входите в систему і не входите в одне і те ж правило.
Девід Пашлі

3
Було б навіть краще, якби він створив користувацьку ланцюжок, де він здійснює реєстрацію та скидання пакетів, що ображають. Цим самим видаляється зайве дублювання. Це можна зробити так: iptables -N атаки; iptables -A INPUT -i eth0 -p tcp - доповідь 22 -м стан - держава NEW -m нещодавно - оновлення - секунди 60 --рахунок 8 --rttl - ім'я SSH -j-атак; iptables -A атаки -j LOG - префікс "FW_DROPPED:"; iptables -A атаки -j DROP
Cristian Ciupitu

1
Домовились. Столи / ланцюги - це шлях; вся суть iptables, дійсно. Я створюю окремі таблиці для прийнятих, мовчки скинутих, чутно відхилених, відкинутих, підозрюваних повінь, незаконних, підозрюваних зондів, підозрюваних сканів, невідомих типів та спостерігаючи за трафіком. Мої FW засновані на цьому старому сценарії (попередження: самореклама): code.google.com/p/klondike-firewall/source/browse/trunk/…
yukondude

1
Модуль ipt_recent, на який посилаються ipozgaj та David Pashley, є досить витонченим доповненням, хоча він не може надати тій самій дрібнозернистій причині, що певний IP був упущений (як можна з різними налаштуваннями -log-префікса) або відслідковувати довга історія атак із мітками часу. Безумовно, гарна ідея використовувати обидва прийоми на концерті.
юкондуде


4

Подивись на

/proc/net/ipt_recent/YOURNAME

де YOURNAME - ім'я, яке ви використовували з параметром --name у вашому правилі iptables.


У деяких дистрибутивах (наприклад, Debian) дійсний шлях:/proc/net/xt_recent/[list-name]
itachi


1

Що я роблю, наприклад для підробки підводних адрес, це визначити ланцюг SPOOF_REJECT:

iptables -N SPOOF_REJECT
iptables -A SPOOF_REJECT -j LOG --log-prefix "Input spoof detected: "
iptables -A SPOOF_REJECT -j REJECT

потім надіслати пакети до цього ланцюжка, якщо вони підроблені:

iptables -A INPUT -i $EXT_DEV1 -s $INT_NET -j SPOOF_REJECT
iptables -A INPUT -i $EXT_DEV2 -s $INT_NET -j SPOOF_REJECT

Ви можете зробити щось подібне для кожної категорії пакетів, які ви скидаєте або відхиляєте, щоб отримати рядки в системі пошуку, а потім періодично обробляти, вирізати, сортувати, щоб отримати лише IP-адреси з цих ліній журналу.

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


Як саме ви виявляєте підроблені пакети? На мій досвід, це неможливо в загальному випадку.
MarkR

Сказане - лише приклад. Тут я шукаю будь-який пакет, що надходить у ланцюг INPUT, який надходить із зовнішнього пристрою, але заявляє, що надходить із внутрішньої IP-адреси в мою мережу. У цьому випадку я можу абсолютно виявити підробку адреси, але так, у загальному випадку все інакше.
Едді

1

"Питання: Як я можу перерахувати заблоковані IP-адреси?"

Створіть ланцюг BANNED:

iptables -N BANNED
iptables -F BANNED

Створіть ланцюжок ведення журналів:

iptables -N BANNEDLOG
iptables -F BANNEDLOG
iptables -A BANNEDLOG -j LOG --log-prefix "BANNED:" --log-level 6
iptables -A BANNEDLOG -j DROP

Додайте стрибок до забороненого ланцюга в ланцюзі INPUT перед більшістю інших правил

...
iptables -A INPUT -j BANNED
...

Тепер додайте ipaddresses до забороненої ланцюжка:

flock -w 5 /var/lock/iptables -c 'iptables -A BANNED -s 140.130.20.202/32 -i eth0 -m comment --comment "2012-03-19 23:49:33 accesslog" -j BANNEDLOG'
etc...

Ви також можете використовувати його як базу даних з параметрами коментарів, так що ви можете знати, коли і чому і т. Д. Важливо, коли iptables часто оновлюється багатьма процесами - виявляється, що iptables не має вбудованого блокування в нього.

Щоб переглянути заборонені адреси та правила в забороненій ланцюжку:

iptables -S BANNED

Щоб переглянути лише відсортовані унікальні ipaddresses:

iptables -S BANNED | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -u

У мене на серверах працює декілька демонів, які перевіряють файли syslog та веб-журнали, тому, якщо хтось щось неприємно намагається, їх адресу автоматично забороняють на кілька днів, залежно від типу та суворості та кількості попередніх атак. Інформація входить у базу даних mysql та періодично закінчується. Адреси також розподіляються на будь-яку іншу машину кластера через реплікацію mysql, щоб вони також були захищені та підтримували синхронізацію. Моє програмне забезпечення також шукає власника мережі та надсилає скаргу провайдеру.

Після 10 років роботи я сподіваюсь, що незабаром вона стане доступною для всіх. На даний момент у мене є близько 1,5 мільйона історій ip-адреси та сотні тисяч атак про пошту та ssh, які допомагають очистити мережу. Якщо більше використовуватиме його, то, сподіваюся, це матиме більший вплив.

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