Zabbixを使用したブラックリストIPの監視

理論のビット



パブリックスパムデータベースまたはIPアドレスの「ブラックリスト」には、IPに関する情報が含まれています。これは何らかの理由でユーザーにとって使いにくいと認識されています。 技術的な微妙さを掘り下げません。 受信者の電子メールボックスを不要なメールやスパムから保護するために、メールプログラムとサービスがこれらのデータベースと独自のデータベースの情報を使用することが重要です。



問題の本質



IPアドレスがブラックリストに登録されている場合、受信者はメールを受信しません。



パブリックスパムデータベースへのIP侵入は、企業メールの崩壊を脅かす。 これは、ドメインの電子メールアドレスが5だけで、YandexまたはMail.ruですべてのユーザーを一時的に「通常の」メールに「移植」できる場合でも不快です。 しかし、CRMシステムに統合された50を超えるメールボックスが内部メールサーバーに「固定」されている場合、問題は壊滅的なものになります。



解決策



「予想することを知っている。 管理するために予見します。」 O.コント



クライアントがメールサーバーの懲罰的措置を感じ、営業部がローカル管理者をパニック状態にする前に、差し迫った脅威を計算することが可能であり、必要です。 これを行うために、考えられる問題をユーザーに通知する自動IP監視スクリプトを作成しました。 監視プラットフォームとしてPowershellが選択され、通知にはzabbix 2.4が使用されました。



スクリプトの作成について少し



最も明らかなオプションは、mxtoolboxおよび2ip.ruデータベースで有名なIP検索エンジンのWebページを解析することでした。 この問題を解決するために、.NETおよびXPATHテクノロジーが使用されました。これは、XMLおよびWEBを解析するための最も効果的なツールであり、特に正規表現を嫌う人にとっては有効です。 最初のパンケーキは、何らかの形でゴツゴツしたものであることが判明し、長時間の厳しいテストの後、この決定を放棄することにしました。 その理由は、まず第一に、サードパーティのサービスへの依存でした:サイトの作成者がコードの構造を変更した場合、最良の場合、最悪の場合はソフトウェアを再テストする必要があります-コードを書き換えます。



この分野に存在する技術と開発を徹底的に分析した後、私たちはより興味深く実用的なソリューションに到達しました。 powershell 3.0に基づくソフトウェア開発。公共のスパムデータベースのIPを個別にチェックします。



どのように機能しますか?



ブラックリスト(DNSBL)に存在するIPアドレスのチェックは、次のように実行されます。チェックされたIPはDNS PTR表記で示され(逆もまた同様に「前から後ろ」)、DNSBLサーバーのドメイン名が追加されます。 サーバーからの応答が受信されると、検証済みアドレスがブロックされます。つまり、IPは1つ以上のブラックリストに表示されます。 応答の詳細(それは任意)に関係なく、その事実自体はIPがスパムデータベースにあることを示しています。



いくつかのコード
スクリプトコード:

