質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.61%

特定のIPアドレスからのアクセスをブロックする方法につきまして。

解決済

回答 6

投稿

  • 評価
  • クリップ 2
  • VIEW 6,971

score 60

現在、自身のWEBサイトへの特定のIPアドレスからのアクセスをブロックする方法を勉強しています。
※WEBサイトにはユーザーのログイン認証機能があるものとします。

1.サイトへのログインを試みたユーザーのIPアドレスを$_SERVER['REMOTE_ADDR']で取得し、ログに保存。

2.IPアドレス(111.111.111.11)のユーザーが、短時間でログインに50回失敗するなどの不審な行動を取る。

3.IPアドレス(111.111.111.11)からのアクセスに対して、自動でアクセス制限をかける。

上記の1~3を実施することで、不正ログイン対策ができるのかなと思ったのですが、ふと、IPアドレスはプロバイダによっては、ルーターの電源を入れなおしたタイミングなどで、ころころ変わるという話を思い出しました。

上記の例の、IPアドレス(111.111.111.11)の不審ユーザーを、仮に「悪者太郎」とします。

この「悪者太郎」からのアクセスをブロックするために、IPアドレス(111.111.111.11)からのアクセスをブロックしても、「悪者太郎」が例えばルーターの電源を入れなおすなど、何かしらの方法でIPアドレスを変えてきた場合、また「悪者太郎」はサイトにアクセスできるようになってしまうと思うのですが、「悪者太郎」からのアクセスを永久的にブロックする方法はあるのでしょうか。

悪質なユーザーのブロック対策を、どのようにすればよいかわからず、質問させて頂きました。

お詳しい方がいらっしゃいましたら、何卒、お知恵を貸して頂けましたら幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

+10

詳しいと言うほどの者ではありませんが、本質問の活性化をうながす一助にもなればと思い、回答させていただきます。

「悪者太郎」からのアクセスを永久的にブロックする方法はあるのでしょうか。

永久にブロックする方法はありません。IPパケットはその内容の改ざん、詐称が可能です。例えばIPパケットの中の送信元IPアドレスは改ざんが可能です。もしそうした場合は戻りのパケットはそちらに行くことになりますが、反対にこれを悪用した攻撃も考えられます。ルーターのファームウェアを自作すればさらに高度で悪質な攻撃も可能となるでしょう。

攻撃の頻度に目を向けてみれば、私がテスト用に建てたインターネット上のサーバーですら、さまざまな国(ドメイン)からのHTTPリクエストによるお伺いアタックが日常茶飯事です。(phpmyadminの存在を問われることが多い)

それでも既知の防御方法を自サーバーに適用することで、いわゆる(悪い意味での)Script Kiddy(スクリプトキディ - ハッカー/クラッカーに憧れ、安易に手に入るマルウェアなスクリプトを使う小中学生のような子供の意)が手に入れることができるようなツールを使ったレベルの低い攻撃をかわすことは容易です。IPレベルで言うと排除すべきブラックリストのようなものもあります。この辺はイタチごっこですが、世のセキュリティ事情に気を留めて、適時、最良の方法を適用していくほかないと考えます。

あえて言うならば、

3.IPアドレス(111.111.111.11)からのアクセスに対して、自動でアクセス制限をかける。

この辺はアプリケーション層のphpのプログラムで行うべきでは無いと思います。例えばlinux であれば、linuxカーネル自体がサポートしているipchainsなどの利用を検討するべきです。そうでないとIPパケットはlinuxカーネルのIPスタック内に到達することになり、DoS等の攻撃による影響が大きくなります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/27 16:43

    「本質問の活性化をうながす一助にもなればと思い」というお言葉に、輝くものを感じました。
    また、とても丁寧なご回答に、心より感謝申し上げます。
    有難うございます。

    キャンセル

checkベストアンサー

+4

既にいくつか回答がありますが、既存の回答の中には間違った内容もあるので、訂正も兼ねて回答します。

3.IPアドレス(111.111.111.11)からのアクセスに対して、自動でアクセス制限をかける。

