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

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

新規登録して質問してみよう
ただいま回答率
85.48%
セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

6回答

3198閲覧

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

yayak

総合スコア66

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2018/12/26 16:18

現在、自身の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アドレスを変えてきた場合、また「悪者太郎」はサイトにアクセスできるようになってしまうと思うのですが、「悪者太郎」からのアクセスを永久的にブロックする方法はあるのでしょうか。

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

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

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

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

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

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

あえて言うならば、

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

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

投稿2018/12/26 17:34

編集2018/12/27 03:34
dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yayak

2018/12/27 07:43

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

0

ベストアンサー

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

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 04:43

編集2018/12/27 04:58
ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2018/12/27 05:00

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

2018/12/27 07:57

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

0

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

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

投稿2018/12/26 17:32

scsi

総合スコア2840

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yayak

2018/12/27 07:42

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

0

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

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

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

投稿2018/12/27 06:00

編集2018/12/27 06:01
moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yayak

2018/12/27 07:51

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

0

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

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

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

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

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

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

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

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

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

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

投稿2018/12/27 05:48

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yayak

2018/12/27 07:47

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

0

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

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

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

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

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

投稿2018/12/27 02:04

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/27 03:37 編集

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

2018/12/27 07:45

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問