Proftpd Bruteforce — Достойный ответ для подбирателей паролей

Бредовое вступление.
Давно я чтото не делился с вами своими простенькими поделиями на bash. Не от того что перестал их писать, просто лень описывать 🙂 Но вот чтото захотелось …. Ловите!

Последнее время розвелось много ботов-подбирателей паролей ко всему чему угодно. Рано или поздно это надоедает! Да и ничего хорошего от ботов ждать не приходится, только создают никому ненужную сетевую активность, засоряют логи и грузят сервис непотребными действиями. Решил дать достойный отпор, ибо задолбало!
Потихоньку-неспеша накропал такой вот скриптец, который брутфорсеров отправляет в некую таблицу фаервола, где им имитируется 99% потерь в канале 🙂

1. Скрипт, bash, FreeBSD … что это? Куда я попал и где мои вещи?
Ну, обо всем по порядку! Вот сам скрипт, он на bash:

root@black:~# cat /root/scripts/ftp_bots.sh
#!/usr/local/bin/bash

ban_log="/var/log/ftp_ban.log"

[ -f ${ban_log} ] || touch ${ban_log}

ftp_log="/var/log/proftpd.log"
ftp_bots=`grep -E -e 'no such user' ${ftp_log} |egrep -v '77.99.175.111|111.222.200.100' |sed -e 's/^.*from //' -e 's/\ .*//'| sort -nr | uniq -c | awk '{if($1>7)print $2}'`

for bot in $ftp_bots
 do
  TIME_NOW=`date "+%F %T"`

    pfctl -q -t bots -T test $bot

    if [ $? -eq 0 ]
        then
          continue
        else
         pfctl -q -t bruteforce -T test $bot
          if [ $? -eq 0 ]
            then
                continue
            else
                pfctl -q -t bruteforce -T add $bot
                pfctl -q -K $bot
                pfctl -q -k $bot
                echo "${TIME_NOW} --- Banned IP --- $bot" >> ${ban_log}
          fi
    fi
done

2. И это работает? Да ладно!!! Какието букавки непонятные … и что же этот скрипт делает?
Чуток опишу логику работы скрипта:
/var/log/ftp_ban.log — лог файл скрипта. Туда будут писаться дата-время-ip заблокированных ботов
ftp_log=»/var/log/proftpd.log» — лог FTP сервера
77.99.175.111|111.222.200.100 — некие IP адреса которые я хочу исключить из лога, заведомо считаем что это «белый список». Рекомендую вписать сюда свои IP, а также самых активных пользователей сервера. Заведомо даем им возможность делать ошибки в регистрации, мало ли что 🙂 Как обычно — разраб. сайта пароль на FTP забудет 🙂
ftp_bots — это переменная-список в которую попадут все кроме «белого списка», которые получили от proftpd ошибку — ‘no such user’ более 7 раз!
for bot in $ftp_bots — Ну дальше берем список $ftp_bots и смотрим есть ли IP из списка в таблице bots, если есть — следующий по списку ip, если нету, проверяем есть ли IP из списка в таблице bruteforce, если есть — следующий по списку ip, если нету, добавляем ip в таблицу bruteforce и делаем об этом запись в ${ban_log} и следующая итерация … до тех пор пока список $ftp_bots не закончится.

3. Таблицы, фаерволы … что это и как оно работает?
Теперь про таблицы и фаервол. В качестве фаервола — PF. Обожаю его, простой как двери и достаточно функциональный. В нем есть 2 таблицы — bots и bruteforce. В таблицу bots я закидываю «особо отличившихся» красавчиков. Эта таблица блочится для мира начисто:

block in log quick on $INET_IF from <bots> to any

Для тех же кто просто балуется брутфорсиком — есть табличка bruteforce для ip которой фаерволом имитируются потери в канале 99%

block in log quick on $INET_IF from <bruteforce> to any probability 99%

4. А если этих самых ботов тыщи???
Ну и чтобы не копить себе IP злоумышленников до бесконечности (они всетаки захламляют RAM) — по cron периодически очищаем табличку bruteforce от старых записей. Я настроил на очистку записей старше 86400 секунд, тоесть даю боту сутки на то чтоб подумал надо своим поведением. Также по крону запускаю скрипт ftp_bots.sh каждые 5 минут.

