LINUX.ORG.RU
ФорумAdmin

параноидальная защита 22 порта с помощью iptables

 ,


3

2

Эта запись больше для себя, чтоб не потерялась, но обоснованная критика приветствуется.

Правила делают следующее:

1) 10 минутная пауза для любых новых ip адресов, причем больше 5 попыток в эти 10 минут блокируют ip наглухо.

2) Больше 5 подключений после 10 минут перманентный блок

3) Больше 2 подключений в 5 минут - отброс (можно и исключить)

iptables -N BAN_SSH
iptables -N SSH_2
iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --rcheck --name ssh_baned                           -j DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --update --name ssh_2    --seconds 600 --hitcount 5 -j BAN_SSH
iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --update --name ssh_2    --seconds 300 --hitcount 2 -j DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --update --name ssh_2                               -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --update --name ssh_grey --seconds 600 --hitcount 5 -j BAN_SSH
iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --update --name ssh_grey --seconds 600              -j DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --rcheck --name ssh_grey                            -j SSH_2
iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --set    --name ssh_grey                            -j REJECT
iptables -A BAN_SSH                        -m recent --set    --name ssh_baned                           -j DROP
iptables -A SSH_2                          -m recent --set    --name ssh_2                               -j ACCEPT

И еще, по умолчанию модуль recent ограничен 100 записями, изменить это дело на 5000000 записей можно например так:

sudo chmod 777 /sys/module/xt_recent/parameters/ip_list_tot
sudo echo 5000000 > /sys/module/xt_recent/parameters/ip_list_tot 
sudo chmod 400 /sys/module/xt_recent/parameters/ip_list_tot

Ласипед с квадратными колёсами. SFTP/SCP у тебя как будет работать?

Нормальные люди давно придумали fail2ban, который банит именно за неверную авторизацию, а не от балды.

svr4 ()

если дофига параноик, то лучше прикрути port knocking. а еще лучше спрячь за vpn, как я, например :)

Rost ★★★★★ ()
Последнее исправление: Rost (всего исправлений: 1)

а еще лучше сменить порт и открывать его при стуке на другой порт и никаких проблем.

murmur ()

зачем так много правил? я вот так настраиваю, проще и красивее, имхо

menefis ()
Ответ на: комментарий от svr4

SFTP/SCP у тебя как будет работать

Host ssh.host.net
        ControlMaster auto
        ControlPath ~/.ssh/%l_%h_%p_%r


подключаешься один раз по ssh и все следующие sftp|scp будут использовать это одно общее подключение.
anonymous ()
Ответ на: комментарий от Rost

Как работающий с десятком серваков, которые настраивали мамкины параноики - кнокинг и смена порта в первую очередь мешают тебе, а уже во вторую желающим поломать.

f2b нормальным людям более чем достаточно.

svr4 ()

Даунов полный тред. Вместо человеческой авторизации по ключам усложняют себе жизнь, еще и другим подсказывают.

entefeed ☆☆☆ ()

лучше назначить другой номер порта для начала ...

anonymous ()
Ответ на: комментарий от svr4

логи гигов на 10
ssh боты

Во первых - прохладно. Во вторых - есть логротейт, в третьих - у тебя на «серверах» что, всего 10 гигов места?

Но ты прав. Тут личный выбор. Усложнять себе жизнь и обмазываться несвежим говном в несколько слоев, считая это защитой, либо жить с ЛОГАМИ. Видимо для многих логи - это страшно. Особенно для системного администратора.

entefeed ☆☆☆ ()
Ответ на: комментарий от entefeed

Не всего. Только там живёт ещё веб-сервер с пятком сайтов, каждый из которых генерит ещё десяток за дня два-три. И эти логи (в отличии от «ломаный говнороутер из поднебесной 100000 раз ломился в ssh с паролем 123456») - таки нужны.

svr4 ()
Ответ на: комментарий от entefeed

Если у тебя dmesg/syslog/pocteringbinaryjournal после очередного обновления ядра начнёт пухнуть на 10 гиг в день - ты будешь разбираться, или думать «а можа так и трэба?».

svr4 ()
Последнее исправление: svr4 (всего исправлений: 1)
Ответ на: комментарий от svr4

Давно у тебя ssh в dmesg пишет? О, я кажется понимаю почему ты боишься логов. У тебя все сервисы в один dmesg пишут. Тогда да, лучше обмазаться fail2ban, перенести порт и настроить порт кнокинг и советовать эту груду костылей каждому мимокрокодилу.

entefeed ☆☆☆ ()
Ответ на: комментарий от entefeed

И где я советовал кнокинг, зелёный друг?

дмесг был приведён как пример лога ЯДРА, о мой толстозадый.

Значит, остановимся на том что приложение (или ядро), внезапно начинающее срать по десятку гигов в сутки - это (с акцентом Лукашенки) так и трэба. Эта ж ло(х)ги!

