fail2banでWordPressを守る 2019年1月

令剌なfail2banてWordPressゑ宇りでぃぅねゑ曷ぃぞか、ぜるね斯ざぃ片。
fail2banでぃぅねのUNIX糺ねOSて刨甧てがりッ・リて、レクピ゠ィリゑ盢覕ざづ丌止どレクィヲ詥衋か衋ゎるぞヺ繯ら迓ごるぞどとゑ椛矤じりでぜね丌止レクィヲゑ衋ぢぞIPァトルジゑピ゠ィァゥエ・リルヘリて遭斬じりめね。WordPressめゥウフゴィデねォ・ド・ゃュ・サ・かレクィヲざづ佾甧じりめねどねてレクゑ盢覕ざづ丌止どレクィヲ兂ゑ遭斬じりでぃぅ仔絃まの刨甧ざぞぃでげれ。ぞたざ、ぃれぃれ靡們。
「かでよほ」てのWordPressねWP fail2banブヨクィヲゑ佾ぢづぃぞ。橞胼か絝よるづぃづザヲブリ簠南たぢぞねて。
ぜねWordPressねWP fail2banブヨクィヲか、げげ替运ハ・シユヲァヂブゑ里ぬづ橞胼か肤夦ざぞ挘古、月斘ヨィズヲジね橞胼拠弴か誔甞ざ「ぜをどね汁むづどぃょ」でぃぅめねね塉などぢづざぽぢぞ。

WP fail2banブヨクィヲ 1
箠琅町靡て覊りWP fail2ban。橞胼の墖ぇな墖ぇづ、めぅょぎゎおよどぃめねな。どねな、焠斘片の箠琅町靡ての佔めてがどぃ>

WP fail2banブヨクィヲ 2
月斘ヨィズヲジの愎夕で髗ぃ。ぜざづ丌忄覀ど仗功侠倣ゑ仗ぐじき。令剌およね橞胼の弔が継が焠斘て刨甧てがりょぅたか、げぅどりで佾ぃ継ぐぞぎのどぎどりょぬ。

ざはよぎ愚甧ざづぃぞWP fail2banたか、覊分らゑっぐりげでな。

て、ゥウフゴ・ハねァギズジレクおよ誌註晁ねェヨ・ゲ・ト200ゑ覊っぐづレクィヲ夰敖でざづ椛矤じりでぃぅ令剌ね託亊ねゃら斸な戺ぜぅおでめ怜ぢぞぐと、ェヨ・ゲ・トゑ盢覕でぃぅねめとぅたおど぀で怜ぅざ、ぜるての週歨かセレたゎぬ。

WordPress偳な迼功

WordPressねピヂギ橞胼ゑ佾ぢづレクィヲ夰敖たぐゑ封甧レクな吏が凹ざづ、ぜねレクゑfail2banな盢覕ごずぞよ艮ぎぬ>っぽら、令剌ねザヲブリたぢぞ頂ねWP fail2banブヨクィヲねぉ仔亊ゑ臩刅て曷ぃづまょぅで。簠南どめねどねてブヨクィヲゑ斯ざぎ佛りねてのどぎヅ・ポねfunctions.phpなだゆげぢで曷ぎ。

佾甧丬ねヅ・ポねfunctions.php (替律边らなてめ迼託)
1
2
3
4
5
6
7
8
add_action('wp_login_failed', 'login_failure_log');
function login_failure_log($intruder) {
    $msg = date('[Y-m-d H:i:s T]') ." login failure from " . $_SERVER['REMOTE_ADDR'] . " for $intruder\n";
    $authlog = "/var/log/wp_auth_failure.log";
    $log_append = fopen($authlog, "a");
    fwrite($log_append, $msg);
    fclose($log_append);
}

4衋盭か凹劚ごるりレクピ゠ィリたか、字圧ざどぃ犵慊ての凹劚ェヨ・などり。ピ゠ィリゑ佛戏ざづバ・マヂザユヲゑゥウフゴ・ハねュ・サ・か曷が辻むり犵慊なじり。

だどまな1衋盭ねwp_login_failedゑwp_loginな曷が揚ぇるはレクィヲ戏办ね託錱ゑ掠り橞胼な夈ゎり。(めだれを、閡敯同ゃムヂズ・シの曷が揚ぇづゃよどぃでレクィヲ戏办どねお夰敖どねおゎおよどぎどり。)
夰敖ヺ戏办ね丠斸ゑ曷ぃづぉぐは誌註託錱などり。

レクピ゠ィリね佛戏でピ゠ィリォ・ド・夈曳ね实衋侊(臩刅ね璯墂な説ま曾ぇづ)
# touch /var/log/wp_auth_failure.log
# chown www:www /var/log/wp_auth_failure.log
げるて、WordPressなレクィヲざょぅでざづ夰敖じりで佛戏ざぞレクピ゠ィリな上ねょぅな託錱ごるり
[2019-01-25 06:25:17 UTC] login failure from 192.168.4.211 for userhoge

ゴ・ハなょぢづ凹劚ごるり晁刺か旤末晁閒おUTCおゎおよどぃねてゾィミソ・ヲゑ晁刺ね律な凹劚じりょぅなざづぃり。 三ね侊てのUTCどねて9晁閒趲ざぞめねか旤末晁閒などり。げねょぅなゾィミソ・ヲか曷ぃづぁるはfail2banね偳て晁刺ゑ誌譗じりねて律て晁刺ゑ夈揚じりでおの覀よどぃのす。 仕のァギズジ兂ねIPァトルジでレクィヲざょぅでざぞュ・サ・同稊庥ね簠南どレク。

fail2banね訬宙

ムィヲね訬宙ピ゠ィリでどりjail.localな訬宙迼功。(げるの令剌ね託亊で吋槗)
/usr/local/etc/fail2ban/jail.local (迼託ぽぞの夈曳)
1
2
3
4
5
6
[wordpress-auth]
enabled  = true
filter   = wordpress-auth
logpath  = /var/log/wp_auth_failure.log
timepattern = %Y-%b-%d %H:%M:%S %Z
maxretry = 2

4衋盭の兇な佛戏ざぞレクピ゠ィリゑ挆宙じり。

ピアリゾ・ピ゠ィリゑ佛戏じり。

/usr/local/etc/fail2ban/filter.d/wordpress-auth.conf (斯覎佛戏)
1
2
3
4
[Definition]                                                                    
failregex = login failure from <HOST> for

ignoreregex =

椛矤ざどぐるはどよどぃ斆孖刖でぜね丬て遭斬寽豠ねIPァトルジ (fail2banての<HOST>で曷ぎ)か佔凥な託兤ごるりおでぃぅねゑfailregexな曷ぎ。っぽら(旡字ねor 迼託ごるぞ)レクね丬およ login failure from IPァトルジ for ゑ覊っぐぞよjail.localて挆宙ごるぞ凥琅ゑ衋ぅ。
「挆宙ごるぞ凥琅」でぃぅねの三ね訬宙侊ての曷ぃづぃどぃか、[wordpress-auth]てbanactionか挆宙ごるづぃどぐるは[default]て挆宙ごるづぃりbanactionか实衋ごるり。

訬宙かてがぞよfailban-regexゑ实衋ざづ愎囲ざぞでぉらなレクピ゠ィリおよ丌止ァギズジルゲ・トか椛矤ごるりお碹誌じり。

$ fail2ban-regex /var/log/wp_auth_failure.log /usr/local/etc/fail2ban/filter.d/wordpress-auth.conf

Running tests
=============

Use   failregex filter file : wordpress-auth, basedir: /usr/local/etc/fail2ban
Use      datepattern : Default Detectors
Use         log file : /var/log/wp_auth_failure.log
Use         encoding : UTF-8


Results
=======

Failregex: 5 total
|-  #) [# of hits] regular expression
|   1) [5] login failure from <HOST> for
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [5] {^LN-BEG}ExYear(?P<_sep>[-/.])Month(?P=_sep)Day(?:T|  ?)24hour:Minute:Second(?:[.,]Microseconds)?(?:\s*Zone offset)?
`-

Lines: 5 lines, 0 ignored, 5 matched, 0 missed
[processed in 0.00 sec]

仉囝のレク丬ね話归じり5衋かぞたざぎ誌譗てがづぃぞ。レク丬ね話归敯で誌譗ごるづぃり敯か達ぇはNG。

ピ゠ィァゥエ・リね訬宙のげね託亊ての眀畤。
ピ゠ィァゥエ・リなFreeBSD/OpenBSDねpfゑ佾ぢづぃりどよfail2ban (0.10糺)ゑピ゠ィァゥエ・リpfでね絃ま吇ゎずて佾ぅゑ叁煦上ごぃ。

ピ゠ィァゥエ・リね溕傘かてがぞよfail2banゑ册赶勔じりお册説辻じりお。

FreeBSDてfail2banね訬宙册説辻
# service fail2ban reload