1

Администрирую удаленно сервер, хочу настроить iptables от брутфорс атак, подбирают логин и пароль юзера ssh каждые несколько секунд. Я логинюсь не как рут,
Так вот, чтобы при отладке фильтров iptables не заблокировать себя по ошибке, настроил крон, чтобы он эти самые правила iptables каждые 10 мин удалял пока я не буду уверен, что фильтры работают правильно.
#crontab -u root -e
*/10 * * * * /sbin/iptables -F       
Не подскажете ли код файла правил /etc/iptables.up.rules, чтобы был открыт порт 22 для ssh через eth0, максим. количество подключений к ssh, например, не более 8 в мин, и еще, как запретить для подключения перечень ip, пытающихся ломать?

И еще, стоит ли перевешивать ssh на другой порт? В нете по этому поводу разные мнения, много написано,
Если да, то значит ли это откорректировать в файле /etc/ssh/sshd_config директиву Port 'другой_порт'? И какое значение 'другой_порт' указывать?
И последнее, я новичок. Cмотрю на сервере логи и вижу,что при подключении по ssh на сервере генерируются значения порта пятизначные, если не ошибаюсь, каждый раз новые, ну никак не со значением 22 как в конфиге прописано,
Что это может значить?

2 (14.12.2010 13:12:45 отредактировано drBatty)

waldi пишет:

И еще, стоит ли перевешивать ssh на другой порт?

да.

waldi пишет:

В нете по этому поводу разные мнения, много написано,

где написано что "не нужно"?

waldi пишет:

И какое значение 'другой_порт' указывать?

 Консоль:
echo $RANDOM

только не забудьте.

waldi пишет:

И последнее, я новичок. Cмотрю на сервере логи и вижу,что при подключении по ssh на сервере генерируются значения порта пятизначные, если не ошибаюсь, каждый раз новые, ну никак не со значением 22 как в конфиге прописано,
Что это может значить?

так ведь 2 канала открываются: входящий и исходящий. Если вы логинитесь на сервер, и отправляете пакеты на 22й порт, то к вам они идут на какой-то случайный >1024. Ваша система и выбирает этот порт во время "рукопожатия" (кавычки зря, это официальный термин из RFC). Кстати, так для любого TCP соединения - в первом пакете (на сервер) указан IP и порт того, кто отправил (обратный адрес, дом и номер квартиры).

waldi пишет:

Я логинюсь не как рут,

очень плохо. Дело в том, что враг знает, что есть юзер root, и может подобрать его пароль. Вот если-бы вы логинились как zx7523, то врагу было-бы куда как сложнее. (чёрт, НЕ не заметил. Тогда всё нормально)

И ещё: для того, что-бы не забивать себе голову, создайте пару ключей, и публичный поместите на сервер. Тогда он может отличить вас без всякого пароля, а брутефорс будет невозможен в принципе. Вам будет грозить только кража вашего секретного ключа, который вам никуда передавать не нужно (а потому перехватить его невозможно).

