Firewalldで特定IPからの接続をdrop

このサイトは見ての通りwordpressなのですが、wordpressではloginのurlが推測されやすいために結構攻撃を受けます。
私程度のサイトでも結構な頻度で攻撃されます。
Limit Login Attemptというプラグインを利用していると、攻撃をしかけてきているIPとその際にアクセスしようとしたログインIDがわかるのですが、久しぶりにみたら結構すごかったです。
やっぱログインのURL変えなきゃダメですね。

今回は攻撃元IPを全て遮断(drop)してみようと思います。

LimitLoginAttemptから一覧取得

お題目つけるほどでもないのですが、管理画面のプラグインページから
IP ID
の組み合わせを全部コピーしてきます。
それをサーバ上に配置したら準備完了です。

[root@metal ~]# vi limitLoginAttempt.txt  

awkでコマンド作成

awkコマンドでIPを取得しつつ、firewall-cmdのコマンドを作成していきます。
私実は初めて自分でawk使いました。
便利ですね〜。

[root@metal ~]# cat limitLoginAttempt.txt | awk '{print "firewall-cmd --add-source=" $1 " --permanent --zone=drop"}' > drop_ip.sh  

もっとかっこいい書き方があるのかもしれませんが、これで十分。
これにてコマンドが作成できました。
あとはこれをshell scriptにして実行するだけです。

シェルによるIPのdrop

続いて先ほどのファイルをshell scriptにして実行です。

# 先頭に #!/bin/sh を追加  
[root@metal ~]# vi drop_ip.sh  
[root@metal ~]# chmod 700 drop_ip.sh   
[root@metal ~]# ./drop_ip.sh  
[root@metal ~]# firewall-cmd --reload  
success  
[root@metal ~]# firewall-cmd --list-all --zone=drop  
  
# 後片付け  
[root@metal ~]# rm drop_ip.sh limitLoginAttempt.txt   
rm: remove regular file ‘drop_ip.sh’? y  
rm: remove regular file ‘limitLoginAttempt.txt’? y  

これにて完了です。
しばらくは標準出力としてコンソールにsuccessがたくさんでてきます。
あとは永続指定をしているのでfirewallをリロードしつつ、設定を確認しています。

これで少しは安心できますが、必ずしも固定IPの場所から攻撃されているわけでもないでしょうから巻き添えを食らっている人もいるかもしれません。
でもどうせ韓国とかロシアだろうから、気にしません。

あとがき

昨日なんの気なしに見たら、IDの場所に正しいIDが指定されていて肝が冷えました。
httpsなのになぜバレているんでしょうね。

わりとほんとわからないです。