IMTheNachoMan Asked: 2019-02-07 10:54:05 +0800 CST2019-02-07 10:54:05 +0800 CST 2019-02-07 10:54:05 +0800 CST 所有使用 ufw 被拒绝的网络活动的电子邮件 772 我已ufw配置为拒绝所有传入和传出流量,但 SSH 输入除外: ufw default deny outgoing ufw default deny incoming ufw limit in ssh 是否有可能收到拒绝流量的电子邮件?显示/显示流量的内容被拒绝,从谁,到谁,哪个端口,到端口等...... 我觉得电子邮件应该是摘要之类的,因为如果突然在短时间内有数百个拒绝,它应该发送一封电子邮件而不是数百个。 email firewall ufw 1 个回答 Voted Best Answer IMTheNachoMan 2019-02-09T06:00:14+08:002019-02-09T06:00:14+08:00 根据@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 电子邮件发送的 cron 作业。 这会产生如下表格: | 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 |
根据@heynnema 的建议,我找不到我喜欢的答案,我正在捕获我想要的内容
/var/log/ufw.log
并将其格式化为电子邮件表格。我每天都有一个运行这个脚本并作为 HTML 电子邮件发送的 cron 作业。
这会产生如下表格: