【PR】最近楽天で購入した商品

こちらもなかなかのボリューム。子供が綺麗に折り紙を折れるようになると、成長が感じられて、嬉しい。かんたん・かわいい・楽しい! 決定版 おりがみ大図鑑 大ボリューム!190作品がオールカラーでわかる! [...]

この手のやつは、いったいどういう仕組みで絵とペンの音声をマッチさせているのか不思議。もの凄いボリュームなので、子供も飽きずに楽しめます。音で学べる!英語ことば図鑑5000 タッチペンつき [ アレン玉 [...]

いつの間にか、黎明篇の続きが!前回で完結したとばかり思っていたので、これは嬉しい。そして、めちゃくちゃ面白い!宇宙戦艦ヤマト 黎明篇 第2部 マリグナント・メモリー [ 塙 龍之 ]価格:1,650円 [...]

塗るタイプの方が効果大で長持ちする気がします。【医薬部外品】ギャツビー プレミアムタイプ デオドラントロールオン アクアティックシトラス 60ml価格:575円(税込、送料別) (2024/10/31 [...]

多摩にペン先がない!ってことがあるので。その後、運よく見つかってはいるのですが、予備を持っておいてもいいかも。エレコム Apple Pencil 用 交換ペン先 第1世代 第2世代 USB-C 対応 [...]

前は黒っぽいやつを使っていたのだが、これだとカビとか生えても分からないんじゃ、ということでもっと明るい色のものに変更。東和産業 ボディタオル すご泡銀抗菌ナイロンタオル メンズ グリーン 約28×12 [...]

まだこの最新版は使っていないのだが、前のバージョンは全然iPad用で使えているので、かなり重宝している。[数字LED・驚異の精度・最長使用時間]タッチペン アップルペンシル互換 IPAD用スタイラスペ [...]

最近はネットでデータを受け渡しできるのでCDRを焼くこともめっきり少なくなり、昔のCDRをハサミで切って捨てたりしているのですが、普通のはさみよりこちらの方が切れやすく手への負荷が少ないようです。が、 [...]

最初の方、マンネリかなぁと思いながらも、給食パワーなのか、やはり見入ってしまった。出てほしかった、神野ゴウくんにまた会えたのも嬉しい。おいしい給食 Road to イカメシ【Blu-ray】 [ 市原 [...]

子供に強請られて。そんなに高機能ではないので、すぐに飽きるかと思いきや、見た目やしぐさがツボにはまったらしく、意外と可愛がっている。Tcvents ロボット ラジコン ロボットおもちゃ ラジコンロボ [...]

IT関連サイト記事新着

ランサムウェア攻撃が猛威を振るう中、システム停止や身代金の支払いによる損害額が増加する傾向にある。具体的にはどれほどなのか。ランサムウェア攻撃の恐ろしさを損害額 [...]

情報システム部門を対象にアンケートを実施し、番外編として「情シス川柳」を募集しました。筆者が5年半ほど情シスとして従事した経験を基に、心に響いた川柳を紹介させて [...]

「ChatGPT」で知られるOpenAIの文字起こしツールが物議を醸している。開発元のOpenAIでさえ「使うな」と警告するほどだ。一体、どんな問題を抱えている [...]

IT技術とは日進月歩の世界です。IT業界に身を置くと、IT技術を意欲的にキャッチアップしていく姿勢が求められますが、この姿勢の原動力は、案外「好奇心」だったりし [...]

生成AIの利用はAPIを経由してのアクセスが基本となる。そこで重要になるのがAPIによるやりとりを管理するAPIゲートウェイだ。9月27日に開催された「Thin [...]

Google検索では、検索キーワードによって検索結果の先頭に「AIによる概要」が表示される。検索結果の先頭に大きな領域を使って表示されるため、邪魔に感じる人もい [...]

サイバー攻撃やハードウェアの故障、自然災害、ヒューマンエラーなど、さまざまな要因でシステム障害が発生してきた。歴史に残る重大なシステム障害の例を8つ紹介する。 [...]

ソフトウェアエンジニアリングリーダーの間で、OpenAIの「ChatGPT」やGoogleの「Gemini」のような生成AIチャットbotの可能性に関心が高まっ [...]

IT関連Youtube

エンジニア年収UPチャンネル 2024-11-14 19:00:06 【再生時間】08:37 Favorite [...]

ねもたく-IT社長の時短術- 2024-11-14 19:01:15 【再生時間】00:46 Favorite [...]

Popular Posts(last24hours)

fail2banでWordPressのログイン攻撃を防ぐ

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。

jetpackだとインストールしただけで簡単に防いでくれそうな感じでもあるのですが、jetpackの統計機能が無償では無くなったことと、jetpackは重い印象があるので、すでに使用しているfail2banでできないかと調査。1つのサーバで複数のWordPressサイトを運用している場合もWebサーバのログファイルは1つなのでまとめて対応できますしね。

Webで検索するとfilterがいくつか見つかったのですが、

failregex = ^<HOST> -.*"POST /wp-login.php HTTP.*$

だと

fail2ban-regex /var/log/httpd/access_log /etc/fail2ban/filter.d/apache-wplogin.conf --print-all-matched

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

Use   failregex filter file : apache-wplogin, basedir: /etc/fail2ban
Use         log file : /var/log/httpd/access_log
Use         encoding : UTF-8


Results
=======

Failregex: 2 total
|-  #) [# of hits] regular expression
|   1) [2] ^<HOST> -.*"POST /wp-login.php HTTP.*$
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [87470] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-

Lines: 87470 lines, 0 ignored, 2 matched, 87468 missed
[processed in 29.06 sec]

|- Matched line(s):
|  xxx.xxx.xxx.xxx - - [14/Jul/2024:04:37:43 +0900] "POST /wp-login.php HTTP/1.1" 200 11936 "-" "Mozilla/5.0"
|  xxx.xxx.xxx.xxx - - [14/Jul/2024:05:01:02 +0900] "POST /wp-login.php HTTP/1.1" 200 11936 "-" "Mozilla/5.0"

Missed line(s): too many to print. Use --print-all-missed to print all 87468 lines

で2件しかヒットせず、実際に動かしてみても一向に検知されていく気配がありません。

failregex = ^<HOST>.* "POST .*/wp-login.php([/\?#\\].*)? HTTP/.*" 200

だと

Results
=======

Failregex: 51 total
|-  #) [# of hits] regular expression
|   1) [51] ^<HOST>.* "POST .*/wp-login.php([/\?#\\].*)? HTTP/.*" 200
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [87529] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-

Lines: 87529 lines, 0 ignored, 51 matched, 87478 missed
[processed in 30.26 sec]

|- Matched line(s):
|  xxx.xxx.xxx.xxx - - [14/Jul/2024:04:37:43 +0900] "POST /wp-login.php HTTP/1.1" 200 11936 "-" "Mozilla/5.0"
|  xxx.xxx.xxx.xxx - - [14/Jul/2024:05:01:02 +0900] "POST /wp-login.php HTTP/1.1" 200 11936 "-" "Mozilla/5.0"
|  xxx.xxx.xxx.xxx - - [14/Jul/2024:20:23:32 +0900] "POST /wp-login.php?jetpack-protect-recovery=true HTTP/1.1" 200 11929 "https://xxx.xxx/wp-login.php" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
|  xxx.xxx.xxx.xxx - - [15/Jul/2024:04:06:22 +0900] "POST //wp-login.php?jetpack-protect-recovery=true HTTP/1.1" 200 11930 "https://xxx.xxx//wp-login.php" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
|  xxx.xxx.xxx.xxx  - - [16/Jul/2024:22:32:48 +0900] "POST //wp-login.php HTTP/1.1" 200 11936 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
|  xxx.xxx.xxx.xxx  - - [16/Jul/2024:22:40:53 +0900] "POST //wp-login.php HTTP/1.1" 200 11937 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"

な感じで元のもの以外も多くヒットしたので後者を採用することにします。

という訳で

/etc/fail2ban/jail.d/apache-wplogin.local
[wplogin-iptables]
enabled = true
filter = apache-wplogin
action = iptables-multiport[name="403", port="http,https", protocol="tcp"]
logpath = /var/log/httpd/*access_log
ignoreip = 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
maxretry = 5
findtime = 60
bantime = 1800
/etc/fail2ban/filter.d/apache-wplogin.conf
[Definition]
failregex = ^<HOST>.* "POST .*/wp-login.php([/\?#\\].*)? HTTP/.*" 200
ignoreregex =

で始めて見て様子見。

fail2ban-client status wplogin-iptables
                                                              
Status for the jail: wplogin-iptables
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     14
|  `- File list:        /var/log/httpd/access_log /var/log/httpd/ssl_access_log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

という感じで検知はしている模様。

Tips,WordPress

Posted by admin