svr4 ()
Последнее исправление: svr4 (всего исправлений: 1)
Лісапед мій, лісапед
Двохколісний "Гранд Черокі"
І дзвінок великий є
Шкіряне сідло широке
На багажник покладу
Два мішки із буряками
Я лечу через село
Лісапедом, наче танком
CHIPOK ★★★ ()
Ответ на: комментарий от anTaRes

22222

Джва пива.

btw вы тоже баните ботов которые ссылки на хабру раздают?

redixin ★★★★ ()

А теперь вопрос: зачем тебе это все надо? Как оно тебе добавит безопасности? Я за тебя отвечу: никак, добавляет оно только неудобств. Равно как и все эти приседания с перевешиванием на порт 22222, порт-нокингом и прочая

Запрети логины рутом, запрети password и keyboard-interactive, оставь либо ssh-ключи, либо gssapi, если Керберос пользуете. В идеале сделать двухфакторную аутентификацию по гугл-аутентификатору, или OPIE, или что тебе больше нравится. Этого всего хватит за глаза и за уши, но если хочется игрушек, то поиграйся с fail2ban - прикольная штука и банит всех дюже ловко.

alex_the_v ★★★ ()

ИМХО, самый безопасный способ - поставить openvpn, доступ ssh по «белым» адресам закрыть.

nixit ★★ ()

а теперь по порядку

1) fail2ban - зачем нам этот костыль, если необходимый функционал решается без него? Какого фига вообще кого-то допускать кого-то левого до авторизации? Резать надо сначала предварительно, если левые добрались до авторизации, то взлом становится «вопросом времени», и вообще авторизация уже следующий этап: «не путайте консьержа в подъезде со входной дверью в квартиру».

2) Использовать hashlimit или recent значения не имеет, тут на вкус и цвет, кому что больше нравится. Мне хотелось сделать этакий предварительный грейлист на случай внезапного возбуждения с разных узлов в течение 10 минут, если на hashlimit тоже реализуемо - это хорошо.

3) Смена порта со всякими стуками на другие для открытия нyжного не спасет от сканеров, им пофигу что долбить 22 или 22222 порт, один фиг найдя открытый начнется атака.

4) Port knoking - да хорошее средство, но на машину с которой подключаемся надо прикручивать стартовый пакет типа: knock 192.168.1.100 3333:tcp 9999:udp 1010:udp 8675:tcp Средство несколько не удобно, хотя спасибо за идею.

5) SFTP/SCP - совершенно нормально работают.

6) Авторизация ssh по ключу - да без проблем, вот только сначала фильтрация и грейлистинг iptables, повторяю авторизация это следующий этап. Доводить до помойки в логах не наш метод.

7) vpn - его порты тоже надо закрывать, мой грейлистинг можно и к нему прикрутить.

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

Dimarius ()
Ответ на: комментарий от vlb

Как дополнение можно список ssh_baned копировать/дополнять в hosts.deny, чтоб после ребута сохранялись «вредители».

Dimarius ()
Ответ на: а теперь по порядку от Dimarius

Какого фига вообще кого-то допускать кого-то левого до авторизации?

А что в этом плохого (ну кроме якобы больших логов)? Глупо думать, что они подберут нормально сгенерированный ключ. Если слил приватный ключ, то ССЗБ. А если появится дыра в ssh на тему авторизации, то все эти вариации fail2ban спасут только с некоторой (скорее всего небольшой) вероятностью.

Если уж такой мастер паранойи, намного проще запилить в iptables вход только со своего ip, или завернуть ssh внутрь openvpn (а его внутрь IPsec и т.д.), как уже советовали. Но это все равно попахивает клиникой.

lu4nik ★★★ ()
Ответ на: комментарий от svr4

Разве ротация логов не работает отдельно для разных демонов? То есть если начнёт пухнуть лог SSH, то удалятся самые старые записи только из него.

KivApple ★★★★★ ()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: а теперь по порядку от Dimarius

взлом становится «вопросом времени»

Вот у меня есть хост с авторизацией по ключам по SSH. И сколько же времени тебе потребуется, чтобы подобрать ключ? Боюсь, что сервер к тому времени уже рассыпется в пыль от старости.

А если рассматривать SSH-эксплойты, то им и 1 коннекта может хватить. fail2ban и его аналоги на iptables скорее всего не спасут. Спасут своевременные обновления безопасности и немного удачи (обновлённые боты за пару дней, пока выкатывают новую версию SSH, успеют просканировать и атаковать весьма небольшую часть хостов всего Интернета, если обновишься как только уязвимость исправят - боты скорее всего просто не успеют до тебя дойти).

KivApple ★★★★★ ()
Последнее исправление: KivApple (всего исправлений: 4)
Ответ на: комментарий от KivApple

