web-dev-qa-db-ja.com

特定の国からのすべてのトラフィックをブロックする比較的簡単な方法は?

私はフィリピンにユーザーがいないWebアプリを持っていますが、スパマー、カーダーテストカード、およびその他の望ましくないアクティビティによってフィリピンから常に攻撃されています。ログにフィリピンでIPがあり、google.phまたは他の.phサイト経由で私のサイトを最初に見つけていることがわかります。

かなり良いフィルターとセキュリティチェックを実施しているので、それらはそれほど大きなダメージを与えませんが、それにもかかわらず、私は本当に飽きています。彼らは帯域幅を使い果たし、私のデータベースをいっぱいにし、ログを乱用し、セキュリティログをがらくたにしたり、アカウントと呼ばれる時間を無駄にしたりします。

フィリピンの市民の大多数はスパマーではなく、私を困らせるすべての国をブロックすることはできませんが、現時点では、解決策は単にフィリピンから私のWebアプリケーションへのすべてのトラフィックをブロックすることだと思います。 (私は、国全体のIPブロックをブロックすることは良い習慣ではなく、多くの問題があることを知っていますが、この国では例外を作りたいと思います。)

(私は彼らが彼らのIPアドレスを偽装することができることを知っています、しかし少なくとも私はそれらをそれのために少し動作させることができます。)

私はいくつかのgeoipサービスがあることを知っています。無料または安価なサービスを知っている人はいますか?または、特定の国からのトラフィックを除外する他の方法?

必要に応じて、Apache 2でPHPを実行しています。

16
Eli

IPInfoDB http://ipinfodb.com/index.phpのような無料のIP Location APIを使用して、IPアドレスに基づいてこれを行うことができます。

8
Zachary

ここにある他のほとんどのポスターとは異なり、これは悪い考えである、あなたがそれをしてはいけない、それがあなたの問題を解決しない、またはあなたが何か他のことをするべきであるとは言いません。これが私たちに起こったことです:

中国と韓国からの個人(または中国と韓国でプロキシを使用している)は、私たちを苛立たせ続けました。ポートスキャン、脆弱性を探すウェブサイトのクロール、ログイン試行など。私はそれらを無視しようとしましたが(fail2banは通常それらを処理します)、ある時点で、彼らは私たちを攻撃し、DoS攻撃に効果的になりました。ウェブサーバーをプロキシとして使用しようとしたり、マシンにSSH接続したり、ランダムなユーザー名やパスワードを使用したりすることで、何百もの接続が同時に発生すると、サイトの負荷が大きくなる傾向があります。私は結局うんざりしました。

中国や韓国からの合法的なトラフィックはありません。私たちの会社はそこで販売していません(私たちはeコマースです)ため、正当なトラフィックを失うリスクはありませんでした。そのため、ディックになるのを待つよりも、事前にブロックする方が簡単だと思いました。

  1. http://ip.ludost.net/ にアクセスし、IP <-> countryデータベースをダウンロードしました。
  2. 中国語と韓国語のIPアドレス範囲をすべて抽出しました。
  3. インストール済み netfilterのipsetモジュール
  4. 中国と韓国向けのipsetダンプを構築(下記参照)
  5. それらのセットからトラフィックをサイレントにドロップするルールをiptablesに追加しました。

以上です。問題のあるユーザーが立ち去り、ネットワークとサーバーへの負荷が減り、クリスマスシーズンを無事に乗り切りました。

注1:通常のiptablesを使用して(つまり、ipsetを使用せずに)実行できますが、ipsetを使用するよりも計算コストが高くなります。

注2:これはダンプの外観です(必要に応じてipsetがこれらを生成します):

# Generated by ipset 2.3.3 on Sat Oct  4 18:02:57 2008
-N china nethash --hashsize 5184 --probes 4 --resize 50
-A china 203.207.128.0/17
-A china 221.176.0.0/13
-A china 58.154.0.0/15
-A china 114.54.0.0/15
...etc...

注3:すべての範囲がCIDRブロックとして格納されるため、ネットハッシュを使用します。それらをCIDRに変換したくない場合は、代わりにiptreemapを使用できますが、大量のトラフィックを取得している場合は、効率が低下する可能性があります。

28
Dan Udey

コードのバグをどのように修正しますか?

そのようです?

バグ:Add(2,2)は0を返し、4を返す必要があります。

修正されたコード:

int Add(int x, int y)
{
   if (x == 2 && y == 2)
      { return 4; }
   return 0;
}

