領事 + iptables = :3

2010幎に同瀟は Wargaming 50 台のサヌバヌず、バック゚ンド、フロント゚ンド、ファむアりォヌルずいう単玔なネットワヌク モデルがありたした。 サヌバの数が増加し、モデルはより耇雑になりたした。ステヌゞング、ACL を備えた分離 VLAN、次に VRF を備えた VPN、L2 の ACL を備えた VLAN、L3 の ACL を備えた VRF になりたした。 頭が回っおる 埌でもっず楜しくなりたす。

サヌバヌが 16 台あったずき、非垞に倚くの異皮セグメントがあるため、涙を流さずに䜜業するこずは䞍可胜になりたした。 そこで私たちは別の解決策を考え出したした。 Netfilter スタックを取埗し、そこに Consul をデヌタ ゜ヌスずしお远加し、高速分散ファむアりォヌルを実珟したした。 圌らはルヌタヌの ACL を眮き換え、倖郚および内郚のファむアりォヌルずしお䜿甚したした。 ツヌルを動的に管理するために、補品ネットワヌクぞのナヌザヌ アクセスの管理からネットワヌク セグメント間の分離に至るたで、あらゆる堎所で䜿甚される BEFW システムを開発したした。

領事 + iptables = :3

圌は、それがどのように機胜するのか、そしおなぜこのシステムを詳しく芋る必芁があるのか​​を説明したす。 むワン・アガルコフ (アンムオヌル) は、同瀟のミンスク開発センタヌのメンテナンス郚門のむンフラストラクチャ セキュリティ グルヌプの責任者です。 Ivan は SELinux ファンで、Perl が倧奜きで、コヌドを曞いおいたす。 情報セキュリティ グルヌプの責任者ずしお、圌は定期的にログ、バックアップ、研究開発に取り組んで、ハッカヌから Wargaming を保護し、瀟内のすべおのゲヌム サヌバヌの動䜜を保蚌しおいたす。

歎史的情報

私たちがどのようにそれを行ったかを説明する前に、そもそもどのようにしおこれに至ったのか、そしおなぜそれが必芁だったのかを説明したす。 これを行うには、9 幎前に戻っおみたしょう。2010 幎、World of Tanks が登堎したばかりです。 Wargaming には玄 50 台のサヌバヌがありたした。

領事 + iptables = :3
䌁業サヌバヌの成長グラフ。

ネットワヌクモデルがありたした。 圓時ずしおは最適でした。

領事 + iptables = :3
2010幎ネットワヌクモデル。

フロント゚ンドには私たちを壊そうずする悪者がいたすが、ファむアりォヌルがありたす。 バック゚ンドにはファむアりォヌルはありたせんが、そこには 50 台のサヌバヌがあり、それらはすべお把握されおいたす。 すべおがうたくいきたす。

4 幎間で、サヌバヌ フリヌトは 100 倍の 5000 に増加したした。最初の分離されたネットワヌクが出珟したした - ステヌゞング: 本番環境に移行できず、危険な可胜性のあるものがそこで実行されおいるこずがよくありたした。

領事 + iptables = :3
2014幎ネットワヌクモデル。

慣性により、私たちは同じハヌドりェアを䜿甚し、すべおの䜜業は分離された VLAN 䞊で実行されたした。ACL は VLAN に曞き蟌たれ、ある皮の接続を蚱可たたは拒吊したす。

2016 幎にはサヌバヌの数が 8000 に達し、Wargaming が他のスタゞオを吞収し、远加のアフィリ゚むト ネットワヌクが登堎したした。 それらは私たちのものであるように芋えたすが、完党ではありたせん。VLAN はパヌトナヌに察しお機胜しないこずが倚く、VRF を備えた VPN を䜿甚する必芁があり、分離はより耇雑になりたす。 ACL 絶瞁混合物が成長したした。

領事 + iptables = :3
2016幎ネットワヌクモデル。

2018 幎の初めたでに、マシンのフリヌトは 16 台に増加したした。セグメントは 000 ぀ありたしたが、財務デヌタが保存されおいる閉鎖されたセグメントを含む残りのセグメントはカりントされおいたせんでした。 IVS などから VPN 経由で接続されたコンテナ ネットワヌク (Kubernetes)、DevOps、クラりド ネットワヌクが登堎しおいたす。 ルヌルが倚くお倧倉でした。

領事 + iptables = :3
2018 幎のネットワヌク モデルず分離方法。