ЗЫЖ Да, а блочить через iptables не нужно. Если так уж хочется, то есть специальные программки для этого. Но толку от них ИМХО нет никакого, если порт иной, и авторизация по ключу (а root'у просто запрещено в конфиге sshd).

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

3

Большое спасибо, уважаемый drBatty, за ответ!
Но я не все понял, извините, если мои дополнительные вопросы покажутся туповатыми

Во-первых, для изменения значения порта ssh на сервере необходимо в директиве Port номер_порта в файле /etc/ssh/sshd_config в качестве номера_порта указать случайное 4-значное целое число >1024, например 1234,
потом на сервере /etc/init.d/sshd restart. правильно?

Во-вторых, нужно ли на клиентских машинах, с которых хожу по ssh на удаленный сервер,точно так же менять значение порта на то же самое, что и установил на сервере?

В-третьих, я хожу по ssh на удаленный сервер с разных систем: putty из-под windows XP, suse, debian lenny. Если поменяю значение порта ssh на сервере, то должен буду также поменять значение порта ssh в настройках систем, с которых хожу, правильно?

В-четвертых, если я установлю аутентификацию пароля ssh, то значит ли это, что аутентификацию надо делать отдельно в каждой из систем?
Приватный ключ один и тот же будет лежать в каждой системе, а публичный один на удаленном сервере, правильно?
Будет ли при этом корректно работать putty из-под windows XP?

4

waldi пишет:

Во-первых, для изменения значения порта ssh на сервере необходимо в директиве Port номер_порта в файле /etc/ssh/sshd_config в качестве номера_порта указать случайное 4-значное целое число >1024, например 1234,
потом на сервере /etc/init.d/sshd restart. правильно?

ага.

waldi пишет:

Во-вторых, нужно ли на клиентских машинах, с которых хожу по ssh на удаленный сервер,точно так же менять значение порта на то же самое, что и установил на сервере?

конечно.

waldi пишет:

В-третьих, я хожу по ssh на удаленный сервер с разных систем: putty из-под windows XP, suse, debian lenny. Если поменяю значение порта ssh на сервере, то должен буду также поменять значение порта ssh в настройках систем, с которых хожу, правильно?

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

waldi пишет:

В-четвертых, если я установлю аутентификацию пароля ssh, то значит ли это, что аутентификацию надо делать отдельно в каждой из систем?

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

waldi пишет:

Приватный ключ один и тот же будет лежать в каждой системе, а публичный один на удаленном сервере, правильно?

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

waldi пишет:

Будет ли при этом корректно работать putty из-под windows XP?

вроде-бы она такое умеет. я предпочитаю заходить со своей системы (например с USB диска загружаюсь).

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

5

Большое спасибо за исчерпывающий ответ и удачи Вам!

6

смысла перевешивать с 22 порта на какой то другой не вижу.
это спасет только от самых тупых ботов, но от них же спасает хороший пароль, поэтому зачем перевешивать?

7

waldi пишет:

Администрирую удаленно сервер, хочу настроить iptables от брутфорс атак, подбирают логин и пароль юзера ssh каждые несколько секунд.

Защищаем SSH от брутфорса на любом порту

It is good day to die ...
MS Windows 10
Заметки о главном...

8

В продолжение темы
Сегодня экспериментировал с заменой порта ssh, на машине debian lenny сделал
/etc/ssh/sshd_config
#PORT 22
PORT 1289
/etc/init.d/ssh reload
Команда nmap localhost новый порт видит, но называет его не ssh, а что-то типа hotline
Прежде. чем менять порт ssh на удаленном сервере, проэкспериментировал на машине suse, которая у меня в локальной сети с машиной debian, debian шлюз, порт 22 ssh между ними работает
Так вот на suse делаю
/etc/ssh/sshd_config
PORT 1289
/etc/ssh/sshd restart

При попытке подсоединиться с suse на debian по ssh и наоборот с debian на suse выдает  сообщение "connection refused on Port 22" , подскажите, пожалуйста, что делаю не так?

9

antaeus пишет:

смысла перевешивать с 22 порта на какой то другой не вижу.

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

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

10

waldi пишет:

При попытке подсоединиться с suse на debian по ssh и наоборот с debian на suse выдает  сообщение "connection refused on Port 22" , подскажите, пожалуйста, что делаю не так?

на клиенте настраивается ~/.ssh/config
на сервере настраивается /etc/ssh/sshd_config

одна машина == сервер, другая == клиент. Клиент подсоединяется к серверу.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

11

Да, действительно suse у меня клиент, а debian - сервер и заодно шлюз из локалки наружу, ssh между ними по 22 порту работает исправно, но с конфигами ssh тут вот какая особенность.
И на сервере debian, и на клиенте suse лежат по два конфига(оба) /etc/ssh/ssh_config  и /etc/ssh/sshd_config. В обоих конфигах  /etc/ssh/ssh_config директива Port 22 ранее была закомментирована, когда ssh  работал по 22 порту.
Но у меня, в отличие от того что Вы сказали, бинарник sshd на клиенте, а на сервере лежит бинарник ssh.
Это так должно быть? Я в администрировании новичок,  раньше только программировал.

Короче,  путем экспериментов дошел до следующего. Новый порт ssh 1289 заработал в обе стороны (с сервера на клиент и обратно) только после того, как исправил во всех четырех вышеперечисленных конфигах ssh порт 22 на порт 1289 , а потом рестартовал апач и на сервере, и на клиенте. Рестарта ssh было недостаточно.
Как должно быть у опытных- не знаю, но у меня вышло только так.

12

waldi пишет:

Новый порт ssh 1289 заработал в обе стороны

Браво, и теперь все знают ваш порт  smile , хотя бы написали бы так: Новый порт ssh  заработал в обе стороны Хотя ни кто вам не мешает перевесить на другой порт  smile

It is good day to die ...
MS Windows 10
Заметки о главном...

13

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

14

waldi пишет:

просто хотелось знать мнение профессионалов, почему без рестарта апача у меня не обошлось,

причем здесь apache?  oO Вроде бы речь идет об ssh, или я что то упустил?

It is good day to die ...
MS Windows 10
Заметки о главном...

15

да ни причем, просто опыта было мало, дошел, что работает и без рестарта апача


Но вот на первый мой вопрос так никто из спецов и не ответил

Господа профи, подскажите, какую строчку вставить в код файла правил /etc/iptables.up.rules, чтобы количество подключений к ssh было, например, не более 8 в мин, а также, какую еще одну строчку в файл правил вставить, чтобы запретить для подключения перечень ip, пытающихся ломать?
И еще, достаточно ли будет только этих двух строчек в файле правил, не заблокирую ли я свой удаленный сервер, если не буду указывать ничего более, кроме этих двух строчек, я себя конечно кроном буду страховать, чтобы затирал эти правила раз в 5-10 мин на время отладки, но все равно впервые это делать страшновато

16

$IPT -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
$IPT -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT

Вот это может поможет. Разрешает логиниться не более одно раза в 20 секунд.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

17

xlin пишет:
$IPT -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
$IPT -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT

Вот это может поможет. Разрешает логиниться не более одно раза в 20 секунд.

Много читал умных мыслей на эту тему. В сухом остатке вынес следующее:  сам sshd умеет делать это не хуже, а даже и лучше, чем iptables. А именно - в sshd.conf можно беспроблемно выставить нужный таймаут "на длинные ногти операционистки". Что есть для данной попытки соединения полный аналог блокирования соединения по iptables. Однако (что лучше) это блокирование совершенно не блокирует иные легальные соединения, которые возможны  в это время. А вот блокировка по iptables такие легальные соединения будет пропускать с интервалом в 20 секунд. Когда ты один - это не имеет значения. А если на сервер ходит много народу (например, по ремутному доступу через NX сколько времени потребуется для регистрации 20-30 душ юзеров? Да они полдня будут в ремутную сессию заходить). Единственный недостаток блокирования брутфорса в sshd.conf, что я вижу - забивание регистрационных журналов регистрацией этой хрени.

18 (19.12.2010 14:09:36 отредактировано i2ks)

waldi пишет:

Господа профи, подскажите, какую строчку вставить в код файла правил /etc/iptables.up.rules, чтобы количество подключений к ssh было, например, не более 8 в мин, а также, какую еще одну строчку в файл правил вставить, чтобы запретить для подключения перечень ip, пытающихся ломать?

что вы так к iptables привязались, одного iptables будет мало.
далее man sshd_config
так же смотрим
/etc/host.alloe
/etc/host.deny
на наличие sshd

еще один вариант:

в /etc/inetd.conf ищем ssh и привидем к такому виду:

ssh stream tcp nowait/0/3 root /usr/sbin/sshd sshd -i -4

это означает лимит 3 соединения в минуту с одного IP-адреса, и не забудем перезапустить inetd:

killall -HUP inetd 

еще вариант, это прикрутить sshdguard .

Вам уже дали массу примеров как это реализовать. вы хоть что нибудь сделали ???

It is good day to die ...
MS Windows 10
Заметки о главном...

19

Cruiser78 пишет:
xlin пишет:
$IPT -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
$IPT -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT

Вот это может поможет. Разрешает логиниться не более одно раза в 20 секунд.

Много читал умных мыслей на эту тему. В сухом остатке вынес следующее:  сам sshd умеет делать это не хуже, а даже и лучше, чем iptables. А именно - в sshd.conf можно беспроблемно выставить нужный таймаут "на длинные ногти операционистки". Что есть для данной попытки соединения полный аналог блокирования соединения по iptables. Однако (что лучше) это блокирование совершенно не блокирует иные легальные соединения, которые возможны  в это время. А вот блокировка по iptables такие легальные соединения будет пропускать с интервалом в 20 секунд. Когда ты один - это не имеет значения. А если на сервер ходит много народу (например, по ремутному доступу через NX сколько времени потребуется для регистрации 20-30 душ юзеров? Да они полдня будут в ремутную сессию заходить). Единственный недостаток блокирования брутфорса в sshd.conf, что я вижу - забивание регистрационных журналов регистрацией этой хрени.

Извините за глупый вопрос, но какой директивой в sshd_config нужно задавать этот timeout.
Я перелопатил маны по по ssh_config sshd_config
Какие из этих директив или их пары Вы имели в виду, когда говорили о возможности установить timeout?
ClientAliveInterval
ClientAliveCount
ClientAliveInterval
ServerAliveCount
ConnectTimeout

20

разобраться и настроить fail2ban

21

waldi пишет:

Господа профи, подскажите, какую строчку вставить в код файла правил /etc/iptables.up.rules, чтобы количество подключений к ssh было, например, не более 8 в мин, а также, какую еще одну строчку в файл правил вставить, чтобы запретить для подключения перечень ip, пытающихся ломать?

я разве не по-русски сказал? это НЕ НУЖНО.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

22

да, чем мучить iptables лучше запретите root'а и сделайте авторизацию по ключу.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

23

drBatty пишет:

да, чем мучить iptables лучше запретите root'а и сделайте авторизацию по ключу.

С рутом понятно, а вот ключ надо при себе иметь, в нужный момент его обязательно не будет :rolleyes:
Самый простой вариант это port knocking