アりト゜ヌシングから開発たで埌線

皆さんこんにちは、私の名前はセルゲむ・゚メリャンチクです。 私は Audit-Telecom 䌚瀟の責任者であり、Veliam システムの䞻な開発者および䜜成者です。 私は友人ず私がアりト゜ヌシング䌚瀟を蚭立し、自分たちで゜フトりェアを䜜成し、その埌それを SaaS システム経由で党員に配垃し始めた方法に぀いお蚘事を曞くこずにしたした。 私がこれが可胜であるずはっきりず信じおいなかった方法に぀いお。 この蚘事にはストヌリヌだけでなく、Veliam 補品がどのように䜜成されたかに぀いおの技術的な詳现も含たれたす。 いく぀かの゜ヌスコヌドが含たれおいたす。 どのような間違いがあったのか、どのように修正したかに぀いおは埌ほど説明したす。 このような蚘事を掲茉するかどうかは疑問がありたした。 しかし、蚘事を公開せずに、もし公開しおいたらどうなっおいたかを考えるよりも、実行しおフィヌドバックを埗お改善したほうが良いず考えたした。

背景

私はある䌚瀟でIT瀟員ずしお働いおいたした。 この䌚瀟は非垞に倧芏暡で、広範なネットワヌク構造を持っおいたした。 私の職務䞊の責任に぀いおは蚀及したせん。ただ、圌らには䜕も開発が含たれおいなかったずだけ蚀っおおきたす。

モニタリングはありたしたが、玔粋に孊術的な興味から、私自身の最も単玔なものを曞いおみたかったのです。 アむデアは次のずおりです。これを Web 䞊に眮き、クラむアントをむンストヌルせずに簡単にアクセスしお、Wi-Fi 経由のモバむル デバむスを含む任意のデバむスからネットワヌクで䜕が起こっおいるかを確認できるようにしたいず考えたした。早く内容を知りたかった 郚屋の蚭備が「モッピヌ」になっおいるため... このような問題に察する応答時間には非垞に厳しい芁件がありたした。 その結果、JPEG の背景にネットワヌク図を描いたシンプルな Web ペヌゞを䜜成し、この写真から IP アドレスを持぀デバむス自䜓を切り出し、その䞊に動的コンテンツを衚瀺するずいう蚈画が私の頭の䞭で生たれたした。緑色たたは赀色で点滅する IP アドレスの圢匏で、必芁な座暙の画像を衚瀺したす。 タスクが蚭定されたした。始めたしょう。

以前は、Delphi、PHP、JS、そしおごく衚面的には C++ でプログラミングしおいたした。 私はネットワヌクがどのように機胜するかをよく知っおいたす。 VLAN、ルヌティング (OSPF、EIGRP、BGP)、NAT。 私自身が原始的な監芖プロトタむプを䜜成するにはこれで十分でした。

私は自分の考えをPHPで曞きたした。ApacheサヌバヌずPHPは Windows なぜなら Linux 圓時の私にずっおそれは理解しがたい、非垞に難しいこずだったが、埌になっお分かったように、私は非垞に間違っおいたし、倚くの点で Linux はるかにシンプル Windowsしかしそれは別の話題であり、この話題に関しおどれほど倚くの論争があるかは呚知の通りです。タスクスケゞュヌラ Windows 私は短い間隔正確には芚えおいたせんが、3秒に1回皋床でPHPスクリプトを実行し、簡単なpingで党おのオブゞェクトをポヌリングしお、その状態をファむルに保存したした。

system(“ping -n 3 -w 100 {$ip_address}“); 

はい、はい、その時点ではデヌタベヌスの操䜜も私にずっおはマスタヌできおいたせんでした。 プロセスを䞊列化できるずは知りたせんでしたが、すべおのネットワヌク ノヌドを通過するのに時間がかかりたした。 これはあるスレッドで起こりたした。 特に、いく぀かのノヌドが利甚できない堎合に問題が発生したした。 それぞれのスクリプトは 300 ミリ秒遅延したした。 クラむアント偎には、数秒間隔で、Ajax リク゚ストを䜿甚しおサヌバヌから曎新情報をダりンロヌドし、むンタヌフェむスを曎新する単玔なルヌプ関数がありたした。 さお、ping が 3 回連続で倱敗した埌、監芖機胜のある Web ペヌゞがコンピュヌタ䞊で開いおいるず、陜気な曲が再生されたした。

すべおがうたくいったずき、私はその結果に非垞にむンスピレヌションを受け、自分の知識ず胜力のおかげでさらにその結果に远加できるず考えたした。 しかし、私は XNUMX 䞇ものチャヌトを備えたシステムがずっず奜きではありたせんでした。圓時も、そしお今でもそう思っおいたすが、これはほずんどの堎合䞍芁です。 自分の仕事に本圓に圹立぀ものだけをそこに入れたかったんです。 この原則は、今日に至るたで Veliam の開発の基瀎ずなっおいたす。 さらに、監芖をオヌプンにし続ける必芁がなく、問題が発生したずきにそれを把握でき、問題が発生したずきにペヌゞを開いお、この問題のあるネットワヌク ノヌドがどこにあるか、次に䜕をすべきかを確認できれば、非垞に玠晎らしいだろうずいうこずに気づきたした。 。 どういうわけか、圓時私は電子メヌルを読たなかっただけで、単に電子メヌルを䜿甚したせんでした。 むンタヌネットで、GET たたは POST リク゚ストを送信できる SMS ゲヌトりェむがあるこずを知りたした。そうすれば、私が曞いたテキストを含む SMS が携垯電話に送信されたす。 本圓にこれが欲しかったのだずすぐに気づきたした。 そしお私はドキュメントを勉匷し始めたした。 しばらくしお成功し、今床は携垯電話にネットワヌクの問題に関する「萜䞋物」ずいう名前のSMSが届きたした。 このシステムは原始的でしたが、私自身が䜜成したもので、開発の動機ずなった最も重芁な点は、それが私の仕事に本圓に圹立぀アプリケヌション プログラムだったこずです。

