[英]Extract Email Address Perl Script
我在我的下面幾行mail.log
文件我想提取域,並產生一個輸出txt
文件,將REJECT
域之間通過給定的空間和REJECT
。
Dec 30 07:34:09 mx postfix/smtpd[23855]: NOQUEUE: reject: RCPT from unknown[120.33.244.87]: 450 4.7.1 Client host rejected: cannot find your hostname, [120.33.244.87]; from=<hcsales6@printingpress.xicp.net> to=`<`nishant@mydomain.com> proto=SMTP helo=<printingpress.xicp.net>
輸出應該是這樣的
printingpress.xicp.net REJECT
我已經嘗試過這段代碼,但這給了我拒絕的 IP 地址,我想提取域名
perl -ne 'print "$1\n" if /NOQUEUE:.*?\[(\d+?\.\d+?\.\d+?\.\d+?)\]/' /var/log/mail.log
這是最終的結果和工作場景,我的 postfix 服務器運行了 policy-spf 和 DKIM,但收到了很多垃圾郵件連接,我的 postfix 很好地拒絕了請求。 我想使用 smtpd_sender_restrictions 來阻止這些垃圾郵件發送者,但是過濾被拒絕的主機非常耗時並且需要自動化。
感謝@Polar Bear 的解決方案。 現在系統是這樣工作的
后綴main.cf
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/blacklist
黑名單文件
#!/bin/bash
perl -ne 'print "$1 REJECT\n" if /NOQUEUE:\s+reject:.*?from=<\w+@(.*?)>/' /var/log/mail.log | sort | uniq >> /etc/postfix/blacklist
postmap /etc/postfix/blacklist
service postfix restart
授予文件權限
chmod 755 blacklist.sh
每晚為 blacklist.sh 運行 cronjob。
我嘗試了相同的代碼,並進行了一些修改,並每 3 小時為 SASL 登錄失敗和阻塞 IP 地址運行另一個 cronjob。
一個班輪
在 Windows 10 (Straberry Perl) 中
perl -ne "print \\"$1 REJECT\\n\\" if $_ =~ /NOQUEUE:\\s+reject:.*?helo=<(.*)>/" /var/log/mail.log
在 Debian 8 中 [perl (v5.20.2)]
perl -ne 'print "$1 REJECT\\n" if /NOQUEUE:\\s+reject:.*?helo=<(.*)>/' /var/log/mail.log
OP獲悉,域應該從外地被接和一個記錄每個域,然后命令應采用以下形式改變
perl -ne 'print "$1 REJECT\\n" if /NOQUEUE:\\s+reject:.*?from=<\\w+@(.*?)>/' /var/log/mail.log | sort | uniq
或擴展代碼版本
use strict;
use warnings;
use Data::Dumper;
my $debug = 1;
my %hash;
my $pattern = qr/(\w+\s+\d+)\s+([\d:]+).*?:\s+NOQUEUE:\s+(\w+):.*?\[([\d.]+)\]:\s+(\d+).*?:\s+(.*?),.*?from=<(.*?)>\s+to=<(.*?)>.*?helo=<(.*)>/;
my @fields = qw/date time state ip code err_msg from to fqdn/;
my $line = <DATA>;
chomp($line);
@hash{@fields} = ($line =~ /$pattern/);
print $hash{fqdn}. ' '. uc $hash{state} . "\n";
print Dumper(\%hash) if $debug;
__DATA__
Dec 30 07:34:09 mx postfix/smtpd[23855]: NOQUEUE: reject: RCPT from unknown[120.33.244.87]: 450 4.7.1 Client host rejected: cannot find your hostname, [120.33.244.87]; from=<hcsales6@printingpress.xicp.net> to=<nishant@mydomain.com> proto=SMTP helo=<printingpress.xicp.net>
輸出
printingpress.xicp.net REJECT
$VAR1 = {
'state' => 'reject',
'from' => 'hcsales6@printingpress.xicp.net',
'time' => '07:34:09',
'code' => '450',
'ip' => '120.33.244.87',
'to' => 'nishant@mydomain.com',
'date' => 'Dec 30',
'err_msg' => 'cannot find your hostname',
'fqdn' => 'printingpress.xicp.net'
};
試試這個:
my $input = 'Dec 30 07:34:09 mx postfix/smtpd[23855]: NOQUEUE: reject: RCPT from unknown[120.33.244.87]: 450 4.7.1 Client host rejected: cannot find your hostname, [120.33.244.87]; from=<hcsales6@printingpress.xicp.net> to=`<`nishant@mydomain.com> proto=SMTP helo=<printingpress.xicp.net>';
my ($val, $domain) = $input=~m/NOQUEUE\:\s*([^\:]+)\:.+?helo\=<([^>]+)\>/i;
print ": $val\t$domain\n";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.