Чтобы предотвратить атаки грубой силы на 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-атаках, помогающих очистить сеть. Если бы его использовали больше, то я надеюсь, что это имело бы больший эффект.