そしお、職堎でむンタヌネット チャネルの XNUMX ぀がダりンした日が来たした。私の監芖ではそれがわかりたせんでした。 Google DNS は䟝然ずしお完党に ping を実行しおいるためです。 通信チャネルが生きおいるこずを監芖する方法を考えおみたしょう。 これを行う方法に぀いおはさたざたなアむデアがありたした。 すべおの機噚にアクセスできたせんでした。 どのチャンネルがラむブであるかを理解する方法を考え出す必芁がありたしたが、ネットワヌク機噚自䜓でそれを衚瀺するこずはできたせんでした。 そこで同僚は、むンタヌネットぞのアクセスに珟圚どの通信チャネルが䜿甚されおいるかによっお、パブリック サヌバヌぞのルヌト トレヌスが異なる可胜性があるずいうアむデアを思い぀きたした。 調べおみたらその通りでした。 トレヌスするずさたざたなルヌトがありたした。

system(“tracert -d -w 500 8.8.8.8”);

そこで、別のスクリプトが登堎したした。぀たり、䜕らかの理由で同じスクリプトの最埌にトレヌスが远加され、ネットワヌク䞊のすべおのデバむスに ping が送信されたした。 結局のずころ、これは同じスレッドで実行される別の長いプロセスであり、スクリプト党䜓の䜜業が遅くなりたす。 しかし、それはそれほど明癜ではありたせんでした。 しかし、いずれにせよ、圌は自分の仕事を果たし、各チャネルに察しおどのような皮類のトレヌスを行うべきかをコヌドで厳密に芏定したした。 このようにしお、ネットワヌク デバむス (ルヌタヌ、スむッチ、Wi-Fi など) ず倖郚ずの通信チャネルを既に監芖 (メトリクスの収集がなく、ping を送信するだけであるため、倧声で蚀われたした) したシステムが動䜜し始めたした。 。 SMS メッセヌゞは定期的に届き、図には問題の堎所が垞に明確に瀺されおいたした。

さらに、日垞の仕事では十字路をやらなければなりたせんでした。 そしお、どのむンタヌフェむスを䜿甚するかを確認するために毎回 Cisco スむッチに行くのにうんざりしたした。 監芖䞭のオブゞェクトをクリックしお、そのむンタヌフェむスのリストず説明が衚瀺されたら、どんなに玠晎らしいでしょう。 そうすれば時間の節玄になりたす。 さらに、このスキヌムでは、アカりントやコマンドを入力するために Putty や SecureCRT を実行する必芁はありたせん。 私はモニタリングをクリックしお、必芁なものを確認しお、自分の仕事に取り掛かりたした。 私はスむッチを操䜜する方法を探し始めたした。 すぐに 2 ぀のオプションが芋぀かりたした。SNMP たたは SSH 経由でスむッチにログむンし、必芁なコマンドを入力しお結果を解析する方法です。 SNMP の実装が耇雑だったので、結果を埗るのが埅ちきれなかったので SNMP を無芖したした。 SNMP を䜿甚する堎合は、MIB を長時間にわたっお調査し、このデヌタに基づいおむンタヌフェむスに関するデヌタを生成する必芁がありたす。 CISCOには玠晎らしいチヌムがありたす

show interface status

暪断に必芁なものを正確に瀺しおいたす。 このコマンドの出力を芋たいだけなのに、なぜわざわざ SNMP を䜿う必芁があるのか​​ず思いたした。 しばらくしお、私はこの機䌚に気づきたした。 Web ペヌゞ䞊のオブゞェクトをクリックしたした。 AJAX クラむアントがサヌバヌに接続するこずでむベントがトリガヌされ、必芁なスむッチに SSH 経由で接続されたした (資栌情報はコヌドにハヌドコヌドされおおり、コヌドを改良しおいく぀かの別個のメニュヌを䜜成する必芁はありたせんでした)むンタヌフェむスからアカりントを倉曎するこずは可胜です。結果が必芁でしたので、すぐに䞊蚘のコマンドをそこに入力し、ブラりザに送り返したした。 そこで、マりスを XNUMX 回クリックするだけでむンタヌフェむスに関する情報が衚瀺されるようになりたした。 これは、特にこの情報をさたざたなスむッチで同時に衚瀺する必芁がある堎合に、非垞に䟿利でした。

トレヌスベヌスのチャネル監芖は、結局最良のアむデアずは蚀えたせんでした。 時々、ネットワヌク䞊で䜜業が実行され、トレヌスが倉化する可胜性があり、監芖がチャネルに問題があるず私に叫び始めたした。 しかし、分析に倚くの時間を費やした埌、すべおのチャネルが機胜しおおり、監芖が私を欺いおいたこずに気づきたした。 その結果、チャネル圢成スむッチを管理する同僚に、近隣の可芖性ステヌタスが倉化したずきに syslog を送信するように䟝頌したした。 したがっお、トレヌスよりもはるかに簡単、高速、か぀正確です。 隣人喪倱のようなむベントが到着し、すぐにチャンネルダりンの通知を出したす。

さらに、オブゞェクトをクリックするずさらにいく぀かのコマンドが衚瀺され、いく぀かのメトリクスを収集するために SNMP が远加されたした。基本的にはそれだけです。 このシステムはそれ以䞊発展するこずはありたせんでした。 必芁なものはすべお揃っおいお、良いツヌルでした。 おそらく倚くの読者は、これらの問題を解決するための゜フトりェアがむンタヌネット䞊にすでにたくさんあるず蚀うでしょう。 しかし実際には、圓時私はそのような無料の補品をグヌグルで怜玢するこずはなく、プログラミング スキルを向䞊させたかったのです。これを掚進するには、実際のアプリケヌションの問題以䞊に優れた方法はありたせん。 この時点で、最初のバヌゞョンのモニタリングが完了し、倉曎は行われなくなりたした。

Audit-Telecom ずいう䌚瀟の蚭立

時が経぀に぀れお、幞いにも仕事のスケゞュヌルの郜合で他の䌚瀟でパヌトタむムで働くようになりたした。 さたざたな䌚瀟で働くず、さたざたな分野のスキルが非垞に早く成長し、芖野が広がりたす。 よく蚀われるように、あなたはスりェヌデン人であり、死神であり、トランペット奏者であるずいう䌚瀟がありたす。 それは難しい䞀方で、怠け者でなければゞェネラリストになり、関連分野がどのように機胜するかを知っおいるため、問題をより迅速か぀効率的に解決できるようになりたす。

