Стоит только выставить голую жопу пару сервисов в Интернет — тут же начинают всячески их абъюзить, то есть, говоря общо, использовать не по назначению. Рассмотрим возникающие проблемы и варианты их решения, на паре примеров. Я попробую писать так, чтобы понятно было всем. Только для юниксоидов и желающих приобщиться. Поправки и комментарии приветствуются. На полноту охвата решений я не претендую, изложены лишь некоторые варианты.
Проблема 1: brute-force атака по перебору паролей на sshd.
Злобные и тупые крякеры, завидев на стандартном 22-м порту работающий sshd, начинают пытаться логиниться туда рутом, перебирая пароли. Конечно, не вручную, а с помощью генератора паролей, поэтому попытки идут довольно быстро. Если у вас рутовый пароль нормальный, а не "пять пятёрок" (как было по дефолту в одной из организаций, где я давно работал), то опасаться в принципе нечего. Беспокоит только большое количество записей в логах, мол, "пытались залогиниться с такого-то хоста таким-то юзером, пароль неверен". А когда логов много, они превращаются в мусор. Это плохо — в общем-то, логи надо читать, а мусор читать невозможно.
Решения
Вариант 1.1: на уровне фаерволла (iptables) разрешить доступ на 22-й порт только с тех IP адресов, с которых ты реально ходишь или собираешься, а со всех остальных — запретить. Плюсы: достаточно простое и, пожалуй, наиболее секьюрное решение. Минусы: оказавшись в гостях, в командировке, в интернет-кафе, у чёрта на куличках — на свою машину вы не зайдёте. Workaround: иметь другую машину, на которую вы можете зайти отовсюду, и включить её IP в "белый список".
Вариант 1.2: написать скриптик, читающий те логи о неправильных логинах, и закрывающий доступ на 22-й порт тому, кто особенно рьяно ломится (например, сделал более 10 неуспешных попыток логина за минуту). Плюсы: эффективно, "самообучаемо". Минусы: относительная сложность/громоздкость реализации, надо программировать, держать демона, он может упасть и т.п.
Вариант 1.3: ограничить rate (как ето по-рюсски?) SYN-пакетов на 22-й порт. То есть не давать делать более трёх (к примеру) коннектов в минуту. Они будут перебирать пароли, но куда как медленнее. Плюсы: достаточно просто. Минусы: от мусора в логах полностью не избавляет.
Вариант 1.4: перевесить sshd на другой порт. Это делается директивой Port в файле /etc/ssh/sshd_config. Плюсы: самое простое и надёжное решение. Минусы: на клиенте нужно явно прописывать порт; продвинутые крякеры могут найти ваш sshd с помощью портскана и брют-форсить новый порт.
Я использую на *.openvz.org и некоторых других своих хостах как раз последний вариант, покоряющий меня своей простотой.
Проблема 2: спам.
Заводим мы кучу имейлов, адресов рассылки и т.п. Потом на всё на это начинает сыпаться спам (особенно в адреса рассылки, ибо их адреса даны тут и там, а потом ещё люди начинают держать у себя их архивы и т.п.).
Вариант 2.1 (только для списков рассылки): поставить опцию "только подписчики могут постить в список" для всех списков рассылки. Плюсы: простота реализации; помогает очень хорошо, ни один спам-робот не догадается пройти процесса подписки. Минусы: иногда на список пишут что-то довольно умное и важное неподписанные люди, и их приходится пост-модерировать вручную. А вместе с ними и весь спам. Что превращает простое элегантное решение в ежедневный кошмар. Поэтому надо что-то придумывать вдобавок.
Вариант 2.2: поставить spam assassin или dspam. Плюсы: таки убьёт большую часть спама. Минусы: нетривиальная инсталляция/настройка/обучение; прожорливость по части ресурсов (память, процессор); возможность false positives (это когда не-спам примут за спам и важное письмо улетит в тартарары). Многовато минусов, незачёт.
Вариант 2.3: чёрные списки. Чёрный список обычно ведёт какая-нибудь компания или организация, а ты можешь им воспользоваться; точнее, почтовый сервер может проверять, скажем, айпи отправителя на присутствие в этом блэк-листе. Плюсы: раньше это работало. Минусы: в последние годы эта мера себя полностью дискредитировала: организации начинают ставить в блек-листы кого попало, а за удаление просят немного денег. Коммерция тут ни к чему хорошему не приводит — понятно, что спамер может запросто и заплатить. Вторая проблема — нехватка IP адресов и повсеместное использование NAT/masquerading, что ведёт к тому, что за одним IP скрывается сотня пользователей; когда один из них шлёт спам (к примеру, с заражённого компа) и IP попадает в чёрный список, это затрагивает всех остальных.
Вариант 2.4: honeypots ("как ето по-рюсски? ловушки?"). Да, ловушки. Это вариант самонастраивающегося собственного чёрного списка. Это когда вы на сайте публикуете адрес почты, и пишете: "Этот адрес — ловушка, предназначенная для спам-ботов, собирающих почтовые адреса. Внимание: если вы напишете на него, то попадёте в чёрный список!". Понятное дело, что спам-боты тупые и не могут понять сиё предупреждение, в то время как большинство людей отличаются чуть большим интеллектом и не станут на адрес ловушки посылать пространных посланий. Сам я это не пробовал и не могу сказать, работает или нет, хорошо ли или так себе...
Вариант 2.5: серые списки (greylisting). Идея такая: когда приходит письмо, сервер отвечает (соответствующим кодом), что вот прямо сейчас он несколько не готов принять это письмо, мол, "временно не могу". На что правильный почтовый сервер на стороне отправителя не смутится, а поставит то письмо в очередь на повторную отправку, которая случится, как правило, через час. Вот на сей раз письмо примется, а сервер поставит триплет from_email:to_email:sender_ip в белый список. А неправильный почтовый сервер (какой-нибудь спамерский масс-мейлер) увидит, что что-то не сложилось, и не будет откладывать письмо для повторной отправки. Плюсы: простота идеи, самонастраиваемость. Минусы: первое письмо приходит с задержкой; некоторые "правильные" мейлеры на самом деле неправильные; есть вероятность, что некоторые спамеры продвинуты и используют "правильные" мейлеры.
В общем, я воплотил на openvz.org варианты 2.1 (давно) и 2.5 (вчера) и через пару недель расскажу, что из этого получилось.
Page Summary
![]() ![]() ![]() ![]() ![]() ![]() ![]() :: (no subject) [+2]
|
интернет -- зараза
От спама можно защититься еще и скрытием емейл-адреса на страницах, где он публикуется. Эти методы себя уже давно изжили, так как в последнее время спамеры не собирают адреса по всему инету, а потрошат адресные книги обычных юзеров при помощи вирусов и троянов. Это не отменяет того факта, что ваш адрес уплывёт к спамерам от ваших же знакомых, если они подцепят троянчик:) Неплохой способ, но (а) нужно использовать с самого начала и (б) не работает в браузерах без JavaScript (у меня в соседней комнате сидит человек, который пользуется lynx). Угу. Что в очередной раз доказывает, что человек ...
... ищет не безопасности, а ощущения таковой. ;-P Re: Угу. Что в очередной раз доказывает, что человек ...
Я не пытаюсь таким образом обезопасить себя, всего лишь, стремлюсь к коротким логам ;) Re: > всего лишь, стремлюсь к коротким логам ;)
Я и так тут всякого уже стооолько наворотил :) Надеюсь, что я раньше замечу неладное, чем они смогут подобрать мой пароль, кхе ;) Единственное, что могу добавить, это то, что в sshd ...
... уже были проблемы типа buffer overflow (stack overrun) -- по-моему, насколько помню. Так что не логами едиными... Re: Единственное, что могу добавить, это то, что в sshd ...
Нууу это, разве что, port-knocking или source address фильтрация остановит. Вообще меня больше беспокоит большое количество пыли в помещении и возможность свободного физического доступа, чем 0-day exploit для sshd ;) Re: > Вообще меня больше беспокоит большое количество пы
Черт! Надо было, все-таки, сфотографировать вчера старый файл-сервер :) ДО чистки ;) Re: > Вообще меня больше беспокоит большое количество пы
да-да, я вспомнил про "умную пыль" (smart dust). Она скапливается в серверной и начинает мониторить трафик. Она скапливается в сервере и меняет биты в памяти и на винчестере. Она медленно, но верно, заменяет собой вашу серверную инфраструктуру. Фильм ужасов для системного администратора. Re: > Вообще меня больше беспокоит большое количество пы
Да, да! Она уже начала заменять вентиляторы! Такая бородища наросла :) Re: Угу. Что в очередной раз доказывает, что человек ...
Я, в общем-то, именно про проблему флуда в логах и писал. Пункт 2.5 обходится элементарно - двойной рассылкой спама с интервалом в час. Все грейлистеры дружно принимают эту почту и ставят отправителей в белый список, все остальные получают вдвое больше спама. У 2.5 есть еще минус в задержке почты + уже массивно идёт двойная рассылка спама, только интервал не час, а 5 минут, судя по всему. Re: Reply to your comment...
Ага. Сначала декларируется недоверие публичным блэклистам, а потом выражается надежда, что они засекут спаммера, после чего мы таки примем от него почту. Не очень логично, вам не кажется? Re: Reply to your comment...
Так не обязательно публичные блеклисты. Можно локальный, по варианту 2.4. 1. Решил для себя через iptables -m recent из дискуссии отсюда: Да я не говорю о том, что его нельзя реализовать. Вот уже в комментах накидали кое-какие решения, не говоря уже о том, что самому написать можно за полчаса, включая отладку... и спам-ассасин, и dspam умеют обучаться -- к тебе приходит спам, а ты его форвардишь на специальный адрес, и хреновина обучается. От языка не зависит. Вариант 1.4 - хорош, а избавится от сканерирования можно и при помощи portsentry или snort. В разных версиях по-разному. У меня в настройках написано PermitRootLogin no. Но и это не спасает от флуда в логах. Я бы скомбинировал варианты 1.1 и 1.4. Т.е. на каком-либо одном сервер открыл нестандартный порт для всех, а на остальных открыл бы стандартные порты, но только для первого сервера. Я думаю, будет достаточно эффективно. (Anonymous)
По поводу ssh -- отключаем возможность логина рута через него и позволяем пускать только обычного юзера, которым в свою очередь после успешного логина набираем "su -" и работаем под рутом..... а вообще -- рута у меня на тачке нет :) |