CrystalSnowman.com

あなたの時間節約につながる情報を提供します

logwatchのログを見ると攻撃を受けているようなのでfirewalldでIPアドレスをシャットアウトする方法

firewall_image

このサイトのOSはCentOS7で、Webサーバはnginxを使用しています。毎日サーバの状態をlogwatch(監視ツール)で監視していますが、ここ数日logwatchメールのnginxセクションで特定のIPアドレスから攻撃されているとエラーが表示されていました。そのため急きょfirewalldでIPアドレスをシャットアウトしました。その辺の経緯を残します。

logwathの監視結果

logwatchから毎日メールで監視結果を送信するように設定しています。攻撃を受けていることを表している部分は以下です。

xxは数字で、悪意のないIPアドレスだったらまずいので非公開にしました。
probed the serverとは直訳すると「サーバを探究した」となりますが、参考にさせていただいた以下のサイトによると、

[さくらのVPS]サーバー監視がとても捗るlogwatchを入れてみた

まず最初の「A total of 3 sites probed the server」ですが、ここで言うprobedとはポートスキャンやアクセス可能なファイルを探査する“良くない行為“のことを言うようです。つまり、それ以下に記載された3つのIP(sites)から、プローブ(良くない探査行為)を受けたってことのようですね。

[さくらのVPS]サーバー監視がとても捗るlogwatchを入れてみた HappyQuality

良くないことされていると考えてもよさそうです。

パケットフィルタリング(firewalld)で対策

これらのIPアドレスをどうにかしたいと思いました。すぐに思いついた方法は二つで、nginxのconfファイルにdeny IPアドレスと追記する方法と、CentOS7のパケットフィルタリング(firewalld)の機能を使用する方法です。

参考にさせていただいた以下のサイトによるとnginxで拒否する方法は結局リクエストを受けてしまうため、あまり意味ないようです。そのためパケットフィルタリング(firewalld)でなんとかする方法を採りました。

[firewalld]特定のIPアドレスを接続拒否する方法

今日の午後、あるIPアドレスから http://nullpopopo.blogcube.info/favicon.ico 目掛けて秒間3アクセスくらいの頻度でSPAMが。。。nginxで拒否しようかと思ったのですが、これ403を返すだけでリクエスト受けちゃうから、いよいよ真面目にfirewalldで拒否するしかないかなー、と。

[firewalld]特定のIPアドレスを接続拒否する方法 (っ´∀`)っ ゃー

CentOS7のパケットフィルタリングについて

パケットフィルタリングは送受信するIPパケットをルールに基づき許可拒否する機能です。
ルールはゾーンと呼ばれ、CentOS7にはblock, dmz, drop, external, home, internal, public, trusted, workという9個のゾーンが用意されています。

今回関係ありそうなのはblockdropです。
それぞれの定義は次の通りです。

drop: 他のホストからのすべての通信をドロップし、応答しません。
block: 他のホストからのすべての通信を拒絶します。

定義から判断すると、今回は応答しないdropゾーンに問題のIPアドレスを指定すればよさそうです。

定義ゾーンの確認

次のコマンドで定義されているゾーンを確認します。
2行目に先ほどの9種類のゾーンが羅列されています。

#の後が入力したコマンドで、#はrootで実行していることを表しています。

問題のIPアドレスをdropゾーンに設定

次のコマンドで設定します。
–permanentで永続的な設定にします。

設定内容の反映

次のコマンドで反映させます。

設定内容の確認

次のコマンドで確認します。

dropに2種類のIPアドレスがあることが分かります。
設定完了です。
次のlogwatchの結果が楽しみです。

iptablesについて

Linuxにはiptablesというパケットフィルタリング機能がありますが、CentOS7からはfirewalldがデフォルトのようです。CentOS6ではiptablesがデフォルトだったようですが、CentOS7ではfirewalldとiptablesとの併用はできないようです。

CentOS6とCentOS7の比較表

まとめ

logwatchの内容からサーバが攻撃されていることを知り、firewalldで対策をとるまでの経緯を書きました。
CentOS7からはfirewalldがデフォルトとなり、iptablesの知識が使えないケースがあります。
私の記事が少しでもあなたのお役に立てればうれしいです。


Top