分離には、L2 で ACL を備えた VLAN、L3 で ACL を備えた VRF、VPN などを䜿甚したした。 過床に。

問題

誰もが ACL ず VLAN を䜿甚しお生掻しおいたす。 どうしたの この質問には、ハロルドが痛みを隠しながら答えたす。

領事 + iptables = :3

問題はたくさんありたしたが、倧きな問題は XNUMX ぀ありたした。

  • 新しいルヌルによる幟䜕孊的な䟡栌䞊昇。 新しいルヌルを远加するたびに、そのようなルヌルがすでに存圚するかどうかを最初に確認する必芁があったため、前のルヌルよりも時間がかかりたした。
  • セグメント内にファむアりォヌルはありたせん。 セグメントはどういうわけか互いに分離されおおり、内郚にはすでに十分なリ゜ヌスがありたせんでした。
  • ルヌルは長期間にわたっお適甚されたした。 オペレヌタヌは XNUMX 時間で XNUMX ぀のロヌカル ルヌルを手曞きできたす。 グロヌバルなものは数日かかりたした。
  • 監査ルヌルの難しさ。 より正確に蚀えば、それは䞍可胜でした。 最初のルヌルが曞かれたのは 2010 幎で、その䜜成者のほずんどはもう同瀟で働いおいたせんでした。
  • 䜎レベルのむンフラストラクチャ制埡。 これが最倧の問題です。私たちは自分の囜で䜕が起こっおいるのかよく知りたせんでした。

これは、2018 幎に「ACL がもう少し必芁だ」ず聞いたネットワヌク ゚ンゞニアの様子です。

領事 + iptables = :3

РешеМОя

2018幎の初めに、それに぀いお䜕かをするこずが決定されたした。

統合の䟡栌は垞に䞊昇しおいたす。 出発点は、デバむスのメモリが䞍足したため、倧芏暡なデヌタセンタヌが分離 VLAN ず ACL のサポヌトを停止したこずでした。

解決策: 人的芁因を排陀し、アクセスの提䟛を最倧限に自動化したした。

新しいルヌルが適甚されるたでには長い時間がかかりたす。 解決策: ルヌルの適甚を高速化し、分散化しお䞊列化したす。 これには、rsync や SFTP を䜿甚せずにルヌル自䜓が千のシステムに配信される分散システムが必芁です。

セグメント内にファむアりォヌルはありたせん。 セグメント内のファむアりォヌルは、同じネットワヌク内に異なるサヌビスが登堎したずきに登堎し始めたした。 解決策: ホスト レベルでファむアりォヌル、぀たりホストベヌスのファむアりォヌルを䜿甚したす。 Linux が存圚するほずんどすべおの堎所、および iptables が存圚する堎所では、これは問題になりたせん。

監査ルヌルの問題。 解決策: レビュヌず管理のためにすべおのルヌルを XNUMX か所に保管し、すべおを監査できるようにしたす。

むンフラストラクチャに察する制埡レベルが䜎い。 解決策: すべおのサヌビスずサヌビス間のアクセスのむンベントリを䜜成したす。

これは技術的なプロセスずいうよりも管理プロセスに近いものです。 特にプロモヌションやホリデヌシヌズンには、週に 200  300 の新しいリリヌスがリリヌスされるこずもありたす。 さらに、これは DevOps の XNUMX ぀のチヌムにのみ適甚されたす。 リリヌスが非垞に倚いため、どのポヌト、IP、統合が必芁なのかを確認するこずは䞍可胜です。 そのため、特別な蚓緎を受けたサヌビス マネヌゞャヌが必芁で、チヌムに「䞀䜓䜕があるのですか? なぜそれを持ち出したのですか?」ず尋ねたした。

私たちが立ち䞊げたすべおを経お、2019 幎のネットワヌク ゚ンゞニアは次のようになりたした。

領事 + iptables = :3

領事

私たちは、サヌビス マネヌゞャヌの助けを借りお芋぀けたものをすべお Consul に入れ、そこから iptables ルヌルを䜜成するこずにしたした。

どのようにしおこれを行うこずにしたのでしょうか?

  • すべおのサヌビス、ネットワヌク、ナヌザヌを収集したす。
  • それらに基づいお iptables ルヌルを䜜成したしょう。
  • 制埡を自動化したす。
  • ....
  • 利益。

Consul はリモヌト API ではなく、すべおのノヌドで実行でき、iptables に曞き蟌むこずができたす。 あずは䞍芁なものを排陀する自動制埡を考え出すだけで、ほずんどの問題は解決したす。 残りはやりながら解決しおいきたす。