私の友人のパベル (同じく IT スペシャリスト) は、私に自分のビゞネスを始めるよう垞に勧めようずしおいたした。 圌らが行っおいるこずのさたざたなバリ゚ヌションを含む無数のアむデアがありたした。 これに぀いおは䜕幎も議論されおきたした。 そしお結局のずころ、私は懐疑論者であり、パベルは倢想家なので、䜕も起こらなかったはずです。 圌がアむデアを提案するたびに、私はい぀もそれを信じられず、参加するこずを拒吊したした。 しかし、私たちは本圓に自分たちのビゞネスを開きたかったのです。

最終的に、私たちはお互いに合った遞択肢を芋぀け、やり方を知っおいるこずを実行するこずができたした。 2016幎、私たちは䌁業のIT課題解決を支揎するIT䌁業の蚭立を決意したした。 これは、IT システム (1C、タヌミナル サヌバヌ、メヌル サヌバヌなど) の導入、そのメンテナンス、ナヌザヌ向けの埓来のヘルプデスク、およびネットワヌク管理です。

正盎に蚀うず、䌚瀟を䜜った時点では99,9%くらい信じおいたせんでした。 しかし、どういうわけかパベルは私に挑戊させるこずができ、将来を芋据えお、圌は正しかったこずが刀明したした。 パベルず私は、それぞれ300䞇ルヌブルを泚ぎ蟌み、新しいLLC「Audit-Telecom」を登録し、小さなオフィスを借り、おそらくほずんどの経隓の浅い初心者のビゞネスマンず同じように、クヌルな名刺を䜜り、顧客を探し始めたした。 顧客を芋぀けるこずはたったく別の話です。 興味があれば、䌁業ブログの䞀郚ずしお別の蚘事を曞くかもしれたせん。 勧誘電話、チラシなどこれでは結果は埗られたせんでした。 ビゞネスに関する倚くの話を今読んでいるず、䜕らかの圢で倚くのこずが運に巊右されたす。 我々は幞運だった。 そしお䌚瀟蚭立から文字通り数週間埌、兄のりラゞミヌルが私たちに声をかけおきお、圌が私たちに最初の顧客を連れおきたした。 クラむアントずの仕事の詳现に぀いおは説明したせん。それがこの蚘事の内容ではありたせん。ただ、監査に行っお重芁な領域を特定したしたが、その領域を改善するかどうかの決定が行われる間に問題が発生したずだけ蚀っおおきたす。アりト゜ヌサヌずしお継続的に協力しおください。 この埌、すぐに前向きな決定が䞋されたした。

その埌、䞻に友人の口コミで他のサヌビス䌚瀟も登堎し始めたした。 ヘルプデスクは XNUMX ぀のシステム内にありたした。 ネットワヌク機噚ずサヌバヌぞの接続は異なりたす、ずいうよりむしろ異なりたす。 ショヌトカットを保存しおいる人もいれば、RDP アドレス垳を䜿甚しおいる人もいたす。 モニタリングは別の別のシステムです。 チヌムが異なるシステムで䜜業するのは非垞に䞍䟿です。 重芁な情報が芋倱われたす。 たずえば、クラむアントのタヌミナル サヌバヌが䜿甚できなくなりたした。 このクラむアントのナヌザヌからの申請は盎ちに受け付けられたす。 サポヌト スペシャリストがリク゚ストを開始したす (リク゚ストは電話で受信されたした)。 むンシデントずリク゚ストが XNUMX ぀のシステムに登録されおいる堎合、サポヌト スペシャリストはナヌザヌの問題を即座に認識しおそれを䌝え、同時に必芁なオブゞェクトに接続しお状況を解決したす。 党員が戊術的な状況を認識しおおり、調和しお取り組んでいたす。 これらすべおを組み合わせたシステムはただ芋぀かっおいたせん。 私たち自身の補品を䜜る時期が来たこずが明らかになりたした。

監芖システムの継続的な䜜業

以前に䜜成されたシステムが珟圚のタスクにはたったく適しおいないこずは明らかでした。 機胜面でも品質面でも問題ありたせん。 そしお、システムを䞀から曞くこずにしたした。 グラフィック的にはたったく違っお芋えるはずです。 適切なクラむアントに察しお適切なオブゞェクトを迅速か぀䟿利に開くこずができるように、階局システムである必芁がありたした。 最初のバヌゞョンのようなスキヌムは、珟圚のケヌスではたったく正圓化されたせん。 クラむアントはさたざたであり、機噚がどの敷地内に蚭眮されおいるかはたったく問題ではありたせんでした。 これはすでにドキュメントに転送されおいたす。

したがっお、タスクは次のずおりです。

  1. 階局構造;
  2. クラむアントの敷地内に仮想マシンの圢で配眮できるある皮のサヌバヌ郚分。必芁なメトリクスを収集しお䞭倮サヌバヌに送信し、䞭倮サヌバヌがこれらすべおを芁玄しお衚瀺したす。
  3. アラヌト。 芋逃せないもの、なぜなら... 圓時は座っおただモニタヌを芋るこずは䞍可胜でした。
  4. アプリケヌションシステム。 サヌバヌやネットワヌク機噚だけでなく、ワヌクステヌションもサヌビスするクラむアントが珟れ始めたした。
  5. システムからサヌバヌや機噚に迅速に接続する機胜。

タスクが蚭定され、私たちは執筆を開始したした。その過皋で、クラむアントからのリク゚ストを凊理したした。その時点で、私たちはすでに4人になっおいたした。私たちは䞭倮サヌバヌずクラむアントむンストヌル甚サヌバヌの䞡方の郚分を同時に曞き始めたした。この時点で、 Linux それはもはや私たちにずっお銎染みのないものではなく、クラむアントにむンストヌルされる仮想マシンは Debianむンストヌラヌは甚意したせん。単䞀の仮想マシン䞊にサヌバヌサむドプロゞェクトを䜜成し、それを必芁なクラむアントにクロヌンするだけです。しかし、これもたた間違いでした。埌になっお、この構成には曎新メカニズムが党くないこずが明らかになったのです。そのため、新しい機胜を远加するず、それをすべおのクラむアントサヌバヌに配垃するのが非垞に面倒な䜜業になっおしたいたした。しかし、その点に぀いおは埌ほど詳しく説明したす。

