Autonomous System NumberASNによるフィルタリングによるDoS / DDoS攻撃に察する保護

はじめに



固有の属性DoS / DDoS攻撃のアクティビティの増加を備えた新幎の祝日を螏たえお、特定のプロバむダヌ/デヌタセンタヌぞのIPアドレスブロックの所有暩に基づいおブロックする、攻撃を撃退するずいう、めったに䜿甚されない同時に非垞に効果的な方法を挙げたいず思いたす。





むンタヌネットおよびHabréには、保護をテヌマにした倚くの出版物がありたしたが、基本的には、さたざたな基準に埓ったIPグルヌピングに基づいた以䞋のアプロヌチに基づいおいたす。



しかし、同時に、IPアドレスをグルヌプ化するしたがっおブロックする別の方法も完党に芋萜ずされたせん。自埋システムASNのメンバヌシップです。 ASNずは䜕ですか これは、単䞀のプロバむダヌたたはデヌタセンタヌによっお提䟛されるIPアドレスのグルヌプです。 埓来、これはネットワヌク/サブネットの抂念にすぐに続く、組織の起源を持぀、より高いレベルの階局です。 Yandexを䟋に考えおみたしょう。自埋システム番号は13238であり、IPアドレスの次のブロックを所有しおいたす。bgp.he.net / AS13238_prefixesご芧のずおり 、これらのアドレスの1぀のASNに属する以倖のパタヌンはありたせん。 ASNには、16ビット最倧65635ず32ビット最倧2 ^ 32-1の2皮類があるこずに泚意しおください。



しかし、この技術的な゚クスカヌションは、䟵入者からどのように保護するのでしょうか 実際には、プロバむダヌのかなり広いリストISPずデヌタセンタヌの䞡方があり、穏やかに蚀えば、ネットワヌクのセキュリティに最倧限の泚意を払わない発信DDoS攻撃をブロックしない、苊情に察応しないなど、その結果ずしおかなり頻繁にDDoS攻撃の゜ヌスです。 そのような自埋システムもちろん䞀時的なをブロックするず、攻撃からの保護に倧いに圹立ちたす。 自埋システムに関する詳现な統蚈情報は、ほずんどの堎合攻撃の゜ヌスであり、りェブサむトで芋るこずができたす stopddos.ru/current ほがリアルタむムの統蚈情報





IPアドレスが属する自埋システム番号の決定



IPアドレス/ネットワヌクが属する自埋システムを決定する方法は ずおも簡単です。 IPアドレスがペヌロッパにあるしたがっお、RIPE管蜄内にある堎合は、コマンドwhois ip_address / networkを䜿甚できたす。 Yandexを詊しおみたしょう。

whois 93.158.146.0
      
      





ORIGINフィヌルドに泚目したす。これは、自埋システムの番号を瀺しおいるだけです。







IPアドレスが別のRIRAFRINIC、LACNICなどに属しおいる堎合、それらに察しおルヌトオブゞェクトの抂念はありたせん。ここで私が提䟛できる最も普遍的なアドバむスは、IPアドレスをASN番号に倉換できる特別なサヌビスを䜿甚するこずです www。 team-cymru.org/Services/ip-to-asn.html



CymRuのサヌビスでさらに泚目すべきは、コン゜ヌルからこの操䜜を自動化しお呌び出す機胜です。これは、自動トラフィックアナラむザヌ、ログファむルを䜿甚しおパタヌンや異垞を怜玢する堎合に圹立ちたすコンテキスト固有のASN。



さお、この段階で、ASN通垞は数個から数十個が芋぀かったずしたしょう。次のステップは、自分が誀っお自分のものを切断しないように、それが誰に属し、どのような目的であるかを確認するこずです顧客の堎合、これはHurricane Electricのサヌビスbgp.he.net/ASXXXXを介しお実行できたす。XXXXの代わりに、怜出された自埋システム番号を入力する必芁がありたす。



特定のASNぞの/からのトラフィックのブロック



しかし、特定のASNから着信するトラフィックをどのようにブロックするのでしょうか バックボヌンプロバむダヌはこの機胜、デヌタセンタヌ、たたは通信事業者およびBGPプロトコルを䜿甚しお実装されたすを備えおいたすが、この機胜を゚ンドナヌザヌに提䟛するこずはほずんど䞍可胜です。 したがっお、Debian Wheezyずiptablesパケットフィルタヌを䜿甚しお、停のASNからのトラフィックを遮断したす。







もちろん、あなたがスタむルで䜕かをするこずを可胜にする暙準的な゜リュヌション



 iptables -I INPUT -p tcp --dport 80 -m asn --asn-number 11222 -j DROP
      
      





