簡體   English   中英

提取電子郵件地址 Perl 腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM