LINUX.ORG.RU
решено ФорумAdmin

Ограничить количество попыток соединиться с одного IP в промежуток времени


0

2

Есть сервер CentOS 5.4, за ним windows 2003 (терминал сервер)
из интернета постоянно брутефорсят винду, перебирают пароли, надо запретить больше 1-ой попытки соединиться в минуту, с одного IP.


Делаю так:
iptables -A FORWARD -p tcp -d 172.16.4.10 --dport 3389 -m state --state NEW -m hashlimit --hashlimit 1/min --hashlimit-mode srcip --hashlimit-name rdp -j ACCEPT

iptables -A FORWARD -p tcp -d 172.16.4.10 --dport 3389 -m state --state NEW -j DROP

Первая коман не работает, т.е. все подключения проходят без ограничений (одно в минуту). Почему? Как поправить?

а с hashlimit-above?

iptables -A FORWARD -p tcp -d 172.16.4.10 --dport 3389 -m state --state NEW -m hashlimit --hashlimit-above 1/min --hashlimit-mode srcip --hashlimit-name wwflood --hashlimit-htable-size 10000 --hashlimit-htable-max 10000 --hashlimit-htable-expire 3000000 -j REJECT --reject-with tcp-reset

Vit ★★★★★
()

в сусе такое правило susefirewall2

FW_SERVICES_ACCEPT_EXT="0.0.0.0/0,tcp,22,,hitcount=3,blockseconds=60,recentname=ssh"
выливаеться в такое правило iptables
-A input_ext -p tcp -m limit --limit 3/min -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --rcheck --seconds 60 --hitcount 3 --name ssh --rsource -j LOG --log-prefix "SFW2- INext-DROPr " --log-tcp-options --log-ip-options 
-A input_ext -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 3 --rttl --name ssh --rsource -j DROP 
-A input_ext -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 3/min -j LOG --log-prefix "SFW2-INext-ACC " --log-tcp-options --log-ip-options 
-A input_ext -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name ssh --rsource -j ACCEPT 
-A input_ext -p tcp -m tcp --dport 22 -j ACCEPT 

Novell-ch ★★★★★
()

172.16.4.10 ? Это как ? А если речь про редирект какой-нибудь, то при чём тут FORWARD ?

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

Не знал, что есть такой параметр - hashlimit-above

Долго курил мануалы, в итоге понял архитектуру hashlimit

Так работает как надо:
iptables -A FORWARD -p tcp -d 172.16.4.10 --dport 3389 -m state --state NEW -m hashlimit --hashlimit 1/min --hashlimit-burst 6 --hashlimit-htable-expire 3600000 --hashlimit-mode srcip --hashlimit-name buh -j ACCEPT

iptables -A FORWARD -p tcp -d 172.16.4.10 --dport 3389 -m state --state NEW -j DROP

Где
hashlimit - скорость скручивания счетчика в обратном направлении
hashlimit-burst - показания счетчика, при котором новые подключения не возможны
hashlimit-htable-expire - время в милисекундах, сколько держится счетчик в памяти, с момента последнего его увеличения.

Что интересно при RDP подключении происходит двойное соединение

samson_b
() автор топика
Ответ на: комментарий от adriano32

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

samson_b
() автор топика
Ответ на: комментарий от AS

Проброс в локальную сеть реализован через PREROUTING, в любом случае PREROUTING использует для работы цепочку FORWARD, так что можно и через FORWARD.

samson_b
() автор топика
Ответ на: комментарий от Vit

iptables v1.3.5: Unknown arg `--hashlimit-above' Try `iptables -h' or 'iptables --help' for more information.

Кстати не работает --hashlimit-above в моем iptables, у меня centos 5.4, старенький уже.

samson_b
() автор топика

Почему Вы не можете сделать openvpn-server, открыть ОДИН порт (при том не стандартный), всё остальное закрыть. Раздать кому надо сертификаты, парольные фразы, настроить фаервол, и получать нужные сервисы, и не знать о брутфорсах?

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

мля, мне разжевывать для тебя персонально?

>Пример ограничения количества соединений на порт ssh с одного ip исспользуя IpTables

Это не то, что тебе нужно, не?

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

а, и, да - если ты хочешь сказать что у тебя настолько старый iptables, что не поддерживает recent - это твои половые трудности...

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

Разжевывать мне не надо, просто ограничить максимальное количество одновременных сессий с одного ИП - это одно, а ограничить количество ОТКРЫТИЙ сессий с одного ИП за определенный промежуток времени - это другое.

Мне нужно второе.

samson_b
() автор топика
Ответ на: комментарий от DALDON

После того, как начали брутефорсить, первое что я сделал - проброс через нестандартный порт, далее для дополнительной безопасности я захотел ограничить количество открытий сессий с одного IP за промежуток времени, т.к. нестандартный порт тоже могут посканить и брутефорсить его, как и обычный 3389.

openvpn-server не подходит, т.к. требует донастройки клиента, что в моем случае затруднительно, мне нужно было запустить в работу стандартное windows средство, даже использование нестандартного порта уже неудобно, но еще приемлимо.

PS Вообще задача выполнена, реализация тут выложена, по мне вполне нормально.

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

Хорошо, что выполнена, но в целом довольно не плохо смотрится openvpn как «одна дырка» смотрящщая на улицу. :)

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

recent позволяет реализовать и то, и другое. В любом случае - рад за тебя, что ты нашел решение...

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

> Я добавлю, что сертификаты можно применить и напрямую к RDP (если сервер 2008+).

И как это поможет ограничить количество умников, которые пытаются подключиться? Сертификаты - они не для того немного, и в этом ключе они и в 2000 Server могут использоваться с точно тем же нулевым результатом.

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

> ограничить количество умников, которые пытаются подключиться?

Уточнение - количество попыток подключений для умников, которые пытаются брутфорсить.

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

> И как это поможет ограничить количество умников, которые пытаются подключиться? Сертификаты - они не для того немного, и в этом ключе они и в 2000 Server могут использоваться с точно тем же нулевым результатом.

Да ладно? Ну читаем тогда, просветляемся: http://en.wikipedia.org/wiki/Network_Level_Authentication

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

Ну вот читайте и просветляйтесь. NLA не позволит подключиться тому, кто не прошёл аутентификацию - но никак не помешает инициировать попытку подключения. Выигрыш в экономии ресурсов есть - но он существенно меньше, чем при сбросе соединений по заданным количеству за время на внешнем МСЭ.

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

Да это всё равно не о том. ТС спрашивал совета по ограничению количества попыток подключения с одного узла за единицу времени - это одна задача. Сертификаты используются для того, чтобы аутентифицировать подключение и, если оно не аутентифицировано (читай - нет сертификата, или нет поддержки NLA), отбросить его на начальном этапе и сэкономить тем самым часть ресурсов сервера. Это РАЗНЫЕ задачи, хотя цель у них в некотором роде одна. Второй метод не помешает сценарию, запущенному на машине-источнике, раз за разом ломиться на сервер терминалов и выедать его ресурсы на обработку таких попыток - аутентификация соединения таки требует ресурсов, хоть и меньше, чем полноценное открытие RDP-сеанса с возможностью лупить туда варианты пароля до срабатывания счётчика максимального числа неуспешных попыток входа.

Эти методы защиты дополняют друг друга.

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

Вот он - недостаток линейных форумов. В таком ключе я влез не туда и не с тем - мои извинения. Ж;-)

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