Речь о том, что мне и отротированный дофигагиговый лог особо не всрался, учитывая, что его появления можно избежать.

svr4 ()
Ответ на: комментарий от lu4nik

Ничего хорошего нет в допуске левых к любой авторизации и не только авторизации. И без авторизации можно изрядно нагрузить оборудование и засрать канал. Гейлистинг почты себя оправдывает, так почему по тому же принципу не заставить работать фаервол?

Когда свой ip известен, то понятное дело в белый список.

Клиника, это перерубить все провода и компы в переплавку ))))

Dimarius ()
Ответ на: комментарий от svr4

Зато ты создаёшь другую ненужную ситуацию.

1) Ты выходишь в интернет из публичного Wi-Fi, либо с интернета с динамическим IP или перегруженным NAT (мобильные операторы этим отличаются особенно). И оказывается, что с твоего IP кто-то уже пытался зайти на сервер, только вот неудачно (миллионы хомячков с завирусованными компьютерами). И всё, ты зайти не можешь, хотя знаешь все ключи.

2) Ты допустил небольшую ошибочку. Опечатку в пароле не рассматриваем, потому что пароли SSH не нужны. Скажем, в том же ConnectBot на Android (SSH-клиент) забыл тапнуть по ключу, чтобы он использовался при авторизации. И всё, сервер тебя забанил.

А теперь представь, что это произойдёт в важный и ответственный момент, когда тебе нужно срочно получить доступ к серверу (отсюда использование сомнительных интернет-каналов и спешка).

Уж лучше ограничить размер логов SSH, чтобы они ротировались почаще, если имеется такая беда.

KivApple ★★★★★ ()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от KivApple

Порт открыт считай удача для атаки. Представь атаку ботнета с >100k узлов с загрузкой канала более 50Мбит. Уже после 20-30к процессор будет загружен по самые помидоры только из-за помойки на 22 порту. До этого доводить не стоит.

Диверсия под 100% пропускной способности канала понятное дело испортит все что угодно, но при этом сервер будет стабильно отшивать левых и стабильно работать.

Dimarius ()
Ответ на: комментарий от Dimarius

Мне что-то подсказывает, что канал должен забираться раньше процессора, если речь идёт о десятках мегабит, а не гигабитах. Хотя точно не знаю насколько сильно жрёт ресурсы авторизация по SSH.

KivApple ★★★★★ ()
Ответ на: комментарий от KivApple

ssh на ведроиде

И что можно сделать с экранной недоклавиатурой (сложнее ls -l и uname -a)? Учитывая, что чтобы ps axu | awk '{print $100500}' набрать - надо 5 раз переключаться на разные раскладки.

svr4 ()
Последнее исправление: svr4 (всего исправлений: 1)
Ответ на: комментарий от KivApple

Уложить ssh и загрузить процессор на 100% хватит 50мегабит с лихвой. Не, если сервак имеет 100500 ядер, несчетное кол-во оперативы, на него работает отдельная электростанция... Ну вы меня поняли )))

Dimarius ()
Ответ на: комментарий от svr4

может он в госконторе и его отдел К долбит и штрафует за плохую защиту? был как то у нас товарищ, отработал он 3 года админов в одном закрытом учреждении, его задалбивали взламывать, логи засирать и тд коллеги по цеху, у которых в этом состоит работа, поэтому он и хочет всё так блочить, чтобы те даже возможные дырки в софте не юзали.

erzented ()
Ответ на: комментарий от Dimarius

Ты не сравнивай почту и ssh :) Для ssh нет понятия спама, и идеология авторизации там другая.

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

lu4nik ★★★ ()
Ответ на: комментарий от lu4nik

А я и не сравниваю, провел аналогию для понимания. И хватит уже про авторизацию, не уходи от темы.

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

Dimarius ()
Ответ на: комментарий от Dimarius

есть понятие паразитных пакетов, которые надо отшить

применив несложные средства

несложные

Мдаа. Я, пожалуй, откланяюсь.

lu4nik ★★★ ()
Ответ на: а теперь по порядку от Dimarius

7) vpn - его порты тоже надо закрывать, мой грейлистинг можно и к нему прикрутить.

А вот это-то зачем??? Если брать openvpn то бредовая затея и даже на дэфолтном порту.

anc ★★★★★ ()
Ответ на: комментарий от svr4

И что можно сделать с экранной недоклавиатурой (сложнее ls -l и uname -a)? Учитывая, что чтобы ps axu | awk '{print $100500}' набрать - надо 5 раз переключаться на разные раскладки.

Все зависит от отношения «время на набор подобных команд*на кол-во команд» к «время добраться до компа». Бывает что так удобнее.
Мне вот тут понадобилось через rdc к виндовому компу подключится с яблока 5s, поверьте набор команд это гораааздо удобнее чем мышой елозить с подобного устройства :)

anc ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.