электронные письма для всей отклоненной сетевой активности с помощью ufw

Я имею ufw настроенный для отклонения всего входящего трафика и исходящего трафика кроме входа для SSH:

ufw default deny outgoing
ufw default deny incoming
ufw limit in ssh

Действительно ли возможно получить электронные письма отклоненного трафика? Что-то, что говорит/показывает, что трафик был отклонен, от кто, кто, что порт, к порту, и т.д...

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

0
задан 6 February 2019 в 11:54

1 ответ

Я не мог найти ответ, который я любил так на совет @heynnema, я получаю то, от чего я хочу /var/log/ufw.log и форматирование в таблицу для электронной почты.

echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">';
echo '<html>';
echo '<head>';
echo '<title></title>';
echo '<style>table, th, td { border: 1px solid black; border-collapse: collapse; padding: 2px;}</style>';
echo '</head>';
echo '<body>';
echo '<table>';
echo '<tr><th>count</th><th>in or out</th><th>source IP</th><th>destination IP</th><th>source port</th><th>destination port</th></tr>';

# get all lines from yesterday
# capture the relevant data: IN, OUT, SRC, DST, SPT, and DPT
# send to awk
# get hostname for SRC and DST
# print everything as a table
sed -r "s/^$(date --date=yesterday +"%b %_d").*?\[UFW BLOCK\].*?IN=([^ ]*) OUT=([^ ]*) .*?SRC=([^ ]*) DST=([^ ]*) .*?SPT=([^ ]*) DPT=([^ ]*).*$/,\1,\2,\3,\4,\5,\6/;t;d" /var/log/ufw.log | sort | uniq -c | sort -nr |  awk -F"," '{
    inOrOut=$2==""?($3==""?"unknown":"out"):"in"

    cmd=sprintf("nslookup %s 2>/dev/null | sed -r -e \"s/^.*name = (.*)\.$/\\1/;t;d\"", $4)
    cmd | getline sourceName
    close(cmd)

    cmd=sprintf("nslookup %s 2>/dev/null | sed -r -e \"s/^.*name = (.*)\.$/\\1/;t;d\"", $5)
    cmd | getline destinationName
    close(cmd)

    printf "<tr><td>%s</td><td>%s</td><td>%s (%s)</td><td>%s (%s)</td><td>%s</td><td>%s</td></tr>\n", $1, inOrOut, $4, sourceName, $5, destinationName, $6, $7
}';

echo '</table>';
echo '<br>';
echo '<br>';

echo '</body>';
echo '</html>';

У меня есть ежедневное задание крона, которое запускает этот скрипт и отправляет как электронная почта HTML.

Это приводит к таблице как так:

| count | in or out | source IP             | destination IP        | source port | destination port |
|-------|-----------|-----------------------|-----------------------|-------------|------------------|
| 3     | out       | 192.168.1.100 (host1) | 192.168.1.101 (host2) | 100         | 400              |
| 1     | in        | 192.168.1.101 (host2) | 192.168.1.100 (host1) | 200         | 500              |
| 1     | out       | 192.168.1.100 (host1) | 192.168.1.100 (host1) | 300         | 600              |
0
ответ дан 26 October 2019 в 08:43

Другие вопросы по тегам:

Похожие вопросы: