Как вывести список 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
динамические
Я упоминал cyberciti.biz/faq/linux-howto-check-ip-blocked-against-iptables
Пранит Нидаршан

Ответы:

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правилом. Затем вы можете выполнить поиск файла системного журнала для чего угодно с «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.

yukondude
источник
Да, это способ сделать это.
Brent
Это потребует от вас дублирования ваших правил, поскольку вы не входите и не пропускаете одно и то же правило.
Дэвид Пашли
3
Было бы еще лучше, если бы он создал цепочку пользователей, в которой он регистрировал и отбрасывал оскорбительные пакеты. При этом ненужное дублирование удаляется. Это можно сделать так: iptables -N attack; iptables -A INPUT -i eth0 -p tcp --dport 22 -m состояние --state NEW -m недавнее --update --seconds 60 --hitcount 8 --rttl --name SSH -j атаки; iptables -A атаки -j LOG --log-prefix "FW_DROPPED:"; iptables -A атакует -j DROP
Кристиан Чиупиту
1
Согласовано. Таблицы / цепочки - это путь; весь смысл iptables, правда. Я создаю отдельные таблицы для принятого, незаметно отброшенного, слышимого отклонения, отброшенного, предполагаемого наводнения, незаконного, подозреваемого зонда, предполагаемого сканирования, неизвестных типов и отслеживаемого трафика. Мои FW основаны на этом старом сценарии (предупреждение: самореклама): code.google.com/p/klondike-firewall/source/browse/trunk/…
yukondude
1
Модуль ipt_recent, на который ссылаются ipozgaj и David Pashley, является довольно изящным дополнением, хотя он не может обеспечить ту же самую детальную причину, по которой конкретный IP был удален (как вы можете с разными настройками --log-prefix) или отслеживать долгая история атак с отметками времени. Хотя определенно хорошая идея использовать обе техники вместе.
yukondude
5

Вы можете найти подробности в / proc / net / ipt_recent / SSH.

Эта статья имеет больше информации.

Дэвид Пашли
источник
Эта статья, кажется, больше не существует.
Дан Метей
4

смотреть на

/proc/net/ipt_recent/YOURNAME

где YOURNAME - это имя, которое вы использовали с параметром --name в вашем правиле iptables.

ipozgaj
источник
В некоторых дистрибутивах (например, Debian) допустимый путь:/proc/net/xt_recent/[list-name]
itachi
3

Вот простой вкладыш:

$ iptables -L -n --line
giorgio79
источник
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-адреса?»

Создайте ЗАПРЕЩЕННУЮ цепочку:

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...

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

Чтобы просмотреть запрещенные адреса и правила в запрещенной цепочке:

iptables -S BANNED

Для просмотра только что отсортированных уникальных ipaddresses:

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

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

После 10 лет работы, я надеюсь сделать его доступным для всех в скором времени. В настоящее время у меня около 1,5 миллионов историй IP-адресов и сотни тысяч сообщений о почтовых и ssh-атаках, помогающих очистить сеть. Если больше будет использовать его, то я надеюсь, что это будет иметь большее влияние.

Энди Ли Робинсон
источник