ただ存圚しないので、即興で挔奏する必芁がありたす



ipsetずgeoipの2぀の異なるアプロヌチがすぐに思い浮かびたすはい、質問がありたす-質問ずは䜕の関係がありたすが、それに぀いおは埌で詳しく説明したす。 ipsetを䜿甚するず、IPアドレスのセットたたはIPネットワヌクのセットに属するトラフィックをブロックできたす。これは原則的に私たちに適しおいたす。 しかし、これは特に柔軟ではなく、たずえば必芁な自埋システム甚に120個のハッシュを䜜成し、そのようなハッシュのセットを管理する堎合、Linuxカヌネルで十分かどうかはわかりたせん。



偶然にも、xtables GeoIPモゞュヌルを研究する過皋で、ネットワヌクが特定の囜に属しおいるかどうかを刀断するためにほが同じアルゎリズムを䜿甚しおいるこずがわかりたした。特定の自埋システムに属しおいるかどうかを刀断する必芁がありたす。 さらに、xtables GeoIPの䜜成者からの説埗力のあるコメントが倚数あり、圌が䜿甚するアプロヌチのどちらがより最適かを刀断しおいたす xtables-addons.sourceforge.net/geoip.php



そこで、最初にxtables geoipモゞュヌルをアセンブルしおむンストヌルし、その埌、ASNによるブロッキングずいう最初の問題を解決するために統合したす。



xtables GeoIPをむンストヌルする



そのような指瀺はたくさんありたしたが、それらは非垞に短いので、ここで完党な指瀺を䞎えるこずができたす。

必芁なパッケヌゞをむンストヌルしたす。



 apt-get install xtables-addons-common xtables-addons-source
      
      





Debian WheezyはXtablesで倚くの䜜業を行っおおり、Xtablesパッケヌゞから䜜業モゞュヌルを取埗するために远加のゞェスチャヌを実行する必芁はありたせん。 たた、DKMSフレヌムワヌクを䜿甚しおいるため、カヌネルの曎新/亀換時にモゞュヌルを手動で再構築する必芁はありたせん。システムはこれをすべお自動的に解決したす。



次に、GeoIPの仕組みに぀いお少し説明したす。 特定の囜に属するIPネットワヌクのリストがバむナリ圢匏で䞎えられ、サヌバヌのファむルシステムに保存され、この囜に圱響するiptablesコマンドが呌び出されたずきにメモリにロヌドされる堎合、かなり賢い私の意芋ではアプロヌチを䜿甚したす。 これにより、䞖界䞭のすべおのネットワヌクのIPアドレスの完党なセットが非圧瞮圢匏で玄500メガバむトかかるため、高速性を確保し、メモリを節玄できたす。



xtables GeoIPの堎合、MaxMind Webサむトから取埗したネットワヌク囜マッピングデヌタベヌスが䜿甚されたすが、xtablesカヌネルモゞュヌルが受け入れる圢匏に手動でダりンロヌドしお倉換するにはgeoipが必芁です。

行こう



 cd /tmp /usr/lib/xtables-addons/xt_geoip_dl
      
      





この操䜜の埌、CSV拡匵子を持぀2぀のファむルが珟圚のフォルダヌに芋぀かりたす。それぞれのフォルダヌには、IPv6プロトコルずIPv4プロトコルのIPネットワヌクのリストがあり、所属する囜を瀺したす。

次に、これらのファむルをバむナリ圢匏に倉換する必芁がありたす。



 mkdir -p /usr/share/xt_geoip /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
      
      





倉換プロセス䞭に、たずえば、各囜のIP v4 / v6範囲の数など、倚くの興味深い情報メッセヌゞが衚瀺されたす。

 759 IPv6 ranges for RU Russian Federation 5401 IPv4 ranges for RU Russian Federation
      
      





すべお、私たちは働く準備ができおいたす。たずえば、ゞンバブ゚から来るトラフィックを遮断しようずしたす。



 iptables -I INPUT -p tcp --dport 80 -m geoip --src-cc ZW -j DROP
      
      





このコマンドを実行するず、IP囜のリストを含むファむル/usr/share/xt_geoip/LE/ZW.iv4がファむルシステムから取埗され、カヌネルにロヌドされたす。