root@black:~# crontab -l
MAILTO=""
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
#### <- For clean entries from table SSH BRUTEFORCE older than 1 day ! -> ####
52      *       *       *       *       /sbin/pfctl -t bruteforce -T expire 86400
#### <= FTP bots => ####
*/5     *       *       *       *       /root/scripts/ftp_bots.sh

root@black:~#

5. А зачем нам лог в скрипте? С ним что делать?
Ну и на последок, так выглядит log файл. Его можно глянуть в случай если вам ктото позвонил и грозно заявил что «сервер перестал видеться в сети …». Там можно найти кого в последнее время банили чтобы оперативно розбанить:

root@black:~# cat /var/log/ftp_ban.log
2014-06-03 11:15:20 --- Banned IP --- 109.186.76.161
2014-06-03 19:45:00 --- Banned IP --- 199.193.71.123
2014-06-03 19:00:00 --- Banned IP --- 186.205.53.223
2014-06-03 19:00:00 --- Banned IP --- 91.121.195.189
2014-06-03 19:05:00 --- Banned IP --- 59.58.139.120
2014-06-04 12:25:00 --- Banned IP --- 109.186.76.161
2014-06-04 20:00:00 --- Banned IP --- 199.193.71.123
2014-06-04 20:55:00 --- Banned IP --- 186.205.53.223
2014-06-04 20:55:01 --- Banned IP --- 91.121.195.189
2014-06-04 20:55:01 --- Banned IP --- 59.58.139.120
root@black:~#

Пробуйте … пишите комменты, замечания и т.д.
P.S. Некоторые в таких случаях еще заявляют — а как же клиенты за NAT, многопользовательские сети/сервера и прочее. IP залочен одним нехорошим клиентом — остальная масса пользователей за NAT тоже получается залочены. Мой ответ прост — да мне пофигу! Мой сервер, мой ресурс и мое решение. Если какойто Вася поймал вирь и от этого 200 клиентов рядом с ним перестали видеть мой сервер — мне жаль их 🙂 Пусть почитают с соседнего сервера статью про маленьких пушистых котиков …

Хай щастить!

Тюнинг Mozilla Firefox «Под анонимность!»

Для правки скрытых параметров в Firefox нужно набрать в адресной строке about:config. Все что перечислено ниже — настраивается именно там:

— Запрещает поддержку протокола WebRTC, текущая реализация которого позволяет незаметно для пользователя получить список IP-адресов в его локальной сети (с помощью JavaScript), что повышает уникальность пользователя. Подробнее …

media.peerconnection.enabled = false

 

— Отключает передачу информации о посещаемых веб-сайтах Гуглу, база которого используется для предупреждений о мошеннических сайтах

browser.safebrowsing.enabled = false
browser.safebrowsing.malware.enabled = false
services.sync.prefs.sync.browser.safebrowsing.malware.enabled = false

 

— Отключает передачу текста, набираемого в окне поиска, поисковой системе без явного подтверждения со стороны пользователя. Лишаемся предложений от поисковой системы по мере набора запроса, но зато, если вы вдруг начали набирать запрос и передумали — он не отправится до нажатия Enter

browser.search.suggest.enabled = false

 

— Отключает передачу браузером информации о времени начала и окончания загрузки страницы. Анализ этих данных позволяет определить факт использования прокси-сервера

dom.enable_performance = false

 

— Запрещает предварительное разрешение имён DNS для всех ссылок на веб-странице (пока пользователь сам не нажмёт на ссылку). Это может привести к утечке DNS-трафика при работе через анонимизирующий прокси-сервер

network.dns.disablePrefetch = true

 

— Отправлять DNS-запросы через прокси при использовании прокси. Иначе они пойдут напрямую и могут привести к раскрытию реального IP-адреса

network.proxy.socks_remote_dns = true

 

— Отключить Seer (см. первый комментарий в топике для подробностей)

network.seer.enabled = false

 

— Запрещает сайтам установку соединений на критически важные порты, занятые I2P и Tor

network.security.ports.banned = 4444,9050,9051

 

— Запрещает отслеживать состояние батареи и тем самым получать информацию, по которой можно идентифицировать пользователя

