サーバーをセットアップするための非常に興味深い非標準のタスクが頻繁に寄せられます。
たとえば、今日、特定の国からのトラフィックをフィルタリングするために多数のサーバーを構成するように求められました。 この保護には多くの理由があります-スパムと攻撃の削減、比率の均等化など。
私の場合、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.zipunzip 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を開始する前に一時停止の形で。