В настоящее время я подвергаюсь атаке SSH.
Атака очень странная по своей природе, злоумышленник использует ботнет компьютеров и использует их как отдельные попытки входа в систему (см. Фрагмент журнала):
11 декабря 08:30:51 rhea sshd [16267]: недействительный пользователь maureen из 78.43.82.153
11 декабря 08:35:24 rhea sshd [20012]: недействительный пользователь maurizio из 201.244.188.202
11 декабря 08:44:46 rhea sshd [27711]: недопустимый максимум пользователя от 211.140.12.46
11 декабря 08:49:10 rhea sshd [31383]: недопустимый макс пользователя из 190.144.47.82
11 декабря 08:58:19 rhea sshd [6659]: недопустимый макс пользователя из 69.250.227.138
11 декабря 09:07:28 rhea sshd [14249]: недействительный пользовательский максимум от 93.63.231.55
11 декабря, 09:12:03 rhea sshd [18127]: недействительный пользователь maximus от 79.188.240.210
Я готов отфильтровать весь доступ к порту 22 (т.е. разрешить подключаться только по указанным мной IP-адресам), а также то, что я сделал пару дней назад (заблокировал все подключения к порту 22, но от себя). Что я хочу сделать, так это зарегистрировать ВСЕ соединения, для которых нет правила принятия, для регистрации и удаления - таким образом я могу отслеживать все компьютеры в боте, не давая им возможность попытаться войти в систему.
У меня что-то вроде этого:
-A ВВОД -s my.addr (s) -j ПРИНЯТЬ
-A ВХОД -p tcp -m tcp --dport 22 -j DROP
Обновить
Я добавил это в свои iptables:
[0: 0] -A INPUT -m limit --limit 5 / min -p tcp -m tcp --dport 22 -j LOG --log-level 4 --log-prefix "** DoS **"
и использовал
http://www.cyberciti.biz/tips/force-iptables-to-log-messages-to-a-different-log-file.html
Однако, чтобы настроить отдельный файл, я могу видеть только зарегистрированные данные в dmesg.
Редактировать:
Ты только нужно правило журнала между правилами принятия и удалениясм. следующий пример отправки их в системный журнал. http://www.cyberciti.biz/tips/force-iptables-to-log-messages-to-a-different-log-file.html.
Это работает, потому что журнал отличается тем, что он является «неизменяемой целью», т.е. обход правила продолжается со следующего правила. --Из man iptables
'. Итак, в отличие от других ваших правил, проверка на соответствие правилам не приведет к короткому замыканию при достижении совпадения.
Также см эта ссылка чтобы узнать, как указать файл журнала (но обратите внимание на следующий пост).
Из прошлого (неверно прочитанный вопрос):
Вы можете захотеть fail2ban, делает это за вас автоматически ... целая куча других вариантов для этого поста: Сотни неудачных попыток входа по SSH.
Однако, чтобы настроить отдельный файл, я могу видеть только зарегистрированные данные в dmesg.
Сообщения от netfilter
подсистема регистрируется через механизм ведения журнала Kenerl. Это отображается в выводе dmesg, а также обычно попадает в системный журнал через службы klogd
.
Если ты бежишь rsyslog
или syslog-ng
, они обычно читают данные журнала ядра изначально.
Сообщения отображаются в системном журнале с помощью средства kern, поэтому в традиционном файле syslog.conf вы можете сделать что-то вроде:
kern.* /var/log/kernel-messages
(Но обратите внимание, что вы получите все сообщения ядра, а не только netfilter).
И rsyslog, и syslog-ng предоставляют средства сопоставления с образцом, чтобы дать вам более детальный контроль над тем, куда отправляются сообщения журнала.
Вы хотите Ulogd который позволяет вам регистрировать совпадающие пакеты iptables в указанном пользователем файле.
После установки ulogd отредактируйте /etc/ulogd.conf файл и раскомментируйте строку: plugin="/usr/lib/ulogd/ulogd_LOGEMU.so"
В разделе [LOGEMU] вы увидите file="/var/log/ulogd.pktlog"
Здесь будут находиться ваши журналы iptables. Предлагаю вам также добавить этот файл в logrotate
если у вас это установлено, то журналы могут быстро стать большими, даже с ограничениями.
Как только ulogd будет полностью настроен, замените это правило:
-A INPUT -m limit --limit 5/min -p tcp -m tcp --dport 22 -j LOG --log-level 4 --log-prefix "** DoS **"
С этим правилом:
-A INPUT -m limit --limit 5/min -p tcp -m tcp --dport 22 -j ULOG --ulog-prefix "** DoS **"
Также стоит отметить, что ulogd позволяет записывать пакеты в такие базы данных, как MySQL, PostgreSQL и SQLite.