dom.battery.enabled = false

 

— Запрещает определять параметры соединения с сетью (при этом передаётся тип соединения: LAN, Wifi, 3G и так далее)

dom.network.enabled = false

 

— Запрещает сайтам обращение к локальной машине, что позволило бы им анализировать список открытых портов. Подсмотрено у разработчиков Tor Возможны проблемы при обращении на адреса типа ​http://127.0.0.1:631, используемые для конфигурации принтеров через CUPS и прочих устройств

network.proxy.no_proxies_on = (пусто)

 

— Тоже подсмотрено у Tor. Запрещает передачу сайтам подробной информации о графических возможностях системы

webgl.disable-extensions = true
webgl.min_capability_mode = true

 

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

browser.cache.disk.capacity = 0
browser.cache.disk.enable = false
browser.cache.disk.smart_size.enabled = false
browser.cache.disk_cache_ssl = false
browser.cache.memory.enable = false
browser.cache.offline.capacity = 0
browser.cache.offline.enable = false
dom.indexedDB.enabled = false
media.cache_size = 0
network.http.use-cache = false

 

— Отключает возможность сайтов хранить некоторые настройки (нечто похожее на куки). Однако, после отключения, пропадает возможность пользоваться кэшем Гугла (в поисковике исчезают соответствующие выпадающие меню). Проблема на стороне Гугла

dom.storage.enabled = false

 

— Маскировка браузера под версию 24 LTS и самую распространённую платформу. Не забываем обновлять по мере выхода очередных LTS #

general.appname.override = Netscape
general.appversion.override = 5.0 (Windows)
general.oscpu.override = Windows NT 6.1
general.platform.override = Win32
general.useragent.override = Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0
general.productSub.override = 20100101
general.buildID.override = 20100101
browser.startup.homepage_override.buildID = 20100101

 

— Отключает автоматическое обновление браузера

app.update.auto = false
app.update.enabled = false
app.update.mode = 0
app.update.service.enabled = false

 

— Отключает автоматическое обновление поисковых плагинов

browser.search.update = false

 

— Не отправлять данные о производительности в Mozilla

datareporting.healthreport.service.enabled = false
datareporting.healthreport.uploadEnabled = false
datareporting.policy.dataSubmissionEnabled = false

 

Для борьбы со скриптами и куками рекламных сетей рекомендуются подписки адблока (Enhanced Trackers List, Social List), расширение NoScript (режет все скрипты, пользователь может разрешать скрипты доверенным сайтам, например, разрешить скрипты, лежащие лишь на linux.org.ru, а гуглоаналитику на том же лоре — нет), расширение Cookie Monster (точно также режет все куки, кроме явно одобренных пользователем). К использованию рекомендуется и HTTPS Everywhere от Фонда электронных рубежей, форсирующее использование HTTPS на большом количестве сайтов (только придется рукаи отключить правило для Google services, поскольку оно ломает ютуб после того, как ютуб поменял дизайн).

Рекомендую глянуть на одну из предыдущих заметок про анонимность в Интернет.

P.S. Честно признаюсь — содрано из форума linux.org.ru

Debian Wheezy — Проблемы с btrFS

Никогда бы в такое не поверил если бы ктото рассказал. Но случилось со мной, поэтому верьте-неверьте расскажу как было дело.
Стал мой рабочий комп дико тормозить. Нет, не сразу! Постепенно … давно заметил за ним такую тенденцию. Скажу сразу — ПК у меня не супер-пупер, но и не чахлик. «Под капотом» всетаки Intel Core i3 + 8GB RAM, HDD 320GB 16MB Cache — для работы хватает с головой! OS Debian Wheezy установлена уже больше года назад, поначалу шуршала как самолет, но вот постепенно стал замечать за этим компом какуюто тормознутость, неспешность чтоли? Сказать что наворотил я за год использования на нее какихто мега-сервисов? Та нет! Ничего особенного, только то что нужно для работы: LibreOffice, google-chrome, pidgin да и konsole несколько окон. Иногда слушаю музычку в наушничках через VLC. И это все умудрялось тормозить … и притом тупизна доходила до того что утром приходилось шевелить мышкой (на ночь я комп не вырубаю) и идти готовить кофе, так как PC роздуплится только через пару минут — не раньше, притом после такого «пробуждения» он более-менее сносно работал, хотя чувства что сидиш за i3 + 8GB RAM не было уже давно 🙂 Итак, по мере возможностей и времени пробовал разобраться …. Читать полностью