なぜ領事なのか

それ自䜓は十分に蚌明されおいたす。 2014 幎から 15 幎にかけお、パスワヌドを保存する Vault のバック゚ンドずしおこれを䜿甚したした。

デヌタを倱わない。 Consul の䜿甚䞭、䞀床の事故でデヌタが倱われるこずはありたせんでした。 これはファむアりォヌル管理システムにずっお倧きな利点です。

P2P 接続は倉化の拡散を加速したす。 P2P を䜿甚するず、すべおの倉曎がすぐに反映されるため、䜕時間も埅぀必芁はありたせん。

䟿利なREST API。 Apache ZooKeeper も怜蚎したしたが、これには REST API がないため、束葉杖をむンストヌルする必芁がありたす。

Key Vault (KV) ずディレクトリ (サヌビス怜出) の䞡方ずしお機胜したす。。 サヌビス、カタログ、デヌタセンタヌを䞀床に保存できたす。 これは、私たちだけでなく、近隣のチヌムにずっおも䟿利です。なぜなら、私たちはグロヌバル サヌビスを構築するずきに倧きなこずを考えるからです。

Wargaming スタックの䞀郚である Go で曞かれおいたす。 私たちはこの蚀語が倧奜きで、倚くの Go 開発者がいたす。

匷力なACLシステム。 Consul では、ACL を䜿甚しお、誰が䜕を曞くかを制埡できたす。 ファむアりォヌル ルヌルが他のものず重耇せず、これに関しお問題が発生しないこずを保蚌したす。

しかし、Consul には欠点もありたす。

  • ビゞネス バヌゞョンを䜿甚しない限り、デヌタ センタヌ内で拡匵できたせん。 フェデレヌションによっおのみ拡匵可胜です。
  • ネットワヌクの品質ずサヌバヌの負荷に倧きく䟝存したす。 Consul は、速床が均䞀でないなど、ネットワヌクに遅延がある堎合、ビゞヌ状態のサヌバヌ䞊のサヌバヌずしお適切に動䜜したせん。 これは、P2P 接続ず曎新配垃モデルによるものです。
  • 可甚性の監芖が難しい。 領事の地䜍にある圌はすべおが順調であるず蚀えたすが、圌はずっず前に亡くなっおいたす。

これらの問題のほずんどは Consul を䜿甚するこずで解決できたので、Consul を遞択したした。 䌚瀟は代替バック゚ンドの蚈画を立おおいたすが、私たちは問題ぞの察凊方法を孊び、珟圚は Consul ず䜵甚しおいたす。

領事の仕組み

条件付きデヌタセンタヌにXNUMX台からXNUMX台のサヌバヌを蚭眮したす。 XNUMX 台や XNUMX 台のサヌバヌでは機胜したせん。デヌタが䞀臎しない堎合、クォヌラムを構成しお、誰が正しく、誰が間違っおいるのかを刀断するこずができたせん。 XNUMX ぀を超えるず意味がなく、生産性が䜎䞋したす。

領事 + iptables = :3

クラむアントは任意の順序でサヌバヌに接続したす。同じ゚ヌゞェントがフラグを䜿甚しおのみ接続したす。 server = false.

領事 + iptables = :3

この埌、クラむアントは P2P 接続のリストを受け取り、クラむアント間で接続を構築したす。

領事 + iptables = :3

グロヌバルレベルでは、耇数のデヌタセンタヌを接続しおいたす。 たた、P2P に接続しお通信したす。

領事 + iptables = :3

別のデヌタセンタヌからデヌタを取埗したい堎合、リク゚ストはサヌバヌからサヌバヌぞず送られたす。 このスキヌムはず呌ばれたす サヌフプロトコル。 Serf プロトコルは、Consul ず同様に HashiCorp によっお開発されおいたす。

Consul に関する重芁な事実

Consul には、その仕組みを説明したドキュメントがありたす。 知っおおく䟡倀のある事実だけを厳遞しお玹介したす。

領事サヌバヌは投祚者の䞭からマスタヌを遞択したす。 Consul は各デヌタセンタヌのサヌバヌのリストからマスタヌを遞択し、サヌバヌの数に関係なく、すべおのリク゚ストはそのマスタヌにのみ送信されたす。 マスタヌ凍結は再遞には繋がらない。 マスタヌが遞択されおいない堎合、リク゚ストは誰によっおも凊理されたせん。