<#  zabbix   .      : Key -  ,      zabbix     $Zabbix_send =     zabbix_sender $zabbix_port =  zabbix  $zabbix_server =  zabbix  $zabbix_host =      zabbix (  ) #> Function Send_Zabbix { param ( [parameter(mandatory=$true)] $key, [parameter(mandatory=$true)] [int64]$value ) $Zabbix_send = "C:\zabbix_sender.exe" $zabbix_port = "10051" $zabbix_server = "10.0.33.31" $zabbix_host = "Blacklistcheck" echo "$key : $value" $cmd = "$Zabbix_send -z $zabbix_server -p $zabbix_port -s $zabbix_host -k `"$key`" -o $value" echo "$cmd" Invoke-Expression $cmd } #      ,   name,ip $FilePath = "D:\powershell\blacklist.csv" #      $iparr = Import-Csv $FilePath foreach ($ipaddr in $iparr) { [string]$IP = $ipaddr.adress [string]$organization = $ipaddr.organization $reversedIP = ($IP -split '\.')[3..0] -join '.' #   ,      $blacklistServers = @( "b.barracudacentral.org"; "bl.deadbeef.com"; "bl.emailbasura.org"; "bl.spamcannibal.org"; "bl.spamcop.net"; "blackholes.five-ten-sg.com"; "blacklist.woody.ch"; "bogons.cymru.com"; "cbl.abuseat.org"; "cdl.anti-spam.org.cn"; "combined.abuse.ch"; "combined.rbl.msrbl.net"; "db.wpbl.info"; "dnsbl-1.uceprotect.net"; "dnsbl-2.uceprotect.net"; "dnsbl-3.uceprotect.net"; "dnsbl.cyberlogic.net"; "dnsbl.inps.de"; "dnsbl.njabl.org"; "dnsbl.sorbs.net"; "drone.abuse.ch"; "drone.abuse.ch"; "duinv.aupads.org"; "dul.dnsbl.sorbs.net"; "dul.ru"; "dyna.spamrats.com"; "dynip.rothen.com"; "http.dnsbl.sorbs.net"; "images.rbl.msrbl.net"; "ips.backscatterer.org"; "ix.dnsbl.manitu.net"; "korea.services.net"; "misc.dnsbl.sorbs.net"; "noptr.spamrats.com"; "ohps.dnsbl.net.au"; "omrs.dnsbl.net.au"; "orvedb.aupads.org"; "osps.dnsbl.net.au"; "osrs.dnsbl.net.au"; "owfs.dnsbl.net.au"; "owps.dnsbl.net.au"; "pbl.spamhaus.org"; "phishing.rbl.msrbl.net"; "probes.dnsbl.net.au"; "proxy.bl.gweep.ca"; "proxy.block.transip.nl"; "psbl.surriel.com"; "rbl.interserver.net"; "rdts.dnsbl.net.au"; "relays.bl.gweep.ca"; "relays.bl.kundenserver.de"; "relays.nether.net"; "residential.block.transip.nl"; "ricn.dnsbl.net.au"; "rmst.dnsbl.net.au"; "sbl.spamhaus.org"; "short.rbl.jp"; "smtp.dnsbl.sorbs.net"; "socks.dnsbl.sorbs.net"; "spam.abuse.ch"; "spam.dnsbl.sorbs.net"; "spam.rbl.msrbl.net"; "spam.spamrats.com"; "spamlist.or.kr"; "spamrbl.imp.ch"; "t3direct.dnsbl.net.au"; "tor.dnsbl.sectoor.de"; "torserver.tor.dnsbl.sectoor.de"; "ubl.lashback.com"; "ubl.unsubscore.com"; "virbl.bit.nl"; "virus.rbl.jp"; "virus.rbl.msrbl.net"; "web.dnsbl.sorbs.net"; "wormrbl.imp.ch"; "xbl.spamhaus.org"; "zen.spamhaus.org"; "zombie.dnsbl.sorbs.net" ) $blacklistedOn = @() foreach ($server in $blacklistServers) { $fqdn = "$reversedIP.$server" try { $null = [System.Net.Dns]::GetHostEntry($fqdn) $blacklistedOn += $server } catch { } } if ($blacklistedOn.Count -gt 0) { Write-Host "$organization is blacklisted on the following servers: $($blacklistedOn -join ', ')" send_zabbix -key $organization -value 1 } else { Write-Host "$organization is not currently blacklisted on any server." send_zabbix -key $organization -value 0 } }
      
      







zabbixでは、データはトラッパーを介して渡されます。 トラッパーデータ要素を使用するには、以下を行う必要があります。



-Zabbixで設定されたトラッパーアイテムを持っている

-Zabbixにデータを送信します。



blacklistcheckホストを作成します。







次に、トラッパーを設定する必要があります。



データ項目を作成します。



名前 -何でもかまいません

キーは、トラッパーを作成する際の主要な要素であり、この要素では大文字と小文字が区別されます。 キーKEYとキーは2つの異なるキーです。

情報の種類 :タスクに適した3つのオプションがあります:番号、記号、またはテキスト。 しかし、正規表現を除外したため、整数値をテキスト配列よりも優先しました。

データ型は論理的です。 2 IP値は私たちにとって重要です:存在(1)、またはスパムリストに存在しない(0)。

値の表示はそのままにしておくことができますが、おおよそ次の内容の独自の変換を作成できます:1 = ip is Listing、0 = ip isn`t listing-これらの値はスクリプトに影響しませんが、zabbixでの情報の視覚化は興味深いものです。







その後、データ項目は値を取得する準備が整います。 zabbix_senderプログラムを使用してチェックを実行できます。



正しい操作の場合、同様の結果が得られます:



Zabbix送信者の結果
C:\> zabbix_sender.exe -z 10.0.33.31 -p 10051 -sブラックリストチェック-k fn -o 1 -vv

zabbix_sender.exe [14276]:デバッグ:回答[{"response": "success"、 "info": "processe

d:1; 失敗:0; 合計:1; 費やされた秒数:0.000066 "}]

サーバーからの情報: "処理済み:1; 失敗:0; 合計:1; 費やされた秒数:0.000066»

送信済み:1; スキップされました:0; 合計:1



–vvパラメーターは、診断データを表示するために使用されます。

1つのIPをチェックする速度は3分以下です。

次に、通知のトリガーを構成する必要があります。







任意の名前を指定できます。 この式は、データ項目の状態が0から1に変化したことに対応します。トリガーの場合、通知がメインzabbixパネルに表示されます。







練習用



メールシステムの動作で発生する可能性のある問題をクライアントに自動的に通知する、コンパクトで適切に機能するスクリプトを作成しました。 この問題の防止は、時間の問題で「落ちた」メールの問題を解決する必要性と比較して、はるかに優れていて落ち着いていることに同意します。



このソリューションはお客様に実装しており、特に営業部門が営利目的の郵便で作業している企業では、よくわかります。 このスクリプトを使用すると、IPがスパムデータベースに侵入する原因となった問題を迅速に特定し、損傷することなく作業を続行できます。



メールの離陸回数がタッチダウンの回数と一致することを願っています!



All Articles