最初のプロトタむプを䜜りたした。 圌は、必芁なクラむアント ネットワヌク デバむスずサヌバヌに ping を送信し、このデヌタを䞭倮サヌバヌに送信するこずができたした。 そしお圌は、このデヌタを䞭倮サヌバヌ䞊で䞀括曎新したした。 ここでは、䜕がどのようにしお成功したかだけでなく、どのような玠人的な間違いがあり、埌でどのようにしおその代償を払わなければならなかったのかに぀いおも曞きたす。 したがっお、オブゞェクトのツリヌ党䜓が、シリアル化されたオブゞェクトの圢匏で XNUMX ​​぀の単䞀ファむルに保存されたした。 いく぀かのクラむアントをシステムに接続しおいる間、すべおが倚かれ少なかれ正垞でしたが、完党に理解できないアヌティファクトがいく぀か発生するこずがありたした。 しかし、十数台のサヌバヌをシステムに接続するず、奇跡が起こり始めたした。 堎合によっおは、䜕らかの未知の理由で、システム内のすべおのオブゞェクトが単に消えおしたうこずもありたす。 ここで、クラむアントのサヌバヌが POST リク゚ストを介しお数秒ごずに䞭倮サヌバヌにデヌタを送信しおいたこずに泚意するこずが重芁です。 泚意深い読者ず経隓豊富なプログラマは、シリアル化されたオブゞェクトが栌玍されおいるファむルそのものに察しお、異なるスレッドから同時に耇数アクセスするずいう問題があるこずをすでに掚枬しおいたした。 そしおちょうどこれが起こっおいるずき、物䜓の消倱ずいう奇跡が起こりたした。 ファむルが空になっただけです。 しかし、これらすべおはすぐには発芋されず、耇数のサヌバヌでの運甚䞭にのみ発芋されたした。 この間、ポヌト スキャン機胜が远加されたした (サヌバヌは、デバむスの可甚性に関する情報だけでなく、デバむス䞊で開いおいるポヌトに関する情報も䞭倮に送信したした)。 これは、次のコマンドを呌び出すこずで実行されたした。

$connection = @fsockopen($ip, $port, $errno, $errstr, 0.5);

結果は䞍正確であるこずが倚く、スキャンが完了するたでに長い時間がかかりたした。 ping のこずをすっかり忘れおいたしたが、fping 経由で実行されたした。

system("fping -r 3 -t 100 {$this->ip}");

これも䞊列化されおいなかったため、プロセスに非垞に時間がかかりたした。 その埌、怜蚌に必芁な IP アドレスのリスト党䜓が䞀床に fping に送信され、応答した人の既補のリストを受け取りたした。 私たちず違っお、fping はプロセスを䞊列化するこずができたした。

もう XNUMX ぀の䞀般的な日垞業務は、WEB 経由でいく぀かのサヌビスをセットアップするこずでした。 たずえば、MS Exchange の ECP です。 基本的にはただのリンクです。 そしお、特定のクラむアントの ECP にアクセスする方法に぀いおドキュメントやブックマヌクのどこかを参照する必芁がないように、そのようなリンクをシステムに盎接远加できる必芁があるず刀断したした。 これが、システムのリ゜ヌス リンクの抂念がどのようにしお登堎したかであり、その機胜は今日たで利甚可胜であり、ほずんど倉わっおいたせん。

Veliam でのリ゜ヌス リンクの仕組み
アりト゜ヌシングから開発たで埌線

リモヌト接続

珟圚のバヌゞョンの Veliam で動䜜するず次のようになりたす。
アりト゜ヌシングから開発たで埌線

タスクの 2 ぀は、サヌバヌに迅速か぀䟿利に接続するこずでしたが、そのサヌバヌはすでに倚数 (XNUMX 以䞊) 存圚しおおり、事前に保存された䜕癟䞇もの RDP ショヌトカットを䞊べ替えるのは非垞に䞍䟿でした。 工具が必芁でした。 このような RDP 接続甚のアドレス垳のような゜フトりェアがむンタヌネット䞊にありたすが、監芖システムず統合されおおらず、アカりントを保存するこずはできたせん。 XNUMX 日に䜕十回も異なるサヌバヌに接続する堎合、毎回異なるクラむアントのアカりントを入力するのはたさに地獄です。 SSH を䜿甚するず状況は少し改善され、そのような接続をフォルダヌに敎理し、そこからアカりントを蚘憶できる優れた゜フトりェアがたくさんありたす。 しかし、問題が XNUMX ぀ありたす。 XNUMX ぀目は、RDP および SSH 接続甚のプログラムが XNUMX ぀も芋぀からなかったこずです。 XNUMX ぀目は、ある時点でコンピュヌタヌの前にいないずきにすぐに接続する必芁がある堎合、たたはシステムを再むンストヌルしたばかりの堎合、このクラむアントのアカりントを確認するためにドキュメントにアクセスする必芁があるこずです。 䞍䟿ですし、時間の無駄です。

クラむアント サヌバヌに必芁な階局構造は、瀟内補品ですでに利甚可胜でした。 そこで必芁な機噚にクむック接続を接続する方法を考え出す必芁がありたした。 たず、少なくずもネットワヌク内で。

システム内のクラむアントはコンピュヌタのロヌカルリ゜ヌスにアクセスできないブラりザであったため、必芁なアプリケヌションをコマンドで起動するだけで枈むように、すべおを「Windows カスタム URL スキヌム」このようにしお、システム甚の「プラグむン」が珟れたした。これは単に Putty ず Remote Desktop Plus を含み、むンストヌル時に URI スキヌムを登録するだけです。 Windowsさお、RDP たたは SSH を介しおオブゞェクトに接続したいずきはい぀でも、システムでそのアクションをクリックするず、カスタム URI が起動したす。暙準の mstsc.exe は、 Windows あるいは、PuTTYずいう゜フトりェアもありたす。これは「プラグむン」の䞀郚ずしお含たれおいたした。「プラグむン」ずいう蚀葉を匕甚笊で囲んだのは、これは埓来の意味でのブラりザプラグむンではないからです。

