Журналирование активности средствами IPTables

С помощью iptables можно записывать в лог-файл сетевую активность, то есть какие данные куда передаются и откуда приходят.
Пример команды:

sudo iptables -t filter -A FORWARD -s 192.168.1.0/24 -m tcp -p tcp --dport 80 -j LOG --log-prefix "iptables: "

Чтобы информация писалась не в rsyslog файл, а отдельно, создадим файл:

sudo nano /etc/rsyslog.d/10-iptables.conf

И добавим в него следующее:

:msg, contains, "iptables: " -/var/log/iptables.log
& ~

Чтобы применить изменения перезапустим rsyslog:

sudo /etc/init.d/rsyslog reload

Готово, указанная в первом правиле сетевая активность будет записываться в файл /var/log/iptables.log.

Также желательно настроить logrotate для удаления старых логов, для экономии места на диске.

Смотрите также:
Настройка logrotate для ротации логов
Настройка IPTables

Rsyslog + Loganalyzer + MySQL

Устанавливаем:
sudo apt-get install rsyslog rsyslog-mysql
wget http://download.adiscon.com/loganalyzer/loganalyzer-3.4.1.tar.gz
Подключаем модуль работы по протоколу udp:
$ModLoad imudp.so
$UDPServerRun 514
Задаем подсеть, с которой разрешено принимать логи:
$AllowedSender UDP, 192.168.0.0/16, 10.0.0.0/16
В файле /etc/rsyslog.d/mysql.conf указываем какие данные заносить в базу данных, например:
local0.* :ommysql:localhost,Syslog,rsyslog,пароль
local1.notify :ommysql:localhost,Syslog,rsyslog,пароль
daemon.warn :ommysql:localhost,Syslog,rsyslog,пароль

Правило для iptables:
-A RH-Firewall-1-INPUT — p udp — m udp —dport 514 — j ACCEPT
-A RH-Firewall-1-INPUT — p tcp — m tcp —dport 514 — j ACCEPT
Для приема с других станций прописываем строчку:
*.* @192.168.1.5
После завершения установки:
chmod 644 config.php
rm install.php

Памятка уровней:
emergency Severity level 0
alert Severity level 1
critical Severity level 2
error Severity level 3
warning Severity level 4
notice Severity level 5
informational Severity level 6
debug Severity level 7

Домашняя страница Loganalyzer: loganalyzer.adiscon.com/translations

Мониторим подключения по SSH через email

Приведу несколько способов как получать оповещения на электронную почту о том что кто-то подключился к серверу по SSH.

ПЕРВЫЙ СПОСОБ:
Текстовым редактором, например nano, откроем файл /etc/ssh/sshrc (в редакторе nano CTRL+X для выхода, а y/n и Enter для сохранения или отмены изменений):

sudo nano /etc/ssh/sshrc

И добавим в него следующий код:

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
logger -t ssh-wrapper $USER login from $ip
(echo "Subject:login($ip) on server"; echo "User $USER just logged in from $ip";) | sendmail -f server@example.com -t your-email@example.com &

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

ВТОРОЙ СПОСОБ:
Добавляем указанные строки в конфиг /etc/rsyslog.conf (перед каждой строкой прокомментировал суть, данный код позволит отсылать сообщения о неудачных подключениях):

# Подключаем модуль отправки сообщений
$ModLoad ommail
# Указываем адрес почтового сервера
$ActionMailSMTPServer mail.domain.com
# Указываем email с которого будут отправляться сообщения
$ActionMailFrom rsyslog@domain.com
# Указываем email на который будут приходить сообщения
$ActionMailTo test@domain.com
# Указываем тему сообщения
$template mailSubject,"SSH Invalid User %hostname%"
# Указываем содержание сообщения
$template mailBody,"RSYSLOG\r\nmsg='%msg%'"
$ActionMailSubject mailSubject
# Указываем в секундах как часто могут отправляться сообщения
$ActionExecOnlyOnceEveryInterval 10
# Если в логах содержатся указанные в скобках символы, тогда отсылаем сообщение
if $msg contains 'Invalid user' then :ommail:;mailBody

Такой же способ отправки через rsyslog, но отсылаются уведомления об успешных подключениях (код без комментариев как выше):

$ActionMailSMTPServer mail.domain.com
$ActionMailFrom rsyslog@domain.com
$ActionMailTo test@domain.com
$template mailSubject,"SSH Accepted pass %hostname%"
$template mailBody,"RSYSLOG\r\nmsg='%msg%'"
$ActionMailSubject mailSubject
$ActionExecOnlyOnceEveryInterval 10
if $msg contains 'Accepted password' then :ommail:;mailBody

В итоге при успешном или не успешном подключении к серверу SSH на электронную почту будут приходить сообщения. Аналогичным способом можно анонсировать на email и другие события которые логируются через rsyslog.