iptablesで攻撃してきたIPをブロックしてみた

DOS攻撃を遮断してみた

皆さんこんにちは。
やっと家にwifiの環境が整い感動しているヤマオカです。

さて、今回はサーバを2台建ててサーバに疑似的に攻撃を加えてみます。
疑似的に攻撃を加えるというのは、よくwebサーバの負荷を確認する際に利用する方法で行っていきます。

負荷を確認する際と違うのが、ここから攻撃を加えてきたサーバからの接続をiptablesコマンドを使って遮断します。

前提

すでにサーバは2台準備しております。

攻撃 abコマンド

今回は負荷を与えるためにabコマンドを使っていきたいと思います。

abコマンドとは

まず初めに、abコマンドとはベンチマークツールとしてよく利用されるツールの一つです。

webサーバにアクセスが集中した時など負荷がかかった際に、システムダウンなど起きないよう事前にパフォーマンスを、確認できるものになります。

abコマンド使い方

よく使われるのは-n と -cになるのでこの二つを今回は紹介します。

オプション 意味
-n 総リクエスト数
-c 同時リクエスト数
 ab -n 100 -c 10 {対象url}

上記の表現ではトータルで100回のリクエストを発行して、同時に10の接続が行われています。

サーバからのレスポンスの待ち時間が、どれくらいで検証されるのかというと、デフォルトでは2分間になっています。
指定をしたい場合には -t オプションをご利用ください。

さて、ここで先ほど構築したサーバに対して攻撃(負荷テスト)を行ってみます。

 ab -n 100 -c 100 https://hogehoge

ここで負荷テストを受けた側のサーバのアクセスログを見てみましょう。
アクセスログからは特定のIPからのアクセスが大量に来ていると思うので、このIPからの接続を遮断してみます。

実際にはいきなり遮断することはせずに慎重に判断して遮断なり対応をとってくださいね。

遮断 iptables

さて、これから先ほど確認したIPアドレスiptablesコマンドを使って遮断したいと思います。

iptablesとは

Linuxで使用されているパケットフィルタになります。
下記が今回使うコマンド等です。

コマンド等 意味
-A ルールの追加
-D ルールの削除
-s パケットの送信元
-j ターゲットの指定
DROP パケットの拒否
ACCEPT パケットを許可
INPUT 入ってくるパケットに対して

iptablesの書式

    iptables

今回利用するコマンドを例に紹介していきましょう。

    iptables -A INPUT -s {攻撃元IP}  -j DROP
  • -Aでルールの追加
  • INPUTは入ってくるパケットに対して行うという意味
  • -sでパケットの送信元を指定
  • DROPパケットを拒否

まとめると、{攻撃元IP}という入ってくるパケットに対してパケットを拒否するという新しいルールを追加する。という意味になります。

さて、これで{攻撃元IP}からの攻撃(負荷テスト)を拒否することができたはずです。本当にできているのか再度確認してみましょう。

再度攻撃

 ab -n 100 -c 100 https://hogehoge

もう一度上記のコマンドを打って確認してみます。
攻撃を受ける側はログやtopコマンドで確認してみましょう。

ここで正しくできていれば反応はないはずです。

遮断していたIPのルールを削除

されどもずっと拒否されているのもかわいそうなので追加したルールを削除してあげます。

 [root@localhost ~]#iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source                destination
    DROP       all  --  {対象ipの情報}         anywhere

    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination

    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination

まず上記のコマンドを使ってiptablesの設定を確認します。

iptables -D INPUT 1

INPUTの設定上にある1つ目の設定を削除(-D)します。
これで拒否していたルールが削除されました。

おわり

というわけで今回は攻撃を遮断してみました。 実際にはサーバの負荷テストの際に使われるabコマンドを利用してみました。

今回紹介したabコマンドは使い方を間違えたりすると、第三者に危害を加えることになりかねません。
そのため十分注意して利用しましょう。