それは少なくずも䜕かしらの圹に立った。䟿利なアドレス垳だ。そしおPuttyの堎合は、すべお問題なかった。接続IPアドレス、ログむン名、パスワヌドを入力パラメヌタずしお指定できた。぀たり、 Linux すでに、パスワヌドを入力せずにワンクリックでネットワヌク䞊のサヌバヌに接続できおいたした。しかし、RDP はそれほど単玔ではありたせん。暙準の mstsc に資栌情報をパラメヌタずしお枡すこずはできたせん。そこで、Remote Desktop Plus が救䞖䞻ずなりたした。Remote Desktop Plus のおかげで、これが可胜になりたした。その埌は、Remote Desktop Plus なしでも問題なく運甚できおいたすが、長い間、システム内で頌りになるアシスタントでした。HTTP(S) サむトは簡単です。そのようなオブゞェクトはブラりザで開くだけで枈みたす。䟿利で実甚的です。しかし、これは内郚ネットワヌクでのみ恩恵でした。

ほずんどの問題はオフィスからリモヌトで解決しおいたため、最も簡単な方法はクラむアントにVPNを蚭定するこずでした。そうすれば、私たちのシステムからクラむアントに接続できるようになりたした。しかし、それでもただ少し䞍䟿でした。クラむアントごずに、各コンピュヌタに倧量のパスワヌドを保存しおおく必芁がありたした。 VPN 接続蚭定は、接続する前に必ず察応するVPNを有効にする必芁がありたした。この解決策をかなり長い間䜿っおいたした。しかし、クラむアント数ずVPNの数が増えおいくに぀れ、この䜜業が煩わしくなり始め、䜕らかの察策が必芁になりたした。特にシステムを再むンストヌルした埌、新しいWindowsプロファむルに数十ものVPN接続を再入力しなければならなかった時は、本圓に涙が出るほど蟛かったです。「もううんざりだ」ず思い、どうにかできないかず考え始めたした。

たたたた、すべおのクラむアントがルヌタヌずしお有名な䌚瀟Mikrotikのデバむスを持っおいたした。 これらは非垞に機胜的で、ほがすべおのタスクを実行するのに䟿利です。 欠点は「乗っ取られる」こずです。 私たちは倖郚からのアクセスをすべお遮断するこずでこの問題を解決したした。 しかし、クラむアントの堎所に行かなくおも、䜕らかの方法でそれらにアクセスできるようにする必芁がありたした。 それは長い。 私たちは、そのような Mikrotik ごずにトンネルを䜜成し、それらを別のプヌルに分離しただけです。 ルヌティングを行わないため、あなたのネットワヌクずクラむアントのネットワヌク、およびクラむアントのネットワヌク同士の接続は存圚したせん。

このアむデアは、システム内で必芁なオブゞェクトをクリックするず、すべおのクラむアント Mikrotik の SSH アカりントを認識しおいる䞭倮監芖サヌバヌが目的のアカりントに接続し、目的のホストぞの転送ルヌルを䜜成するこずを保蚌するために生たれたした。必芁なポヌト。 ここにはいく぀かのポむントがありたす。 この解決策は䞇胜ではありたせん。コマンド構文はすべおのルヌタヌで異なるため、Mikrotik でのみ機胜したす。 たた、そのような転送は䜕らかの方法で削陀する必芁があり、システムのサヌバヌ郚分は基本的に、私が RDP セッションを終了したかどうかを远跡するこずができたせんでした。 たあ、そのような転送はクラむアントにずっお穎です。 でも、普遍性を远求しなかったのは  この補品は瀟内でのみ䜿甚されおおり、䞀般に公開する考えはありたせんでした。

それぞれの問題は独自の方法で解決されたした。 ルヌルが䜜成されたずき、この転送は XNUMX ぀の特定の倖郚 IP アドレス (接続の初期化元) に察しおのみ利甚可胜でした。 したがっお、セキュリティホヌルは回避されたした。 しかし、そのような接続のたびに、Mikrotik ルヌルが NAT ペヌゞに远加され、クリアされたせんでした。 そしお、ルヌルが増えれば増えるほど、ルヌタヌのプロセッサの負荷が増えるこずは誰もが知っおいたす。 そしお䞀般的に、私はい぀かミクロティクに行くず、䜕癟もの死んだ圹に立たないルヌルが存圚するこずを受け入れるこずができたせんでした。

私たちのサヌバヌは接続ステヌタスを远跡できないため、Mikrotik 自䜓が接続ステヌタスを远跡できるようにしたす。 そしお、特定の説明を含むすべおの転送ルヌルを垞に監芖し、TCP 接続に適切なルヌルがあるかどうかをチェックするスクリプトを䜜成したした。 しばらくの間接続がなかった堎合は、接続がすでに完了しおいる可胜性があり、この転送は削陀できたす。 すべおがうたくいき、脚本もうたくいきたした。

ちなみに、これは次のずおりです。

global atmonrulecounter {"dontDelete"="dontDelete"}
:foreach i in=[/ip firewall nat find comment~"atmon_script_main"] do={ 
	local dstport [/ip firewall nat get value-name="dst-port" $i]
	local dstaddress [/ip firewall nat get value-name="dst-address" $i]
	local dstaddrport "$dstaddress:$dstport"
	#log warning message=$dstaddrport
	local thereIsCon [/ip firewall connection find dst-address~"$dstaddrport"]
	if ($thereIsCon = "") do={
		set ($atmonrulecounter->$dstport) ($atmonrulecounter->$dstport + 1)
		#:log warning message=($atmonrulecounter->$dstport)
		if (($atmonrulecounter->$dstport) > 5) do={
			#log warning message="Removing nat rules added automaticaly by atmon_script"
			/ip firewall nat remove [/ip firewall nat find comment~"atmon_script_main_$dstport"]
			/ip firewall nat remove [/ip firewall nat find comment~"atmon_script_sub_$dstport"]
			set ($atmonrulecounter->$dstport) 0
		}
	} else {
		set ($atmonrulecounter->$dstport) 0
	}
}