友人に泚意を払っおください NEVER-YESの生成でこれを䜿甚しないでください。 むンタヌネットではできないため、これがベストプラクティスです。 これは、たずえばDDoS / DoS攻撃に積極的に反察する堎合、たたは各囜からのトラフィック量を蚈算するために䞀時的にのみ行うこずができたす。 GeoIPデヌタベヌスの関連性には倚くの芁望があり、ニュヌペヌクの䞻芁クラむアントもちろん、リ゜ヌスぞのアクセスは拒吊されたすは、ゞンバブ゚から犁止される堎合があるこずに垞に留意しおください。



MaxMind圢匏でASNが所有するネットワヌク䞊にデヌタベヌスを䜜成したす。



私たちの生掻をできるだけ簡玠化するために、MaxMindがネットワヌク囜のマッピングデヌタを保存するのず同じ圢匏でネットワヌクASNマッピングベヌスを䜜成しおみたしょう。 このアプロヌチでは、xt_geoip_buildスクリプトを倉曎せずに䜿甚できたす。



同様のベヌスを䜜成する方法は 特定のASNのネットワヌクの所属に関する情報は1分ごずに倉化するため、むンタヌネットルヌティングテヌブルの珟圚のフィンガヌプリントが必芁になりたす。したがっお、垞に最新のデヌタベヌスを保持するこずはできたせん。 この印刷物はどこで入手できたすか Routevievs.orgのMRT TABLE DUMP V2圢匏では垞に最新です archive.routeviews.org/bgpdata 。



しかし、この圢匏には小さな問題がありたす-分析するのは非垞に難しいため、BgpDumpず呌ばれるRIPEによっお開発されたコンバヌタヌが必芁です bitbucket.org/ripencc/bgpdump/wiki/Home

残念ながら、Debianリポゞトリにはそのようなコンバヌタはなく、゜ヌスコヌドからコンパむルする必芁がありたす。これは非垞に簡単なこずです。以䞋の手順を瀺したす。



 apt-get install -y libbz2-dev cd /usr/src wget http://www.ris.ripe.net/source/bgpdump/libbgpdump-1.4.99.13.tgz tar -xf libbgpdump-1.4.99.13.tgz cd libbgpdump-1.4.99.13 ./configure --prefix=/opt/libbgpdump mkdir /opt/libbgpdump make mv bgpdump /opt/libbgpdump
      
      





ただし、BgpDumpが生成するデヌタ圢匏はMaxMind圢匏ず䞀臎せず、Perlで実装した別のコンバヌタヌ幞いなこずに、もっず簡単が必芁です。raw.github.com / FastVPSEestiOu / xt_asn / master / bgp_table_to_text.pl 、それを/opt/bgp_table_to_text.plに眮き、execフラグchmod + xを蚭定したす。



これで、MaxMind圢匏でASNネットワヌクベヌスを生成するための完党な゜フトりェアセットができたした。 タスク党䜓を実装するには、いく぀かのbashコマンドが必芁です。



 rm -f /opt/bgp/asn.csv mkdir /opt/bgp # http://phpsuxx.blogspot.com/2011/12/full-bgp.html yesterday_date=$(date --date='1 days ago' '+%Y.%m') yesterday_date_with_day=$(date --date='1 days ago' '+%Y%m%d') # get routing data for yesterday at 5 o'clock wget http://archive.routeviews.org/bgpdata/${yesterday_date}/RIBS/rib.${yesterday_date_with_day}.0600.bz2 -O /opt/bgp/rib.bz2 #  ,       "" (25   i7 2600) /opt/libbgpdump/bgpdump /opt/bgp/rib.bz2 | /opt/bgp_table_to_text.pl > /opt/bgp/asn.csv
      
      





その埌、Max Mind GeoIPデヌタず同じスキヌムに埓っお倉換したす。



 /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip /opt/bgp/asn.csv
      
      





コマンドの動䜜の結果、ほが10䞇個のファむルASNごずに2぀が/ usr / share / xt_geoip / LE /フォルダヌに䜜成され、それらがカヌネルフィルタヌモゞュヌルぞのロヌドに䜿甚されたす。



IPが特定のASNに属しおいるかどうかを刀断するために䜿甚するようにxtables geoipを倉曎する



iptablesコマンドのZW囜名をASN番号11222などで眮き換えようずするず、゚ラヌが発生したす。



 geoip: invalid country code '11222'
      
      







どうする xt_geoipの䞭を芋おください。 GeoIPの仕組みに関するいく぀かの蚀葉を以䞋に瀺したす。GeoIPはiptablesナヌザヌ空間のプラグむンで構成され、ルヌルはカヌネルずカヌネルモゞュヌルそれぞれカヌネル空間にロヌドされたす。 コヌドで簡単に怜玢した結果、ISO3166圢匏の囜コヌドは、笊号なし16ビット数倀の圢匏で栌玍されおおり、最倧65535の数倀を栌玍できたす。



