Нередко приходится видеть в логах брутфорс ssh или ftp или не менее назойливый скан httpd-директории. Иногда атаки совершаются не только с внешних адресов, но и с хостов с домашней локальной сети, где куча виндовых пользователей, подхвативших вирусы.
Есть масса способов защититься от этого, и я использую fail2ban. В сравнении с аналогичными программами он обладает более широкой функциональностью и гибкостью — позволяет использовать регексы для нестандартных сервисов и менять правила блокировки. Но хочется не просто защитить свой сервер от атак, а еще и слегка проучить атакующего.
Стандартными средствами iptables этого не сделать, но в расширенном варианте patch-o-matic, патче для ядра linux, есть расширенная цепочка TARPIT, позволяющая создать «ловушку» для нежелательных tcp-соединений. Работает это следующим образом: при обращении к порту, на котором стоит правило TARPIT, атакующий получает в ответ SYN-ACK (биты подтверждения на установление соединения), а так же принудительное установление размера tcp-окна, равным нулю. Это приводит к тому, что атакующая сторона не может передать никаких данных, а все ее попытки разорвать соединение игнорируются. Таким образом, соединение находятся в подвисшем состоянии до истечения тайм-аута (12-24 минут), что расходует ресурсы атакующей машины, но не атакуемой.
Узнав об этом, я сразу захотел прописать TARPIT вместо DROP в конфиг fail2ban и в запрещающие правила iptables, но при мысли, что для этого при каждом обновлении мне придется патчить ядро с patch-o-matic заново, просто опускались руки. И вообще, казалось очень странным и совсем не хотелось применять патч пятилетней давности к свежим исходникам. Оно и правильно, как оказалось, TARPIT теперь доступен без патча ядра в составе xtables-addons. Все уже есть в ядре, для его использовании надо лишь убедиться, что опция CONFIG_NETFILTER_XTABLES в конфиге ядра включена (y|m).
Xtables-addons представляет собой дополнительные расширения для iptables, ip6tables и ebtables. Среди интересных цепочек есть не только TARPIT, а так же DELUDE, CHAOS, DHCPMAC, ECHO, IPMARK, LOGMARK, STEAL, SYSRQ, TEE и др.
DELUDE отправляет ответ SYN-ACK на SYN, но RST на все остальные. Таким образом, сканер атакующей машины при SYN-сканировании показывает, что целевой порт открыт, в то время как на самом деле порт закрыт.
CHAOS создает запутывающий эффект для входящих соединений. Он рандомно может отвечать на соединения как REJECT и TARPIT или как REJECT и DELUDE.
ECHO отправляет назад все полученные пакеты :)
IPMARK позволяет помечать пакеты на основе их ip-адреса.
STEAL действует как DROP, но не вызывает ошибок, свойственных DROP в цепочке OUTPUT.
SYSRQ при попадании пакета в цепочку вызывает сигнал sysrq. Это полезно, если на машине, доступной только по сети, повисли жизненно важные части системы. И, конечно, в xtables для этого правила предусмотрена специальная защита по mac/ip или по паролю.
TEE клонирует пакет и перенаправляет его клон на другую машину сегмента локальной сети.
Дождавшись заветного TARPIT, сразу внес его в те правила, куда неплохо было бы прибавить «месть». Получилось вот что:
Сюда попадаются виндовые сканеры шар, например lanscope. Пока не тестил, но думаю, это выглядит как зависание на моем адресе при сканировании локальной сети.
Под эти правила попали самые жесткие и самые назойливые нарушители, для них моя машина теперь как одна сплошная куча, куда они наступают.
А это очередная защита от брутфорса. Разрешает SYN на ssh и ftp не чаще одного раза в 20 секунд, иначе — TARPIT.
Пробовал тестировать telnet-соединение на правило TARPIT. Результат — терминал на долгое время ушел в аут, не реагируя ни на ctrl-c, ни на ^], пришлось закрывать вкладку.
Xtables-addons, как сообщается на оффициальном сайте, содержится в Alpine Linux, CRUX, Debian, Gentoo, PLD Linux, openSUSE, openWRT, Shorewall, Slackware и, возможно, других. От себя могу сказать, что с недавнего времени он доступен и в Arch Linux в виде PKGBUILD'a в AUR. Голосуйте, пусть такая вещь попадет в community.
Есть масса способов защититься от этого, и я использую fail2ban. В сравнении с аналогичными программами он обладает более широкой функциональностью и гибкостью — позволяет использовать регексы для нестандартных сервисов и менять правила блокировки. Но хочется не просто защитить свой сервер от атак, а еще и слегка проучить атакующего.
Стандартными средствами iptables этого не сделать, но в расширенном варианте patch-o-matic, патче для ядра linux, есть расширенная цепочка TARPIT, позволяющая создать «ловушку» для нежелательных tcp-соединений. Работает это следующим образом: при обращении к порту, на котором стоит правило TARPIT, атакующий получает в ответ SYN-ACK (биты подтверждения на установление соединения), а так же принудительное установление размера tcp-окна, равным нулю. Это приводит к тому, что атакующая сторона не может передать никаких данных, а все ее попытки разорвать соединение игнорируются. Таким образом, соединение находятся в подвисшем состоянии до истечения тайм-аута (12-24 минут), что расходует ресурсы атакующей машины, но не атакуемой.
Узнав об этом, я сразу захотел прописать TARPIT вместо DROP в конфиг fail2ban и в запрещающие правила iptables, но при мысли, что для этого при каждом обновлении мне придется патчить ядро с patch-o-matic заново, просто опускались руки. И вообще, казалось очень странным и совсем не хотелось применять патч пятилетней давности к свежим исходникам. Оно и правильно, как оказалось, TARPIT теперь доступен без патча ядра в составе xtables-addons. Все уже есть в ядре, для его использовании надо лишь убедиться, что опция CONFIG_NETFILTER_XTABLES в конфиге ядра включена (y|m).
Xtables-addons представляет собой дополнительные расширения для iptables, ip6tables и ebtables. Среди интересных цепочек есть не только TARPIT, а так же DELUDE, CHAOS, DHCPMAC, ECHO, IPMARK, LOGMARK, STEAL, SYSRQ, TEE и др.
DELUDE отправляет ответ SYN-ACK на SYN, но RST на все остальные. Таким образом, сканер атакующей машины при SYN-сканировании показывает, что целевой порт открыт, в то время как на самом деле порт закрыт.
CHAOS создает запутывающий эффект для входящих соединений. Он рандомно может отвечать на соединения как REJECT и TARPIT или как REJECT и DELUDE.
ECHO отправляет назад все полученные пакеты :)
IPMARK позволяет помечать пакеты на основе их ip-адреса.
STEAL действует как DROP, но не вызывает ошибок, свойственных DROP в цепочке OUTPUT.
SYSRQ при попадании пакета в цепочку вызывает сигнал sysrq. Это полезно, если на машине, доступной только по сети, повисли жизненно важные части системы. И, конечно, в xtables для этого правила предусмотрена специальная защита по mac/ip или по паролю.
TEE клонирует пакет и перенаправляет его клон на другую машину сегмента локальной сети.
Дождавшись заветного TARPIT, сразу внес его в те правила, куда неплохо было бы прибавить «месть». Получилось вот что:
for port in 137:139 445; do
iptables -A INPUT -p tcp --dport $port -j TARPIT
iptables -A INPUT -p udp --dport $port -j DROP
done;
Сюда попадаются виндовые сканеры шар, например lanscope. Пока не тестил, но думаю, это выглядит как зависание на моем адресе при сканировании локальной сети.
for ip in 10.128.17.61 75.127.73.253 208.50.46.46; do
iptables -A INPUT -p tcp -s $ip -j TARPIT
iptables -A INPUT -s $ip -j DROP
done;
Под эти правила попали самые жесткие и самые назойливые нарушители, для них моя машина теперь как одна сплошная куча, куда они наступают.
for port in 22 21; do
iptables -A INPUT -p tcp -m state --state NEW --dport $port -m recent --update --seconds 20 -j TARPIT
iptables -A INPUT -p tcp -m state --state NEW --dport $port -m recent --set -j ACCEPT
done
А это очередная защита от брутфорса. Разрешает SYN на ssh и ftp не чаще одного раза в 20 секунд, иначе — TARPIT.
Пробовал тестировать telnet-соединение на правило TARPIT. Результат — терминал на долгое время ушел в аут, не реагируя ни на ctrl-c, ни на ^], пришлось закрывать вкладку.
Xtables-addons, как сообщается на оффициальном сайте, содержится в Alpine Linux, CRUX, Debian, Gentoo, PLD Linux, openSUSE, openWRT, Shorewall, Slackware и, возможно, других. От себя могу сказать, что с недавнего времени он доступен и в Arch Linux в виде PKGBUILD'a в AUR. Голосуйте, пусть такая вещь попадет в community.