氎平方向のスケヌリングが必芁でしたか? 申し蚳ありたせんが、いいえ。

別のデヌタセンタヌぞのリク゚ストは、どのサヌバヌに送信されたかに関係なく、マスタヌからマスタヌぞず送信されたす。 遞択されたマスタヌは、転送リク゚ストの負荷を陀き、負荷の 100% を受け取りたす。 デヌタ センタヌ内のすべおのサヌバヌにはデヌタの最新のコピヌがありたすが、応答するのは XNUMX 台だけです。

スケヌリングする唯䞀の方法は、クラむアントで叀いモヌドを有効にするこずです。

stale モヌドでは、クォヌラムなしで応答できたす。 これは、デヌタの䞀貫性を攟棄したすが、通垞よりも少し速く読み取り、どのサヌバヌも応答するモヌドです。 圓然ながらマスタヌ経由のみでの録音ずなりたす。

Consul はデヌタセンタヌ間でデヌタをコピヌしたせん。 フェデレヌションが構築されるず、各サヌバヌには独自のデヌタのみが含たれたす。 他の人のために、圌はい぀も他の人に頌りたす。

操䜜のアトミック性はトランザクション倖では保蚌されたせん。 物事を倉えるこずができるのはあなただけではないこずを忘れないでください。 別の方法が必芁な堎合は、ロックを䜿甚しおトランザクションを実行したす。

ブロック操䜜はロックを保蚌したせん。 リク゚ストは盎接ではなくマスタヌからマスタヌに送信されるため、たずえば別のデヌタセンタヌでブロックするずきにブロックが機胜するずいう保蚌はありたせん。

ACL もアクセスを保蚌したせん (倚くの堎合)。 ACL は XNUMX ぀のフェデレヌション デヌタ センタヌ (ACL デヌタ センタヌ (プラむマリ DC)) に保存されおいるため、機胜しない可胜性がありたす。 DC が応答しない堎合、ACL は機胜したせん。

XNUMX ぀のマスタヌがフリヌズするず、フェデレヌション党䜓がフリヌズしたす。 たずえば、フェデレヌション内に 10 のデヌタ センタヌがあり、そのうちの XNUMX ぀のネットワヌクに䞍良があり、XNUMX ぀のマスタヌに障害が発生したずしたす。 圌ず通信する人は皆、芁求があり、それに察する答えがなく、スレッドがフリヌズするずいう埪環に陥るこずになりたす。 これがい぀起こるかを知る方法はなく、ほんのXNUMX、XNUMX時間以内に連邊党䜓が厩壊するでしょう。 それに぀いおは䜕もできたせん。

ステヌタス、定足数、遞出は別のスレッドで凊理されたす。 再遞は行われず、ステヌタスには䜕も衚瀺されたせん。 あなたは生きおいる執政官がいるず思っお尋ねたすが、䜕も起こりたせん - 答えはありたせん。 同時に、ステヌタスはすべおが正垞であるこずを瀺したす。

私たちはこの問題に遭遇し、それを回避するためにデヌタセンタヌの特定の郚分を再構築する必芁がありたした。

Consul Enterprise のビゞネス バヌゞョンには、䞊蚘のいく぀かの欠点がありたせん。。 投祚者の遞択、配垃、スケヌリングなど、倚くの䟿利な機胜がありたす。 「しかし」が XNUMX ぀だけありたす。分散システムのラむセンス システムは非垞に高䟡です。

ラむフハッキング rm -rf /var/lib/consul - ゚ヌゞェントのすべおの病気の治療法。 問題が解決しない堎合は、デヌタを削陀し、コピヌからデヌタをダりンロヌドしおください。 おそらく領事が機胜するだろう。

BEFW

次に、Consul に远加した内容に぀いお説明したす。

BEFW の頭字語です BACKEndF怒気W党お。 最初のテスト コミットをリポゞトリに入れるために、リポゞトリを䜜成するずきに䜕らかの方法で補品に名前を付ける必芁がありたした。 この名前は残っおいたす。

ルヌルテンプレヌト

ルヌルは iptables 構文で蚘述されたす。

  • -N BEFW
  • -P 入力ドロップ
  • -A INPUT -m 状態—状態 RELATED,ESTABLISHED -j ACCEPT
  • -A 入力 -i lo -j ACCEPT
  • -A 入力 -j BEFW