Настройка nginx + GeoIP на FreeBSD

Зачем это надо? Да много чего можно наворотить! Например разным странам выдавать разный контент, проксировать трафик на разные сервера и тд. Мне, например, для ограничения нежелательного трафика на некий тестовый web-сервер. Хочу дать туда доступ только из Украины, остальных — в баню!
У меня уже был установлен и настроен nginx, поэтому тут упомяну только о включении в его сборку необходимого модуля.
Для начала я установил GeoIP из портов:

root@gw:~# cd /usr/ports/net/GeoIP
root@gw:/usr/ports/net/GeoIP# make install clean

После этого проверил стоит ли в собранном ранее nginx необходимый флаг HTTP_GEOIP:

root@gw:/usr/ports/net/GeoIP# cd /usr/ports/www/nginx
root@gw:/usr/ports/www/nginx# make config

Читать полностью

Интересная музычка которая меня «цепляет» (:

Замечательные композиции, которые попадались мне на просторах интернета. К сожалению в какойто момент понял что вспомнить название когдато случайно найденной и понравившейся композиции практически невозможно. Поэтому решил для себя сделать такую вот шпаргалочку. Ну а поскольку я человек не жадный, с удовольствием делюсь с Вами:

Diane Birch — «A Strange Kind of Love»

Bill Evans — «Peace, Piece»

Читать полностью

Сайт espreso.tv «Hacked By smartBHT»

На выходных зашел на сайтец новостей espreso.tv и увидел вот такую занимательную картинку 🙂

espresso.tv "Hacked By smartBHT"

Через пару минут сайт уже выдавал стандартную ошибку nginx «403 — Forbidden» и еще через несколько минут сайт заработал в нормальном режиме 🙂
Интересненько, среди ручных крыс путлера нашлись и «колорадские хакеры», или какеры — не знаю как лучше назвать.
В одном я уверен: «То, что нас не убивает — делает нас сильнее» (Ф. Ницше). Так что желаю удачи в работе ресурсу espreso.tv и справедливого наказания для smartBHT.

Хай щастить! Читать полностью

Установка и настройка Metasploit в Debian Wheezy

Очень быстро, не вдаваясь особенно в подробности покажу как установить metasploit на Debian Wheezy. Что это и зачем нужно — читайте на вики!
Очень коротко: Metasploit Framework — удобная платформа для создания и отладки эксплойтов. Кроме того, проект включает в себя базу опкодов, архив шеллкодов и информацию по исследованиям компьютерной безопасности.

Итак, кому интересно попробовать — вперед!

root@deb13:~# curl -L https://get.rvm.io | bash -s stable --autolibs=enabled
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   184  100   184    0     0    175      0  0:00:01  0:00:01 --:--:--   181
100 20511  100 20511    0     0  12238      0  0:00:01  0:00:01 --:--:-- 12238
Downloading https://github.com/wayneeseguin/rvm/archive/stable.tar.gz
Creating group 'rvm'

Installing RVM to /usr/local/rvm/                                                                                                                      
Installation of RVM in /usr/local/rvm/ is almost complete:

  * First you need to add all users that will be using rvm to 'rvm' group,
    and logout - login again, anyone using rvm will be operating with `umask u=rwx,g=rwx,o=rx`.

  * To start using RVM you need to run `source /etc/profile.d/rvm.sh`
    in all your open shell windows, in rare cases you need to reopen all shell windows.

# Administrator,
#
#   Thank you for using RVM!
#   We sincerely hope that RVM helps to make your life easier and more enjoyable!!!
#
# ~Wayne, Michal & team.

In case of problems: http://rvm.io/help and https://twitter.com/rvm_io
root@deb13:~#

Читать полностью

Debian Wheezy — установка Midori «свежей» версии

Что такое Midori и зачем оно надо? Это очередной легковесный браузер, а зачем оно надо — чтобы браузить инет, Кэп! Так уж повелось, что для развлечения у меня один браузер всегда открыт (google-chrome/iceweasel), а для работы — второй. В роли второго какоето время был chromium, но вот захотелось чегото новенького, а тут еще и легковесность обещают….
Не долго думая, установил midori с официальных репов Debian Stable. Версия там пыльная — 0.4.3 Пользовал я ее дня 3 и вроде все хорошо, НО, система както тупить стала, а со временем в одно злополучное утро и совсем еле расшевелил ее с ночного бездействия. Оказалось midori сожрала под 4GB оперативы!!! Ничего себе легковесность!
Решил поставить версию поновее, но, как всегда, пришлось идти окольными путями, так как из ветки testing в Debian она тянет за собой части базовой системы, а такое кровосмешание неприемлемо (по крайней мере для меня). Но на просторах инета нашелся PPA репозиторий для Ubuntu со свежими сборками, а почему бы его не заюзать?
Добавим PPA репозиторий midori:

root@deb:~# echo 'deb http://ppa.launchpad.net/midori/ppa/ubuntu precise main' > /etc/apt/sources.list.d/midori-ppa-wheezy.list

Ну и дальше стандартно:

root@deb:~# apt-get update -qq && apt-get install midori

В результате имеем вот такую версию:

root@deb:~# dpkg -l |grep midori
ii midori 0.5.8-1~precise~ppa1 amd64     fast, lightweight web browser
root@deb:~#

Намного свежее, но лучше ли? Этого пока не знаю — тестим! Сделаю UPD по результатам 🙂
Хай щастить!

Логирование это просто! Настройка Elasticsearch + Logstash + Kibana в Debian

Без лишних слов опишу простую, масштабируемую и достаточно функциональную систему по централизованному хранению/визуализации логов. Скажу сразу — logstash это сердце данной системы. От его настройки зависит очень многое, точнее от настройки фильтров в logstash. Но тема фильтрации логов в logstash довольно непростая и очень обьемная, в данной статье я постараюсь максимально наглядно и понятно описать процесс установки и настройки системы в целом. В будущем планирую написать отдельную статью о фильтрации/парсинге логов в logstash.

Схема работы системы примерно такая:

rsyslog -> logstash -> elasticsearch -> kibana

rsyslog — клиентская часть системы. Настраивается на каждой машине/сервере для передачи логов по сети на сервер логов.
logstash + elasticsearch + kibana — серверная часть. Это по сути и есть сервис централизированного логирования. Читать полностью

Debian — xfreerdp и ошибка «SSL_read: Failure in SSL library (protocol error?)»

Работало-работало … и на тебе — перестало 🙂
Чтото видать накрутили виндоадмины, и в результате вот:

black@deb ~ $ rdp_client 10.0.0.55
connected to 10.0.0.55:3389
creating directory /home/black/.freerdp/certs
Password:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@           WARNING: CERTIFICATE NAME MISMATCH!           @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The hostname used for this connection (10.0.0.55)
does not match the name given in the certificate:
SRV-TS.my.loc
A valid certificate for the wrong name should NOT be trusted!
Certificate details:
        Subject: CN = SRV-TS.my.loc
        Issuer: CN = SRV-TS.my.loc
        Thumbprint: 37:03:73:4e:25:ae:a8:ab:c6:b4:87:13:d5:d5:1b:3a:38:9a:88
The above X.509 certificate could not be verified, possibly because you do not have the CA certificate in your certificate store, or the certificate has expired. Please look at the documentation on how to create local certificate store for a private CA.
Do you trust the above certificate? (Y/N) Y
SSL_read: Failure in SSL library (protocol error?)
Authentication failure, check credentials.
If credentials are valid, the NTLMSSP implementation may be to blame.
black@deb ~ $

Опции, прописанные в bash alias rdp_client вот такие:

black@deb ~ $ alias
alias rdp_client='xfreerdp -g 1440x900 -d my.loc -k en-us -u my_ad_login'
black@deb ~ $

Покопавшись по ману, эмпирическим путем выяснил что с вот такой опцией работает:

black@deb ~ $ rdp_client --no-nla 10.0.0.55
connected to 10.0.0.55:3389
black@deb ~ $

Достаточно добавить опцию —no-nla в alias и все будет ok.

Хай щастить!