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

Как мне вывести список IP-адресов, заблокированных iptables?

Чтобы предотвратить атаки грубой силы на 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

Один из вариантов - зарегистрировать любой из ваших отброшенных пакетов с помощью такого правила, как:

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.

Подробности можно найти в / proc / net / ipt_recent / SSH.

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

смотреть на

/proc/net/ipt_recent/YOURNAME

где ВАШЕ ИМЯ - это имя, которое вы использовали с параметром --name в вашем правиле iptables.

Вот простой лайнер:

$ iptables -L -n --line

Что я делаю, например для подделки входного адреса, так это определяю цепочку 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

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

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

«Возникает вопрос: как мне вывести список заблокированных 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
...

Теперь добавьте ip-адреса в заблокированную цепочку:

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

Чтобы просмотреть только что отсортированные уникальные ip-адреса:

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

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

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