明らかにそうではありません。あなたは、非常に壊れやすく、災害のレシピである、特別なケースのぐちゃぐちゃな怪物を作成するだけではありません。また、根本的な問題のTODAYの症状にパッチを当てるだけではありません。

代わりに、根本的な原因を突き止めて修正します。これは、実装可能なハックな特別な場合のパッチよりもはるかに堅牢です。

Webアプリがスパムに対して脆弱なのはなぜですか?どのような特徴により脆弱になりますか?どんな特徴がそれを価値ある目標にしているのですか?これらの特性を変更して、アプリをスパムに対してより堅牢にし、魅力的なターゲットを少なくする方法はありますか?ほぼ間違いなく、これらの質問に対する答えはイエスです。フォームに検証チェーンを追加し、CAPTCHAをインテリジェントに使用し、URLやパラメーター名をランダム化して、ボットにとって扱いにくくします。この問題に対処するには何百万もの方法があります。残念ながら、最も価値が低く、最も有用でなく、最も壊れやすいソリューションの1つを選択したとは言えません。

2
Wedge

まず、これを行わないことを強くお勧めします。

他の人がはるかに雄弁に述べているように、特定の国をブロックしても問題は解決せず、わずかに延期されるだけです。また、その国のユーザーがあなたがブロックしているそれらを明確に見た場合、それは彼らにあなたを引き起こすように動機づけるだけです moreの問題。

つまり、本当にこれを実行したい場合、 IPinfoDB は無料のIPジオロケーションデータベースを提供し、

まず、国ごとにIPを特定することです。

次のように検索します。

SELECT * FROM `ip_group_country` where `ip_start` <= INET_ATON('74.125.45.100') order by ip_start desc limit 1;

または

SELECT * FROM `ip_group_country` where `ip_start` <= 1249717504 order by ip_start desc limit 1;

次に、特定の国のIPを取得して、iptable、htaccessファイル、または使用しているものでブロックリストを生成することができます。これは次のように行われます。

SELECT `ip_cidr` FROM `ip_group_country` WHERE `country_code` = 'AF' order by ip_start;

それはあなたに与えるでしょう:

63.243.149.0/24
67.212.160.0/24
1
dbr

あなたはevery自分自身に正当化できるあらゆる理由からIPアドレスをブロックする権利を持っています。サービスを提供するのはあなたであり、誰がそれを利用できるかを決定するのはあなたです。これが道徳的であるかどうかは疑わしいかもしれませんが、それはあなた自身だけが決めることができるものです。

ただし、IPセグメントには地理的な側面があるため、IPセグメントをブロックすると、多かれ少なかれパニックアプローチのように聞こえます。

私が過去にやったことは、クローラーに私の最新のログを調べさせ、その禁止に基づいて、24時間にわたって煩わしい個々のIPを禁止することです。その特定のIPが再び正しく動作しない場合、2日間禁止され、その後3日間など、ドリフトが発生します。

1週間以上禁止されているIPが私に郵送され、私はそのサービスプロバイダーに悪用メールを送信します(サービスプロバイダーが助けになることを知っています)。

0

Fail2banのような製品を使用して、スパムの試みが進行中であることを示すWebアプリケーションにスローするエラーをキーオフする必要があります。これにより、一定期間IPがブロックされ、サイトの耐性が高まりますが、IPブロック全体が完全にブロックされるわけではありません。

0
Kevin Kuphal

いくつかの解決策:

  • mod_access を使用してApache構成の一部のIPを除外します
  • apacheから直接GeoIpを使用: http://www.maxmind.com/app/mod_geoip
  • Linuxから一部のIPを除外 iptables を直接。これは、リモートアクセスのみを持っている場合はより危険です。マシンから自分をロックすることができます。
  • geoip + iptables

これらのソリューションは非常に簡単で迅速に導入でき、無料です。

より長期的な解決策は、Webアプリケーションからスパムを検出し、IPをログに記録し、iptablesにフィードしてそれらを自動的にブロックすることです。

0
Julien

私は、このようなものを動的に維持できるSnort + OSSECソリューションを選択します。

0
GNUix

攻撃されているネットワークを操作している人物を見つけることを検討しましたか? whoisを使用して「乱用」連絡先を見つけ、それらに報告します。もちろん、それはいくつかのネットワークから来るかもしれませんが、いくつかの繰り返しのアドレス/ネットワークブロックを見るならそれも価値があるかもしれません。

0
MatthieuP