これを「自動で」やるなら、さしあたりウェブアプリケーションで実施するのが現実的かと思います。そして、不正ログイン対策が目的であれば、アプリケーションレイヤーでの実装で大きな問題はありません。
一般論として、IPアドレスによるブロックは、できるだけ上流で実施するのが効果的なので、ウェブアプリケーションよりはOSの機能(iptablesなど)、さらにはファイアウォールやルータの機能でブロックした方が効果的です。しかし、それを自動化するとなると、大掛かりな仕掛けが必要になったり、iptablesの設定追加にはroot権限が必要になる、などの課題があるので、root権限が必要なくファイアウォール等との連携も必要がないという意味で、アプリケーションレイヤーでの対策は現実的で副作用(たとえばroot権限をのっとられる)も少ないと言えます。

何かしらの方法でIPアドレスを変えてきた場合、また「悪者太郎」はサイトにアクセスできるようになってしまうと思うのですが、「悪者太郎」からのアクセスを永久的にブロックする方法はあるのでしょうか。

そのような方法はありません。諦めてください。
なので、前述の「IPアドレスによるブロック」も恒久的な設定にはできず、一定時間経過後には開放した方がよいでしょう。

類似の考え方として、IPレピュテーションというものがあります。これはIPアドレス自体の「評判」という意味ですが、過去に攻撃に用いられた履歴からブラックリストを作成するという考え方です。従来メールのspam対策に用いられていた方法ですが、最近はWeb Application Firewall(WAF)の一部に、IPレピュテーションによる防御機能を備えたものがあります。

しかし、私自身はIPレピュテーションによるブロックには懐疑的でして、それを裏付ける記事が今年の10月に公開されました。筆者の金床さんはウェブのセキュリティ分野ではとても高名な方です。

IPレピュテーションでウェブアプリへの攻撃は防げるか

結論としては、攻撃の3割程度はIPレピュテーションで引っ掛けられるが、7割は見逃すということで、あまりアテにはならないということです。
また、この記事から「評判の悪いIPアドレス一覧」が参照されているので、これらをまとめてブロックしても良いでしょう…が、かなりの数ですので、手間もかかりますし、このリストのIPアドレスから来た攻撃は全体の1%程度とのこと(金床さんの記事)ですので、現実的な効果はほとんどないと思います。

悪質なユーザーのブロック対策を、どのようにすればよいかわからず、質問させて頂きました。

前述のように、IPアドレスによるブロックは現実的でないので、個別の攻撃に対して対策していくしかありません。不正ログインについては、複雑なパスワードをつけることが唯一の解決策なので、まずはそれを実施しましょう。

送信者のIPアドレスは偽装できるか?

既存の回答者から、IPアドレスは偽装できるというコメントがありますが、正確ではありません。

昔から、送信元のIPアドレスを偽装する攻撃は知られていて、IPスプーフィングと呼ばれます。IPネットワークのうち、UDPによるもの(DNS、NTP等)はIPアドレス偽装が容易で、現実に攻撃もあります。一方、TCPについては、3ウェイハンドシェイクが必要なため、現在では、IPアドレス偽装はできないとされています。現在は…と書いたように、前世紀の頃はTCPについてもIPアドレス偽装が現実的な脅威でして、以下の有名な事件でも悪用されました。

コンピュータ会社のデータを盗んで禁固刑を受けたが、保護観察中に逃亡する。約2年間、ロサンゼルスやシアトルの捜査当局による捜索を逃れ続けた[1]。1994年12月25日からカリフォルニア大学サンディエゴ校にあるサンディエゴ・スーパーコンピュータ・センターに SYNフラッド攻撃や、シーケンス番号が予測可能な既知の脆弱性を利用して TCP コネクションをジャックし侵入に成功。/.rhostsの改竄にすら至った。捜査機関がケビンの逮捕はもはや無理ではないかと考えるに至った頃、1995年2月15日に同大センター勤務の下村努の協力を得たFBIによって逮捕された[注釈 1]。禁固5年・執行猶予4年の有罪判決を受け投獄される。

ケビン・ミトニック - Wikipedia より引用

上記でもわかるように、1994年の事例でして、今はこの「シーケンス番号が予測可能な既知の脆弱性」は解消されています。

ご質問はウェブ、すなわちTCP/IPを前提にしていると思いますので、IPアドレス偽装は不可能と考えて良いと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/27 14:00

    訂正をいただき、どうもありがとうございます。認識を新たにしました。(実はockeghem様からの何らかの回答が拝見できるかも、と思っていました)

    キャンセル

  • 2018/12/27 16:57

    私は少し前まで、ログを取ることすら頭にない初心者でしたが、徳丸先生の「安全なWEBアプリケーションの作り方 第2版」を読んで、ログを取る重要性を知り、その流れでこの質問に至ったという経緯があります。
    今回の質問へくださった回答も、本当にわかりやすく、本当に感謝しかございません。
    心より御礼申し上げます。
    これからも徳丸先生の本をもっと読み進めて、安全で人に喜ばれるサービスを作れるようになりたいです。
    本当に有難うございます。

    キャンセル