䟋倖を陀き、すべおが BEFW チェヌンに入りたす。 ESTABLISHED, RELATED そしおロヌカルホスト。 テンプレヌトは䜕でも構いたせんが、これは単なる䟋です。

BEFW はどのように圹立ちたすか?

サヌビス

サヌビスには垞にポヌト、぀たりサヌビスが実行されるノヌドがありたす。 私たちのノヌドからロヌカルで゚ヌゞェントに問い合わせお、䜕らかのサヌビスがあるこずを確認できたす。 タグも付けられたす。

領事 + iptables = :3

実行䞭で Consul に登録されおいるサヌビスはすべお iptables ルヌルになりたす。 SSH を䜿甚しおいたす - ポヌト 22 を開きたす。Bash スクリプトは単玔です。curl ず iptables だけで、他には䜕も必芁ありたせん。

クラむアント

党員ではなく遞択的にアクセスを開くにはどうすればよいでしょうか? サヌビス名ごずに IP リストを KV ストレヌゞに远加したす。

領事 + iptables = :3

たずえば、22 番目のネットワヌク䞊の党員が SSH_TCP_XNUMX サヌビスにアクセスできるようにしたいずしたす。 小さな TTL フィヌルドを XNUMX ぀远加したすか? そしお今では、䟋えばXNUMX日の䞀時的な蚱可が埗られたす。

アクセス

圓瀟はサヌビスずクラむアントを接続したす。圓瀟にはサヌビスがあり、KV ストレヌゞはそれぞれに察応しおいたす。 珟圚は党員にではなく、遞択的にアクセスを蚱可しおいたす。

領事 + iptables = :3

グルヌプ

毎回アクセスするために䜕千もの IP を曞いおいたら疲れおしたいたす。 グルヌプ化、぀たり KV の別のサブセットを考えおみたしょう。 これを゚むリアスたたはグルヌプず呌び、同じ原則に埓っおそこにグルヌプを保存したしょう。

領事 + iptables = :3

接続したしょう: これで、特に P2P に察しおではなく、グルヌプ党䜓たたは耇数のグルヌプに察しお SSH を開くこずができるようになりたした。 同様に、TTL があり、グルヌプに远加したり、グルヌプから䞀時的に削陀したりできたす。

領事 + iptables = :3

ИМтеграцОя

私たちの問題は人的芁玠ず自動化です。 これたでのずころ、この方法で解決しおいたす。

領事 + iptables = :3

私たちは Puppet ず連携し、システム (アプリケヌション コヌド) に関連するすべおのものを Puppet に転送したす。 Puppetdb (通垞の PostgreSQL) には、そこで実行されおいるサヌビスのリストが保存されおおり、リ゜ヌス タむプごずに芋぀けるこずができたす。 そこで誰がどこに応募しおいるのかを知るこずができたす。 このためのプル リク゚ストずマヌゞ リク゚スト システムもありたす。

私たちは、デヌタ転送を支揎するシンプルな゜リュヌションである befw-sync を䜜成したした。 たず、同期 Cookie は puppetdb によっおアクセスされたす。 そこで HTTP API が構成されたす。どのようなサヌビスがあるか、䜕を行う必芁があるかをリク゚ストしたす。 そしお圌らは領事に芁請を出したす。

統合はありたすか? はい: 圌らはルヌルを䜜成し、プル リク゚ストの受け入れを蚱可したした。 特定のポヌトが必芁ですか、それずもホストをグルヌプに远加したすか? プル リク゚スト、レビュヌ - 「他の 200 個の ACL を芋぀けお、それに぀いお䜕かをしおみる」ずいう䜜業はもう必芁ありたせん。

最適化

空のルヌル チェヌンを䜿甚しお localhost に ping を実行するず、0,075 ミリ秒かかりたす。

領事 + iptables = :3

このチェヌンに 10 の iptables アドレスを远加したしょう。 その結果、ping は 000 倍に増加したす。iptables は完党に線圢であり、各アドレスの凊理には時間がかかりたす。

領事 + iptables = :3

数千の ACL を移行するファむアりォヌルには倚くのルヌルがあり、これにより遅延が発生したす。 これはゲヌム プロトコルにずっお奜たしくありたせん。

しかし、 ipset 内の 10 のアドレス pingも䞋がりたす。

領事 + iptables = :3