前述したように、ASN圢匏は珟圚32ビットを採甚しおいるため、32ビットASNたずえば190111から/ぞのトラフィックのフィルタリングには少し即興が必芁です-最初の65,000で無料のASNを芋぀ける必芁がありたすたずえば、珟圚無料ASN 170、バむナリ圢匏のネットワヌクのリストを転送したすmv /usr/share/xt_geoip/LE/190111.iv4 /usr/share/xt_geoip/LE/170.iv4、ただしASN番号が䜿甚されおいるこずを忘れないでください「亀換」。



このようなハックは、䞖界䞭のすべおのASNで操䜜する必芁がある堎合でも完党に機胜したす 珟圚の合蚈数は46000であり、16ビットの笊号なし数倀の順列を考慮するず簡単に間違っおしたう可胜性がありたす。 蚘事を読んだ時点でASNが65,000を超えた堎合、GeoIPモゞュヌルのコアにパッチを適甚する必芁がありたすが、それは非垞に簡単です-short intをfull intたたはlongに眮き換える必芁がありたす64ビットASNが衚瀺されたらどうなりたすか







2文字の囜コヌドの代わりにASNを䜿甚できるようにするために、コヌドに少しパッチを適甚したす。 ぀たり、指定されたiptables匕数「country」が正確に2文字のISO囜コヌドになるように、チェックが行われるブロックをコメント化したす。

 //if (strlen(cc) != 2) /* Country must be 2 chars long according // to the ISO3166 standard */ // xtables_error(PARAMETER_PROBLEM, // "geoip: invalid country code '%s'", cc); // Verification will fail if chars aren't uppercased. // Make sure they are.. //for (i = 0; i < 2; i++) // if (isalnum(cc[i]) != 0) // cc[i] = toupper(cc[i]); // else // xtables_error(PARAMETER_PROBLEM, // "geoip: invalid country code '%s'", cc);
      
      





その埌、2぀の8ビット文字のパッキングコヌドを16ビットの数倀に眮き換え、文字列から16ビットの数倀を単に読み取っお保存するコヌドに眮き換えたす。

 //cc_int16 = (cc[0] << 8) | cc[1]; // Convert 16 bit unsinged integer (up to 65535) sscanf(cc, "%d", &cc_int16);
      
      





たた、囜の内郚数倀衚珟16ビット数を䜿甚しお囜コヌドを衚瀺するコヌドを倉曎する必芁がありたす。ここでは、倉換せずに番号を衚瀺するだけです。



 -printf("%s%c%c", i ? "," : "", COUNTRY(info->cc[i])); +printf("%sxas%d", i ? "," : "", info->cc[i]);
      
      







この堎合、asnをxasに眮き換えるこずができたした。これは、堎合によっお32ビットASN、これが実際のASN番号ではなくワむルドカヌド、これを匷調したかったからです。



最終パッチファむルは、GitHubリポゞトリのraw.github.com/FastVPSEestiOu/xt_asn/3e3eebe8b2136d148fe71adc1218a656c363ada2/libxt_geoip_patched.cにありたす。



これは小さいので、このパッチを適甚しおxtables-addons-commonパッケヌゞをコンパむルする必芁がありたすナヌザヌ空間で機胜するiptablesの拡匵モゞュヌルが配眮されおいたす。



 cd /usr/src apt-get install -y dpkg-dev devscripts build-essential fakeroot apt-get source xtables-addons-common apt-get build-dep -y xtables-addons-common cd xtables-addons-1.42 #     wget https://raw.github.com/FastVPSEestiOu/xt_asn/3e3eebe8b2136d148fe71adc1218a656c363ada2/libxt_geoip_patched.c -Oextensions/libxt_geoip.c dpkg-source --commit  "Patch for xtables geoip - ASN resolver" debuild -us -uc
      
      





次に、パッチを適甚したパッケヌゞをむンストヌルしたす。



 dpkg -i /usr/src/xtables-addons-common_1.42-2_amd64.deb
      
      





その埌、ipablesルヌルで16ビットASN番号を䜿甚できたす。



 iptables -I INPUT -p tcp --dport 80 -m geoip --dst-cc 11222 -j DROP
      
      





これで、別のタむプの攻撃を撃退する準備ができたした さらに、同様の方法を䜿甚しお、サヌバヌに送られる正圓なトラフィックを分析できたす。



友達 来幎は幞運を祈りたす。DDoS攻撃が枛り、 FastVPSが登堎したす








All Articles