確かに、もっず矎しく、より速くなどするこずはできたしたが、機胜し、Mikrotikをロヌドせず、玠晎らしい仕事をしたした。 ぀いにワンクリックでクラむアントのサヌバヌやネットワヌク機噚に接続できるようになりたした。 VPNを開いたり、パスワヌドを入力したりする必芁はありたせん。 このシステムは本圓に䜿いやすくなりたした。 サヌビス時間が短瞮され、党員が必芁なオブゞェクトに接続する代わりに䜜業に時間を費やしたした。

Mikrotikのバックアップ

すべおの Mikrotik の FTP ぞのバックアップを構成したした。 そしお党䜓的にはすべお順調でした。 しかし、バックアップを取埗する必芁がある堎合は、この FTP を開いおそこで探す必芁がありたした。 すべおのルヌタヌが接続されおいるシステムがあり、SSH 経由でデバむスず通信できたす。 システム自䜓が毎日すべおの Mikrotik からバックアップを取埗するようにしたらどうだろうか、ず私は思いたした。 そしお圌はそれを実行し始めたした。 接続しおバックアップを䜜成し、ストレヌゞに保存したした。

Mikrotik からバックアップを取埗するための PHP のスクリプト コヌド:

<?php

	$IP = '0.0.0.0';
	$LOGIN = 'admin';
	$PASSWORD = '';
	$BACKUP_NAME = 'test';

    $connection = ssh2_connect($IP, 22);

    if (!ssh2_auth_password($connection, $LOGIN, $PASSWORD)) exit;

    ssh2_exec($connection, '/system backup save name="atmon" password="atmon"');
    stream_get_contents($connection);
    ssh2_exec($connection, '/export file="atmon.rsc"');
    stream_get_contents($connection);
    sleep(40); // Waiting bakup makes

    $sftp = ssh2_sftp($connection);

    // Download backup file
    $size = filesize("ssh2.sftp://$sftp/atmon.backup");
    $stream = fopen("ssh2.sftp://$sftp/atmon.backup", 'r');
    $contents = '';
    $read = 0;
    $len = $size;
    while ($read < $len && ($buf = fread($stream, $len - $read))) {
        $read += strlen($buf);
        $contents .= $buf;
    }
    file_put_contents ($BACKUP_NAME . ‘.backup’,$contents);
    @fclose($stream);

    sleep(3);
    // Download RSC file
    $size = filesize("ssh2.sftp://$sftp/atmon.rsc");
    $stream = fopen("ssh2.sftp://$sftp/atmon.rsc", 'r');
    $contents = '';
    $read = 0;
    $len = $size;
    while ($read < $len && ($buf = fread($stream, $len - $read))) {
        $read += strlen($buf);
        $contents .= $buf;
    }
    file_put_contents ($BACKUP_NAME . ‘.rsc’,$contents);
    @fclose($stream);

    ssh2_exec($connection, '/file remove atmon.backup');
    ssh2_exec($connection, '/file remove atmon.rsc');

?>

バックアップは、バむナリ構成ずテキスト構成の XNUMX ぀の圢匏で取埗されたす。 バむナリは必芁な構成を迅速に埩元するのに圹立ち、テキスト バむナリを䜿甚するず、機噚の匷制亀換が発生しおバむナリをアップロヌドできない堎合に䜕を行う必芁があるかを理解できたす。 その結果、システムに別の䟿利な機胜が远加されたした。 さらに、新しい Mikrotik を远加する堎合、䜕も蚭定する必芁はなく、オブゞェクトをシステムに远加し、SSH 経由でアカりントを蚭定するだけで枈みたした。 その埌、システム自䜓がバックアップを䜜成したす。 SaaS Veliam の珟圚のバヌゞョンにはただこの機胜がありたせんが、間もなく移怍される予定です。

内郚システムのスクリヌンショット
アりト゜ヌシングから開発たで埌線

通垞のデヌタベヌスストレヌゞぞの移行

アヌティファクトが珟れるこずは䞊ですでに曞きたした。 システム内のオブゞェクトのリスト党䜓が単に消えおしたうこずもあれば、オブゞェクトの線集時に情報が保存されず、オブゞェクトの名前を XNUMX 回倉曎する必芁があるこずもありたした。 これには皆がひどくむラむラしたした。 オブゞェクトの消倱はほずんど発生せず、このファむルを埩元するこずで簡単に埩元されたしたが、オブゞェクトの線集時に倱敗するこずが非垞に頻繁に発生したした。 おそらく、最初はデヌタベヌスを介しおこれを実行したせんでした。これは、すべおの接続を含むツリヌをフラット テヌブルに保持する方法が私の頭に合わなかったためです。 平坊ですが、ツリヌは階局的です。 しかし、耇数のアクセス、そしおその埌 (システムがより耇雑になるに぀れお) トランザクションに適した゜リュヌションは、DBMS です。 おそらくこの問題に遭遇したのは私が初めおではありたせん。 グヌグル怜玢を始めたした。 すべおは私より前にすでに発明されおおり、平らなテヌブルからツリヌを構築するアルゎリズムがいく぀かあるこずが刀明したした。 それぞれを確認した埌、そのうちの XNUMX ぀を実装したした。 しかし、これはすでにシステムの新しいバヌゞョンでした。なぜなら... 実はこのため、かなり曞き盎さなければなりたせんでした。 結果は圓然で、システムのランダムな動䜜の問題は解消されたした。 ゜フトりェア開発の分野では、これらの゚ラヌは非垞に玠人っぜい (シングルスレッドのスクリプト、異なるスレッドから同時に耇数回アクセスされた情報をファむルに保存するなど) ず蚀う人もいるかもしれたせん。 おそらくこれは本圓かもしれたせんが、私の本業は管理であり、プログラミングは私の心の副業であり、プログラマヌのチヌムで働いた経隓がなかったため、そのような基本的なこずは先茩からすぐに提案されおいたでしょう。同志たち。 したがっお、これらの凹凞はすべお自分で埋めたしたが、内容は非垞によく孊びたした。 たた、私の仕事には、クラむアントずのミヌティング、䌚瀟の宣䌝を目的ずした掻動、瀟内の管理䞊の問題などが含たれたす。 しかし、䜕らかの圢で、すでに存圚しおいるものは需芁があったのです。 私も圌らも毎日の仕事でこの補品を䜿甚したした。 率盎に蚀っお、時間を無駄にしお倱敗したアむデアや解決策もありたしたが、最終的にはこれが機胜するツヌルではないこずが明らかになり、誰も䜿甚しなかったため、Veliam に導入されるこずはありたせんでした。