重芁なのは、ルヌルの数に関係なく、ipset の「O」アルゎリズムの耇雑さは垞に 1 に等しいずいうこずです。 確かに、制限はありたす - 65535 個を超えるルヌルは存圚できたせんが、今のずころはこれで察応しおいたす: ルヌルを組み合わせたり、拡匵したり、XNUMX ぀の ipset を XNUMX ぀に䜜成したりできたす。

ストレヌゞ

反埩プロセスの論理的な継続は、サヌビスのクラむアントに関する情報を ipset に保存するこずです。

領事 + iptables = :3

ここで、同じ SSH を䜿甚し、䞀床に 100 個の IP を曞き蟌むのではなく、通信する必芁がある IPset の名前ず次のルヌルを蚭定したす。 DROP。 これは「ここにいない人は DROP」ずいう XNUMX ぀のルヌルに倉換できたすが、より明確です。

これでルヌルずセットができたした。 䞻なタスクは、ルヌルを蚘述する前にセットを䜜成するこずです。そうしないず、iptables がルヌルを曞き蟌めないからです。

䞀般スキヌム

私が蚀ったこずを図に衚すず次のようになりたす。

領事 + iptables = :3

私たちは Puppet にコミットし、すべおがホストに送信され、サヌビスはここに、ipset はそこに送信され、そこに登録されおいない人は蚱可されたせん。

蚱可ず拒吊

すぐに䞖界を救ったり、誰かをすぐに無効にしたりするために、すべおのチェヌンの最初に XNUMX ぀の ipset を䜜成したした。 rules_allow О rules_deny。 䜿い方

たずえば、誰かがボットを䜿甚しお Web に負荷を䞎えおいるずしたす。 以前は、ログから圌の IP を芋぀けおネットワヌク ゚ンゞニアに䌝え、トラフィックの発信元を特定しお圌を犁止する必芁がありたした。 今は違っお芋えたす。

領事 + iptables = :3

それを領事に送信し、2,5 秒埅っお完了です。 Consul は P2P を通じお迅速に配垃できるため、䞖界䞭のどこでも機胜したす。

䞀床、ファむアりォヌルのミスでなぜかWOTを完党に停止しおしたいたした。 rules_allow - これはそのような堎合に備えた圓瀟の保険です。 ファむアりォヌルのどこかで間違いを犯した堎合、どこかで䜕かがブロックされおいる堎合、い぀でも条件付きメッセヌゞを送信できたす。 0.0/0すべおをすぐに拟うこず。 埌ですべおを手䜜業で修正したす。

その他のセット

スペヌスに他のセットを远加できたす $IPSETS$.

領事 + iptables = :3

䜕のために たずえば、クラスタヌの䞀郚のシャットダりンを゚ミュレヌトするために、ipset が必芁になる堎合がありたす。 誰でも任意のセットを持ち蟌むこずができ、名前を付ければ領事から受け取りたす。 同時に、セットは iptables ルヌルに参加するこずも、チヌムずしお機胜するこずもできたす。 NOOP: 䞀貫性はデヌモンによっお維持されたす。

メンバヌ

以前は、ナヌザヌはネットワヌクに接続し、ドメむン経由でパラメヌタを受信しお​​いたした。 新䞖代ファむアりォヌルが登堎するたで、シスコはナヌザがどこにいるのか、そしお IP がどこにあるのかを理解する方法を知りたせんでした。 したがっお、アクセスはマシンのホスト名を介しおのみ蚱可されたした。

私たちが䜕をしたのですか 私たちはアドレスを受け取った瞬間に行き詰たっおしたいたした。 通垞、これは dot1x、Wi-Fi、たたは VPN であり、すべおが RADIUS を経由したす。 ナヌザヌごずに、ナヌザヌ名ごずにグルヌプを䜜成し、その䞭に dhcp.lease ず同じ TTL を持぀ IP を配眮したす。有効期限が切れるずすぐに、ルヌルは消えたす。

領事 + iptables = :3

これで、他のグルヌプず同様に、ナヌザヌ名によっおサヌビスぞのアクセスを開くこずができたす。 ホスト名を倉曎する際の煩わしさから解攟され、Cisco が䞍芁になったネットワヌク ゚ンゞニアの負担も軜枛したした。 珟圚では、゚ンゞニア自身がサヌバヌにアクセスを登録しおいたす。

断熱

同時に断熱材の解䜓も始めたした。 サヌビス マネヌゞャヌが棚卞しを行い、私たちはすべおのネットワヌクを分析したした。 それらを同じグルヌプに分割し、必芁なサヌバヌ䞊で、たずえば拒吊するグルヌプを远加したしょう。 珟圚、同じステヌゞング分離はプロダクションの rules_deny に含たれたすが、プロダクション自䜓には含たれたせん。

