不要な国からの訪問者からサーバーを保護する方法

サーバーをセットアップするための非常に興味深い非標準のタスクが頻繁に寄せられます。



たとえば、今日、特定の国からのトラフィックをフィルタリングするために多数のサーバーを構成するように求められました。 この保護には多くの理由があります-スパムと攻撃の削減、比率の均等化など。



私の場合、CNを完全にブロックし、完全なチャネルをRUに割り当て、半分を他の国に与える必要がありました。



もちろん、すべてのサブネットを手で完全に駆動するのは不便であり、頻繁に変更されます。 最も論理的なことは、geoipでこれを行うことでした。



最も効果的なのはもちろん、geoipをコアに固定することです。 私の場合、サーバー上にDebianがあったので、そのためのレシピを持ってきました。



まず、ソースをダウンロードします


apt-get install linux-source-2.6.18

tar xjf /usr/src/linux-source-2.6.18.tar.bz2 -C /usr/src/

apt-get source iptables

wget people.netfilter.org/peejix/patchlets/geoip.tar.gz

wget ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20070414.tar.bz2

tar xjf patch-o-matic-ng-20070414.tar.bz2

tar xzf geoip.tar.gz -C patch-o-matic-ng-20070414/patchlets/








今、私たちは収集します


cd patch-o-matic-ng-20070407/

KERNEL_DIR=/usr/src/linux-source-2.6.18/ ./runme geoip








はいと言って出発します。 まだ設定していない場合は、アセンブリに必要なすべてのものを配置します。



apt-get install build-essential







現在のカーネル構成をコピーした後、変更を加えるだけです。



cd /usr/src/linux-source-2.6.18/

make oldconfig






geoip一致サポート(IP_NF_MATCH_GEOIP)[N / m /?](新規)



ここでは、モジュールをビルドするために「m」と発声する必要があります。 次に:



make modules_prepare

cp net/ipv4/netfilter/ipt_geoip.ko /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/

depmod

modprobe ipt_geoip

echo "ipt_geoip" >> /etc/modules








同様に、iptablesのライブラリを構築します。



make KERNEL_DIR=/usr/src/linux-source-2.6.18/ extensions/libipt_geoip.so

cp extensions/libipt_geoip.so /lib/iptables/








最小-GeoIPベース


準備するには、無料のデータベースをダウンロードする必要がありますが、有料のオプションを使用することをお勧めします-より正確です。 いずれにせよ、データベースの準備は、収集する必要があるcsv2binの助けを借りて行われます。



wget people.netfilter.org/peejix/geoip/tools/csv2bin-20041103.tar.gz

tar xzf csv2bin-20041103.tar.gz

cd csv2bin/

make








実際、無料版のデータベースを変換します:

wget www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip



unzip GeoIPCountryCSV.zip

./csv2bin ../GeoIPCountryWhois.csv








/ var / geoipにスローされるべきgeoipdb.binとgeoipdb.idxの2つのファイルがあります。



mkdir /var/geoip

mv geoipdb.* /var/geoip/








その後、次のようにmod_geoipを使用できます。



iptables -A INPUT -p tcp --dport 80 -m geoip --src-cc CN -j REJECT







CNでトラフィックをドロップします。 TCを使用して車線をマークおよび変更することもできます。



アプリケーションのオプション:NGINX



カーネルやVDSを構築する予定がない場合は、mod_geoipを使用してフロントエンドにnginxを配置することにより、ほぼすべてを実行できます。 まず、nginxがmod_goipサポートでコンパイルされていることを確認してください。 彼は私と一緒に立ちましたが、再組み立てする必要はありませんでしたが、難しくはありません。



データベース自体は、geo2nginx.plを使用して変換する必要があり(nginxソースと共にアーカイブ内にあります)、構成にドロップする必要があります。



perl geo2nginx.pl < GeoIPCountryWhois.csv > geo.conf

cp geo.conf /etc/nginx/








蒸しカブを使用する方が簡単です:

geo $国{

デフォルトno;

/etc/nginx/geo.confを含めます。

127.0.0.0/24 ru;

}

CNトラフィックの例:

if ($country ~* cn )

{

rewrite ^(.*)$ baidu.com/;

}








いつものように、クイックフィックスには常にマイナスがあります。この場合、データベースはメモリに読み込まれるため、nginxを開始する前に一時停止の形で。



All Articles