ヘルプデスク - ヘルプデスク

ヘルプデスクがどのように蚭立されたかに぀いお蚀及するこずは間違いではありたせん。 これはたったく別の話です、なぜなら... Veliam では、これはすでに 3 番目の完党な新しいバヌゞョンであり、これたでのすべおのバヌゞョンずは異なりたす。 珟圚では、䞍芁な付加機胜のない盎感的なシンプルなシステムずなっおおり、ドメむンず統合する機胜や、電子メヌルのリンクを䜿甚しおどこからでも同じナヌザヌ プロファむルにアクセスできる機胜が備わっおいたす。 そしお最も重芁なこずは、VPN やポヌト転送を䜿甚せずに、どこからでも (自宅たたはオフィス内) アプリケヌションから盎接 VNC 経由で申請者に接続できるこずです。 私たちがどのようにしおこれに至ったのか、以前に䜕が起こったのか、そしおどのような恐ろしい決断が䞋されたのかをお話ししたす。

私たちはよく知られおいる TeamViewer を通じおナヌザヌず぀ながりたした。 圓瀟がサヌビスを提䟛するナヌザヌが䜿甚するすべおのコンピュヌタにはテレビがむンストヌルされおいたす。 私たちが最初に間違っお、その埌削陀したのは、各 HD クラむアントをハヌドりェアにリンクするこずでした。 ナヌザヌはリク゚ストを残すためにどのようにしお HD システムにログむンしたしたか? テレビに加えお、誰もが自分のコンピュヌタに Lazarus で曞かれた特別なナヌティリティをむンストヌルしおいたした (ここにいる倚くの人は目を䞞くしお、それが䜕なのかを Google で調べるかもしれたせんが、私が知っおいる䞭で最高のコンパむル蚀語は Delphi で、Lazarus はほずんど同じものですが、無料のみです。 䞀般に、ナヌザヌはこのナヌティリティを起動する特別なバッチ ファむルを起動し、これによりシステムの HWID が読み取られ、その埌ブラりザが起動されお認蚌が行われたす。 なぜこれが行われたのでしょうか? 䌁業によっおは、サヌビス利甚者数を個別にカりントし、人数に応じお月ごずのサヌビス料金を蚭定しおいるずころもありたす。 それは理解できたすが、なぜそれがハヌドりェアに関連付けられおいるのでしょうか? それはずおもシンプルで、垰宅しお自宅のラップトップから「ここのすべおを矎しくしおください」ずいうスタむルでリク゚ストをした人もいたした。 このナヌティリティは、システム HWID の読み取りに加えお、珟圚の Teamviewer ID をレゞストリから取埗し、それを私たちに送信したした。 Teamviewer には統合甚の API がありたす。 そしお私たちはこの統合を行いたした。 しかし、萜ずし穎が XNUMX ぀ありたした。 ナヌザヌがこのセッションを明瀺的に開始しない堎合、これらの API を介しおナヌザヌのコンピュヌタに接続するこずは䞍可胜であり、接続を詊行した埌も「確認」をクリックする必芁がありたす。 その時点では、ナヌザヌの芁求がなければ誰も接続すべきではない、ずいうのが私たちにずっお論理的であるように思えたした。そのナヌザヌはコンピュヌタヌの前にいるので、セッションを開始し、リモヌト接続芁求に肯定的に応答したす。 すべおが間違っおいたこずが刀明した。 申請者はセッションの開始を抌すのを忘れたため、電話での䌚話でそのこずを䌝えなければなりたせんでした。 これは時間を無駄にし、プロセスの䞡偎でストレスを感じたした。 さらに、人がリク゚ストを残したものの、昌食のために出発するずきにのみ接続が蚱可されるずいうような瞬間はたったく珍しいこずではありたせん。 問題は重倧ではなく、䜜業プロセスが䞭断されるこずを望んでいないからです。 したがっお、接続を蚱可するためにボタンを抌すこずはありたせん。 これは、ヘルプデスクにログむンするずきに远加機胜がどのように衚瀺されるか、぀たり Teamviwer の ID を読み取る方法です。 Teamviwer のむンストヌル時に䜿甚された氞久パスワヌドはわかっおいたした。 より正確に蚀えば、それはむンストヌラヌずシステムに組み蟌たれおいるため、システムだけがそれを知っおいたした。 したがっお、アプリケヌションからクリックするだけで䜕も埅぀必芁のない接続ボタンがあったのですが、すぐにTeamviewerが開いお接続が行われたした。 その結果、考えられる接続方法は XNUMX 皮類ありたした。 公匏の Teamviewer API ず自䜜の API を䜿甚したす。 驚いたこずに、最初のバヌゞョンは、特別な堎合ずナヌザヌ自身がゎヌサむンを出した堎合にのみ䜿甚するようにずいう指瀺があったにもかかわらず、圌らはすぐに䜿甚を䞭止したした。 それでも、今は私に安党を䞎えおください。 しかし、申請者はこれを必芁ずしおいないこずが刀明したした。 確認ボタンなしで接続しおもたったく問題ありたせん。 このような状況であったため、API 接続機胜は䞍芁ずしお削陀されたした。

マルチスレッドぞの移行 Linux

あらかじめ決められたポヌトのリストをオヌプンにし、ネットワヌク オブゞェクトを単玔に ping するためのネットワヌク スキャナの通過を高速化するずいう問題は、長い間生じ始めおいたした。 もちろん、ここで最初に思い浮かぶ解決策はマルチスレッドです。 ping に費やされる䞻な時間はパケットが返されるのを埅぀こずであり、前のパケットが返されるたで次の ping を開始できないため、20 台以䞊のサヌバヌずネットワヌク機噚を備えおいる䌁業であっおも、この動䜜はすでに非垞に遅くなりたす。 重芁なのは、XNUMX ぀のパッケヌゞが消える可胜性がありたすが、それをすぐにシステム管理者に通知しないこずです。 圌はそのようなスパムの受け入れをすぐにやめるでしょう。 これは、アクセス䞍胜であるず結論付ける前に、各オブゞェクトに耇数回 ping を実行する必芁があるこずを意味したす。 あたり詳しく説明したせんが、䞊列化する必芁がありたす。これを行わないず、システム管理者は監芖システムからではなくクラむアントから問題を知るこずになる可胜性が高いためです。

PHP 自䜓は、そのたたではマルチスレッドをサポヌトしたせん。 マルチプロセッシングが可胜で、フォヌクするこずができたす。 しかし、実際には、ポヌリング メカニズムはすでに䜜成されおおり、デヌタベヌスから必芁なすべおのノヌドを䞀床カりントし、すべおを䞀床に ping し、各ノヌドからの応答を埅ち、その埌すぐに曞き蟌むようにしたいず考えおいたした。デヌタ。 これにより、読み取りリク゚ストの数が節玄されたす。 マルチスレッドはこのアむデアに完党に適合したす。 PHP には、実際のマルチスレッドを実行できる PThreads モゞュヌルがありたす。これを PHP 7.2 で蚭定するにはかなりの手間がかかりたしたが、完了したした。 ポヌト スキャンず ping が高速になりたした。 そしお、たずえば以前は 15 呚あたり 2 秒かかっおいたこのプロセスに、XNUMX 秒かかるようになりたした。 良い結果でした。

新しい䌚瀟の迅速な監査

さたざたなメトリクスやハヌドりェア特性を収集する機胜はどのようにしお生たれたのでしょうか? それは簡単です。 堎合によっおは、単に珟圚の IT むンフラストラクチャを監査するよう呜じられるこずもありたす。 新しいクラむアントの監査を迅速化するためにも、同じこずが必芁です。 䞭芏暡たたは倧䌁業に来お、圌らが䜕を持っおいるかをすぐに把握できるものが必芁でした。 私の意芋では、内郚ネットワヌク䞊の ping をブロックするのは、自分の生掻を耇雑にしたい人だけであり、私たちの経隓ではそのような人はほずんどいたせん。 でも、そういう人もいるのです。 したがっお、単玔な ping でネットワヌクをすばやくスキャンしおデバむスの存圚を確認できたす。 次に、それらを远加し、興味のある開いおいるポヌトをスキャンしたす。 実際、この機胜はすでに存圚しおおり、䞭倮サヌバヌからスレヌブサヌバヌにコマンドを远加するだけで、指定されたネットワヌクをスキャンしお、芋぀かったすべおのネットワヌクをリストに远加するこずができたした。 蚀い忘れおいたしたが、構成枈みのシステム (スレヌブ監芖サヌバヌ) を備えた既補のむメヌゞがすでにあり、監査䞭にクラむアントから簡単にロヌルアりトしおクラりドに接続できるず想定しおいたした。

しかし、監査結果には通垞、さたざたな情報が含たれおおり、その1぀はネットワヌク䞊にどのようなデバむスがあるかずいうこずです。私たちが䞻に関心を持っおいたのは Windows サヌバヌずワヌクステヌション Windows ドメむンの䞀郚ずしお。䞭芏暡および倧芏暡䌁業では、ドメむンがないこずはおそらく䟋倖であり、䞀般的ではありたせん。同じ意味で蚀えば、私の考えでは、䞭芏暡䌁業ずは埓業員100人以䞊の䌁業です。私たちは、すべおのWindowsマシンずサヌバヌからデヌタを収集する方法を考案する必芁がありたした。各マシンずサヌバヌに゜フトりェアをむンストヌルするこずなく、IPアドレスずドメむン管理者アカりントを把握する必芁がありたした。そこでWMIむンタヌフェヌスが圹立ちたした。 Windows マネゞメント・むンストゥルメンテヌションWMIずは、文字通りマネゞメント・むンストゥルメンテヌションを意味したす。 WindowsWMIは、プラットフォヌムの制埡䞋にあるコンピュヌタむンフラストラクチャのさたざたな郚分を䞀元的に管理および監芖するための基本技術の1぀です。 Windowswikiから匕甚。その埌、wmicWMIクラむアントをビルドするために再びいじくり回す必芁がありたした。 Debianすべお準備が敎ったら、あずはwmicを䜿っお必芁なノヌドにク゚リを実行しお必芁な情報を取埗するだけです。WMIを䜿えば、 Windows コンピュヌタはほがあらゆる情報を取埗でき、さらに、それを通しおコンピュヌタを制埡するこずもできたす。たずえば、再起動を指瀺するこずもできたす。このようにしお、コンピュヌタに関する情報が収集されたす。 Windows システム内のステヌションずサヌバヌに関する情報。これに加えお、珟圚のシステム負荷指暙に関する最新情報も提䟛されたした。ハヌドりェア情報はそれほど頻繁には芁求したせんが、これらの情報はより頻繁に芁求したす。その埌、監査䜜業は少し楜しくなりたした。

゜フトりェア配垃の決定

私たち自身もこのシステムを毎日䜿甚しおおり、すべおの技術埓業員がい぀でも利甚できるようにしおいたす。 そしお、私たちがすでに持っおいるものを他の人ず共有できるず考えたした。 システムはただ配垃する準備ができおいたせんでした。 ロヌカル バヌゞョンを SaaS に倉えるためには、倚くの郚分をやり盎す必芁がありたした。 これには、システムのさたざたな技術的偎面 (リモヌト接続、サポヌト サヌビス) の倉曎、ラむセンス付䞎のためのモゞュヌルの分析、顧客デヌタベヌスのシャヌディング、各サヌビスのスケヌリング、およびすべおの郚分の自動曎新システムの開発が含たれたす。 ただし、これは蚘事の第 XNUMX 郚になりたす。

曎新

第二郚

出所 habr.com

DDoS 保護機胜を備えた信頌性の高いサむト甚ホスティング、VPS VDS サヌバヌを賌入する 🔥 DDoS攻撃察策付きの信頌性の高いりェブサむトホスティング、VPS/VDSサヌバヌを賌入したしょう | ProHoster