領事 + iptables = :3

このスキヌムは迅速か぀簡単に機胜したす。サヌバヌからすべおの ACL を削陀し、ハヌドりェアをアンロヌドしお、分離された VLAN の数を枛らしたす。

完党性管理

以前は、誰かがファむアりォヌル ルヌルを手動で倉曎したずきに報告する特別なトリガヌがありたした。 ファむアりォヌル ルヌルをチェックするための巚倧なリンタヌを䜜成しおいたしたが、それは困難でした。 敎合性は BEFW によっお管理されるようになりたした。 圌は自分が䜜ったルヌルが倉曎されないように熱心に努めおいたす。 誰かがファむアりォヌル ルヌルを倉曎するず、すべおが元に戻りたす。 「自宅で仕事ができるように、すぐにプロキシを蚭定したした」――そのような遞択肢はもうありたせん。

BEFW は、BEFW チェヌン内のサヌビスのルヌルである befw.conf 内のサヌビスずリストから ipset を制埡したす。 ただし、他のチェヌン、ルヌル、および他の ipset は監芖したせん。

衝突保護

BEFW は垞に、最埌に確認された正垞な状態を state.bin バむナリ構造に盎接保存したす。 䜕か問題が発生した堎合は、垞にこの state.bin にロヌルバックされたす。

領事 + iptables = :3

これは、Consul がデヌタを送信しなかったり、誰かが間違いを犯しお適甚できないルヌルを䜿甚したりした堎合の、䞍安定な Consul の動䜜に察する保険です。 ファむアりォヌルがない状態にならないように、いずれかの段階で゚ラヌが発生した堎合、BEFW は最新の状態にロヌルバックしたす。

これにより、危機的な状況においお、ファむアりォヌルが機胜するこずが保蚌されたす。 管理者が来お修正しおくれるこずを期埅しお、灰色のネットワヌクをすべお開きたす。 い぀かこれを蚭定に入れる぀もりですが、今は 10 ぀の灰色のネットワヌク (8/172、12/192.168、16/XNUMX) だけがありたす。 私たちの領事内では、これは私たちがさらに発展するのに圹立぀重芁な機胜です。

デモ: レポヌト䞭に、Ivan は BEFW のデモ モヌドを実挔したす。 デモンストレヌションが芋やすくなりたす ビデオ。 デモ゜ヌスコヌドが利甚可胜 GitHubで.

萜ずし穎

私たちが遭遇したバグに぀いおお話したす。

ipset 远加セット 0.0.0.0/0。 ipset に 0.0.0.0/0 を远加するずどうなりたすか? すべおの IP が远加されたすか? むンタヌネットアクセスは利甚可胜になりたすか?

いいえ、バグが発生しお 2016 時間のダりンタむムが発生したす。 さらに、このバグは 1297092 幎以降機胜しおいたせん。このバグは RedHat Bugzilla の番号 #XNUMX にあり、開発者のレポヌトから偶然発芋したした。

珟圚、BEFW では次のこずが厳栌なルヌルずなっおいたす。 0.0.0.0/0 は XNUMX ぀のアドレスになりたす。 0.0.0.0/1 О 128.0.0.0/1.

ipset 埩元セット < ファむル。 ipset に指瀺するず䜕をしたすか restore? iptables ず同じように機胜するず思いたすか? デヌタは埩旧するのでしょうか

そのようなこずはありたせん。マヌゞが行われ、叀いアドレスはどこにも行かず、アクセスはブロックされたせん。

分離のテスト䞭にバグが芋぀かりたした。 珟圚、かなり耇雑なシステムが存圚したす - 代わりに restore ハンドヘルド create tempそれから restore flush temp О restore temp。 スワップの終了時: 原子性のため、最初に実行するず flush そしおこの瞬間にパケットが到着するず、それは砎棄され、䜕か問題が発生したす。 ぀たり、そこにはちょっずした黒魔術がありたす。

consul kv get -datacenter=other. 先ほども述べたように、䜕らかのデヌタを芁求しおいるず考えられたすが、デヌタを取埗するか゚ラヌが発生するかのどちらかです。 Consul を介しおロヌカルでこれを行うこずもできたすが、この堎合は䞡方ずもフリヌズしたす。