+2

以前ある企業のメールシステムで不正ログインを試しているIPからのアクセスをiptablesで自動制限、解除する仕組みを作ったことがあります。
アプリケーションで制限するよりサーバへの負荷が少ないのでオススメです。

1IPで1アクセスのみの不正アクセスがあることもあるので普段アクセスのある国からのIPからのアクセスでない場合はアクセスを拒否したり、
二段階認証したり、色々対策はあるかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/27 16:42

    iptablesの存在、初めて知りました。国による制限、ぜひ使用してみたいと思います!
    参考になるご回答、本当に有難うございます。

    キャンセル

+1

ルーターの電源を入れなおす

DDoSなどでググり、関連情報とともに対策方法を調査すると良いかと思います。

サービスを持続的に運用するために、単なるブロックだけで済む世界ではなくなっていて、
不審アクセスを全てブロックしていたら、不正アクセスでないアクセスに影響してしまう可能性もあり、
不正アクセス者の嫌がらせやサービス停止といった目的を半ば達成させてしまうことになります。

特定のIPアドレスからのアクセスをブロック

ただ、単に技術的にタイトル通りの知識をとのことであれば、既に回答が出ている通りファイアウォール
について調査されることをお勧め致します。
どのようなお立場かわかりませんし、提供しているサービス規模などにもよりますが、
DDoS対策サービスを提供している事業者もありますので、相談してみてもよろしいかと思います。
監視コストを自前でもつか、など兼ね合いかと思いますので。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/27 12:37 編集

    まあ、徳丸先生が降臨するでしょw

    キャンセル

  • 2018/12/27 16:45

    DDoSについて今後勉強していきたいと思います!
    「不審アクセスを全てブロックしていたら、不正アクセスでないアクセスに影響してしまう可能性もあり、
    不正アクセス者の嫌がらせやサービス停止といった目的を半ば達成させてしまうことになります」というお言葉、とてもためになりました。有難うございます。

    キャンセル

+1

特定のIPアドレスからのアクセスをブロックする方法につきまして。

いろいろな箇所で実現できます。

・FW
・IPS/IDS
・WAF
・ロードバランサー
・Web サーバ
・アプリケーション

実装の容易さから判断すると、php での実装はそれほど間違っていません。
*パフォーマンス的には間違っていますw

受け取った ip アドレスで処理を分けるだけなので、コードもシンプルに書けると思います。

ただ、以下の質問は非常に回答が難しいです。

悪質なユーザーのブロック対策を、どのようにすればよいかわからず、質問させて頂きました。 

これは、
・攻撃の手法の研究
・自身のアプリケーションへのアクセス特性の把握
といったものを行い、セキュリティ設計を行わなければなりません。

セキュリティ設計の内容が外部に出てくることは稀であり、実際の現場で使われているものは、基本的に秘匿されます。

本気で検討するのであれば、情報の集まっているコンサル屋さんに頼む必要があります。
個人的には簡易なものを導入した上で、攻撃手法を研究し都度追加実装していくことが良いのではないかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/27 16:47

    こんなにいろいろな箇所で実現できるのですね!
    パフォーマンスのことも考えた上で実装していくべきなど、とても勉強になります。
    いつも素敵な回答をくださり、とても尊敬しております。
    本当に有難うございます。

    キャンセル

+1

本来実施したいことは、悪意のあるトラフィックからウェブアプリケーションを保護することかと思います。

特定のIPアドレスからのアクセスをブロックする方法については、ファイアウォール、ウェブレイヤー、アプリレイヤーでIPアドレスまたはCIDR指定でブロックすれば良いです。

悪意のあるトラフィックからウェブアプリケーションを保護するにはWAFの導入をおすすめ致します。
クラウド型WAF、アプライアンス型WAFとありますが、クラウド型が割とコストを抑え、簡単に導入可能です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/27 16:51

    クラウド型WAF、アプライアンス型WAFなどの種類に分かれているのですね、ぜひ検討してみたいと思います!とても参考になるアドバイス、本当に有難うございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る