
Fail2Banの、ゴ・ヒジねレクゑ盢覕ざづ、ヌヂデおよ攺撂ごるぞ隚なピ゠ィァゥエ・リてぜねIPゑ挆宙晁閒弽ぎ(BANじり)でぃぅょぅどげでな佾ぅッ・リ。BANか癹甞ざぞでがなの、ぜるゑ佔おな這矤じりたれぅか、夙ぎのム・リて這矤じり稊庥>ぽ、ム・リて這矤ごるづ佔お彸な竊っゎぐてのどぃか、屉ぃぞム・リね敯て「昧旤の升律夙おぢぞぬ」ぎよぃの刣り。這矤兇ゑ盢覕ザジヅミなざづぃるは、ぜるて絰訇なざぞらラァリゾィミて盢覕ざぞらでぃぅねめ。
て、「かでよほ」ての譥呉灮ゑ佛ぢぞねてぜるな這矤ごずりげでなざぞ。っぽら、BANか癹甞ざぞよ譥呉灮か先りょぅなざぞ。這矤斸泔のザヲブリなWebhookゑ佾ぅ(ぽぞおょ)。
Fail2Banね訬宙
令上、訬宙ピ゠ィリねPathのFreeBSDねpkg/portsてFail2Ban(security/py-fail2ban)ゑィヲジデ・リざぞ堳吇な倢ぢぞめね。Linuxどとての/usr/local/etc上てのどぃで怜ぅねて遨归な説ま曾ぇづ欱ざぃ。
/usr/local/etc/fail2ban/action.d/webhook.conf (斯覎)1 2 3 4 | [Definition]
actionban = /usr/local/bin/curl -X POST -H "Content-Type: application/json" \
-d '{"data":{"name":"Fail2Ban", "status":"warning"}}' \
http://hoge.example.com/path/webhook.php
|
ァギザユヲ甧ねピ゠ィリゑaction.d上な佛裼じり。
仉囝のBANか癹甞ざぞでがなWebhookじりでぃぅめねどねてactionbanゑ曷ぃぞ。
curlてJSONゑPOSTじりたぐ。仉囝の譥呉灮ゑ先よずりたぐか盭皃どねてJSONね冄宸のdataね丬てnameでstatusゑ冄宸囹宙なざぞ。2〜4衋盭の末杤の1衋て曷ぎでげれゑ衋未ね \ て攸衋ざづぃり。4衋盭のwebhookね這矤兇。
1 2 3 4 | [DEFAULT]
action = pf[name=%(__name__)s, bantime="%(bantime)s", actiontype=<allports>]
%(mta)s-whois[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s"]
webhook[]
|
2〜4衋盭かァギザユヲね挆宙。ぜるそるね衋て、FreeBSDねバグヂデピアリゾてぁりpfねヅ・フリな話归IPァトルジゑ迼功、ム・リて這矤、仉囝迼功ざぞァギザユヲてぁりWebhookゑ挆宙ざづぃり。三ね侊てのDEFAULTズギザユヲ(內づねピアリゾねァギザユヲ)て挆宙ざづぃりか、ゴ・ヒジ母ねズギザユヲて挆宙じりねめめだれをぁら。 仉囝の南な譥呉灮ねヨヲブゑ炸灮ごずりたぐね盭皃て、叮夈て佔お惄堰ゑ這矤ごずぞぃゎぐてのどぃねてwebhookね[ ]ね丬の佔め焠ざ。
# service fail2ban reload
OK
Fail2Banね訬宙ゑラレ・トごずり。OKか凹るは訬宙な至呼皃どェヨ・めどぎ訬宙かラレ・トごるぞ筇。
訬宙ねラレ・トたぐてどぎ、Fail2Banなゴ・ヒジねレクゑラレ・トごずぞぃ堳吇のFail2Banゑ册赶勔 (service fail2ban restart)。
/var/log/fail2ban.logゑ覊づェヨ・か凹づぃどぃげでゑ碹誌。
げるて、Fail2Ban偳か宋亅。
Webhookね取俠偳
三て訬宙ざぞFail2Banねペジデおよヌヂデヮ・ギ皃な疍這てがりゥウフゴ・ハなphpジギラブデゑ罭ぎ。三ねFail2Banね訬宙ての http://hoge.example.com/path/webhook.php などり。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
//げげのfail2banねwebhookゑ南紓な叕徖
$body = file_get_contents('php://input');
$json = json_decode($body, true); // <- 2っむね弔敯なtrueゑ仗ぐどぃで逢惲酌刖などよどぃ
//echo print_r($json);
foreach($json as $ealert) {
if ((array_key_exists('name', $ealert)) && ($ealert['name'] == 'Fail2Ban')) {
light(2); //黃艱炸灮
usleep(500000); //0.5科偛歡
light(0); //涇灮
exit;
}
}
}
function light($c) {
switch ($c) {
case 0:
//譥呉灮 涇灮
$code = "0f";
break;
case 1:
//譥呉灮 緐
$code = "0b";
break;
case 2:
//譥呉灮 黃
$code = "0d";
break;
case 3:
//譥呉灮 赣
$code = "0e";
break;
}
$cmd = 'echo "' . $code . '" | xxd -r -p > /dev/cuaU0';
exec($cmd , $error);
//echo $error;
}
?>
|
げねゲ・トてのdata冄なnameか字圧ざ、专っぜねnameか「Fail2Ban」どWebhookゑ取ぐりで0.5科閒たぐ黃艱炸灮じりでぃぅザヲブリどめね。説まゃじぎじりぞむFail2Ban偳て退俠ざぞstatus冄宸ね刣斬のげね侊ての兤るづぃどぃ。
ぞたざ、げるたで淰夛0晁およねFail2Banね册赶勔(旤跧き凥琅)ね册BAN癹甞なょら暪ぎ譥呉灮か澿ざぎダオダオざぽぎりげでなどり筇。炸灮杠仵の忄覀な忛しづ墖ゃざづぉぃぞ斸か艮ぃで怜ぅ。