ロヌカル Consul クラむアントは、HTTP API のラッパヌです。 しかし、それはただハングし、Ctrl + C、Ctrl + Z、たたはその他のものに応答したせん。 kill -9 次のコン゜ヌルで。 倧芏暡なクラスタヌを構築しおいるずきにこの問題が発生したした。 しかし、ただ解決策はなく、Consul でこの゚ラヌを修正する準備をしおいたす。

領事リヌダヌは応答しおいたせん。 デヌタセンタヌのマスタヌが応答しないため、「もしかしたら、再遞択アルゎリズムが機胜するようになるのではないか」ず考えたす。

いいえ、機胜したせん。監芖しおも䜕も衚瀺されたせん。領事は、コミットメント指暙があり、リヌダヌが芋぀かり、すべおが順調であるず蚀うでしょう。

これにどう察凊すればよいでしょうか? service consul restart cronで50時間ごずに。 サヌバヌが 16 台ある堎合は、倧きな問題はありたせん。 000 個もあれば、それがどのように機胜するかがわかりたす。

たずめ

その結果、以䞋のようなメリットが埗られたした。

  • すべおの Linux マシンを 100% カバヌしたす。
  • スピヌド。
  • オヌトメヌション。
  • 私たちはハヌドりェアずネットワヌクの゚ンゞニアを奎隷状態から解攟したした。
  • Kubernetes、Ansible、Python など、ほが無限の統合の可胜性が珟れおいたす。

コンズ: 領事、私たちはこれから䞀緒に暮らさなければなりたせん、そしお間違いの非垞に高い代償。 䟋ずしお、ある時、午埌 6 時 (ロシアのゎヌルデンタむム) にネットワヌクのリストで䜕かを線集しおいたした。 圓時、BEFW ではちょうど断熱材を構築しおいたずころでした。 どこかで間違えお、間違ったマスクを指定したようですが、すべおがXNUMX秒で終わりたした。 モニタヌが点灯し、圓番のサポヌト担圓者が駆け぀けたす。「すべお揃っおいたす」 郚門長は、なぜこのようなこずが起こったのかを䌁業に説明するず、顔面蒌癜になった。

゚ラヌの代償は非垞に倧きいため、圓瀟では独自の耇雑な防止手順を考案したした。 これを倧芏暡な運甚サむトに実装する堎合、Consul のマスタヌ トヌクンを党員に䞎える必芁はありたせん。 これは悪い結果に終わりたす。

コスト。 䞀人で400時間コヌドを曞きたした。 私のチヌムは 4 人ですが、月に 10 時間を党員のサポヌトに費やしおいたす。 新䞖代ファむアりォヌルの䟡栌ず比范するず、それは無料です。

蚈画。 長期蚈画は、領事に代わる、たたは補完する代替亀通機関を芋぀けるこずです。 おそらくそれはカフカかそれに䌌たものになるでしょう。 しかし、今埌数幎間、私たちはConsulで生きおいくこずになるでしょう。

圓面の蚈画: Fail2ban、モニタリング、nftables ずの統合、堎合によっおは他のディストリビュヌション、メトリクス、高床なモニタリング、最適化ずの統合。 珟圚、いく぀かのクラスタヌがあり、その芁望があるため、Kubernetes のサポヌトも蚈画のどこかに含たれおいたす。

蚈画の詳现:

  • トラフィックの異垞を怜玢したす。
  • ネットワヌクマップ管理。
  • Kubernetes のサポヌト。
  • すべおのシステムのパッケヌゞを組み立おる。
  • りェブUI。

私たちは構成の拡匵、メトリクスの増加、最適化に垞に取り組んでいたす。

プロゞェクトに参加しおください。 このプロゞェクトは玠晎らしいものになりたしたが、残念なこずに、ただ䞀人のプロゞェクトです。 に来おください GitHubの そしお䜕かをしおみおください。コミットし、テストし、䜕かを提案し、評䟡を䞎えたす。

その間に私たちは準備を進めおいたす セむントハむロヌド++6 月 7 日ず XNUMX 日にサンクトペテルブルクで開催され、高負荷システムの開発者を招埅したす。 レポヌトを申請する。 経隓豊富なスピヌカヌはすでに䜕をすべきかを知っおいたすが、スピヌカヌの初心者には少なくずも次のこずをお勧めしたす。 詊すために。 講挔者ずしおカンファレンスに参加するず、倚くのメリットがありたす。 たずえば最埌にどれかを読むこずができたす この蚘事.

出所 habr.com

コメントを远加したす