現在、自身の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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答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総合スコア9369
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月に公開されました。筆者の金床さんはウェブのセキュリティ分野ではとても高名な方です。
結論としては、攻撃の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年の有罪判決を受け投獄される。
上記でもわかるように、1994年の事例でして、今はこの「シーケンス番号が予測可能な既知の脆弱性」は解消されています。
ご質問はウェブ、すなわちTCP/IPを前提にしていると思いますので、IPアドレス偽装は不可能と考えて良いと思います。
投稿2018/12/27 04:43
編集2018/12/27 04:58総合スコア11705
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
以前ある企業のメールシステムで不正ログインを試しているIPからのアクセスをiptablesで自動制限、解除する仕組みを作ったことがあります。
アプリケーションで制限するよりサーバへの負荷が少ないのでオススメです。
1IPで1アクセスのみの不正アクセスがあることもあるので普段アクセスのある国からのIPからのアクセスでない場合はアクセスを拒否したり、
二段階認証したり、色々対策はあるかと思います。
投稿2018/12/26 17:32
総合スコア2840
0
本来実施したいことは、悪意のあるトラフィックからウェブアプリケーションを保護することかと思います。
特定のIPアドレスからのアクセスをブロックする方法
については、ファイアウォール、ウェブレイヤー、アプリレイヤーでIPアドレスまたはCIDR指定でブロックすれば良いです。
悪意のあるトラフィックからウェブアプリケーションを保護するにはWAFの導入をおすすめ致します。
クラウド型WAF、アプライアンス型WAFとありますが、クラウド型が割とコストを抑え、簡単に導入可能です。
投稿2018/12/27 06:00
編集2018/12/27 06:01総合スコア6621
0
特定のIPアドレスからのアクセスをブロックする方法につきまして。
いろいろな箇所で実現できます。
・FW
・IPS/IDS
・WAF
・ロードバランサー
・Web サーバ
・アプリケーション
実装の容易さから判断すると、php での実装はそれほど間違っていません。
*パフォーマンス的には間違っていますw
受け取った ip アドレスで処理を分けるだけなので、コードもシンプルに書けると思います。
ただ、以下の質問は非常に回答が難しいです。
悪質なユーザーのブロック対策を、どのようにすればよいかわからず、質問させて頂きました。
これは、
・攻撃の手法の研究
・自身のアプリケーションへのアクセス特性の把握
といったものを行い、セキュリティ設計を行わなければなりません。
セキュリティ設計の内容が外部に出てくることは稀であり、実際の現場で使われているものは、基本的に秘匿されます。
本気で検討するのであれば、情報の集まっているコンサル屋さんに頼む必要があります。
個人的には簡易なものを導入した上で、攻撃手法を研究し都度追加実装していくことが良いのではないかと思います。
投稿2018/12/27 05:48

退会済みユーザー
総合スコア0
0
ルーターの電源を入れなおす
DDoSなどでググり、関連情報とともに対策方法を調査すると良いかと思います。
サービスを持続的に運用するために、単なるブロックだけで済む世界ではなくなっていて、
不審アクセスを全てブロックしていたら、不正アクセスでないアクセスに影響してしまう可能性もあり、
不正アクセス者の嫌がらせやサービス停止といった目的を半ば達成させてしまうことになります。
特定のIPアドレスからのアクセスをブロック
ただ、単に技術的にタイトル通りの知識をとのことであれば、既に回答が出ている通りファイアウォール
について調査されることをお勧め致します。
どのようなお立場かわかりませんし、提供しているサービス規模などにもよりますが、
DDoS対策サービスを提供している事業者もありますので、相談してみてもよろしいかと思います。
監視コストを自前でもつか、など兼ね合いかと思いますので。
投稿2018/12/27 02:04
総合スコア5488
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/27 07:43