Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅?

Π’Π°ΠΊ слоТилось, Ρ‡Ρ‚ΠΎ я ΠΏΠΎ профСссии администратор ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСм ΠΈ сСтСй (ΠΊΠΎΡ€ΠΎΡ‡Π΅: сисадмин), ΠΈ довСлось ΠΏΠΎΠ²Π΅Π΄Π°Ρ‚ΡŒ Π·Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 10 Π»Π΅Ρ‚ ΠΏΡ€ΠΎΡ„. Π΄Π΅ΠΉΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ самых Ρ€Π°Π·Π½Ρ‹Ρ… систСм, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ [ΠΏΠΎ|Π·Π°]Π²Ρ‹ΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ€ бСзопасноти. А Π΅Ρ‰Π΅ слоТилось, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π½Π°Π·Π°Π΄ я Π½Π°ΡˆΡ‘Π» для сСбя интСрСсным Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½, ΠΈ Π½Π΅ просто ΠΈΠΌ попользовался, Π½ΠΎ ΠΈ запустил нСсколько ΠΌΠΈΠΊΡ€ΠΎ-сСрвисов, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΡΠ΅Ρ‚ΡŒΡŽ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½Π° (ΠΎΠ½ ΠΆΠ΅ p2p ΠΊΠ°ΠΊ Π½ΠΈΠΊΠ°ΠΊ) с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΊΠΈΠΊΠ° (я ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ сСбС dev, Ρ‚Π°ΠΊ, ΠΌΠΈΠΌΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ»). Но я Π½Π΅ ΠΏΡ€ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, я ΠΏΡ€ΠΎ бСзопасноС ΠΈ эффСктивноС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ЀинансовыС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (fintech) ΠΈΠ΄ΡƒΡ‚ рядом с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ (infosec) ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π±Π΅Π· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚, Π½ΠΎ Π½Π΅Π΄ΠΎΠ»Π³ΠΎ. Π’ΠΎΡ‚ поэтому я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ ΠΈ Π½Π°Π±ΠΎΡ€ΠΎΠΌ инструмСнтов Ρ‡Ρ‚ΠΎ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΊΠ°ΠΊ fintech, Ρ‚Π°ΠΊ ΠΈ infosec, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ ΠΈΠ»ΠΈ совсСм Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ расскаТу Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½, сколько ΠΏΡ€ΠΎ модСль инфраструктуры для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ эксплуатации финансовых (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ) сСрвисов β€” ΠΎΠ΄Π½ΠΈΠΌ словом Ρ‚Π΅Ρ… сСрвисов, Π³Π΄Π΅ «Π‘» ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ это ΠΊΠ°ΠΊ ΠΊ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΎΠ²ΠΎΠΉ Π±ΠΈΡ€ΠΆΠ΅, Ρ‚Π°ΠΊ ΠΈ ΠΊ самому Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΌΡƒ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌΡƒ Π·ΠΎΠΎΠΏΠ°Ρ€ΠΊΡƒ сСрвисов нСбольшой ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ с Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΎΠΌ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связанной.

Π₯ΠΎΡ‡Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ я сторонник ΠΏΡ€ΠΈΡ†ΠΈΠΏΠΎΠ² «keep it stupid simple» ΠΈ «less is more», поэтому ΠΊΠ°ΠΊ ΡΡ‚Π°Ρ‚ΡŒΡ, Ρ‚Π°ΠΊ ΠΈ описанноС Π² Π½Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ свойствами ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… эти ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹.

Π’ΠΎΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ сцСнарий: Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ всё Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°. ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ Ρ€ΡƒΠ±Π»Π΅ΠΉ, Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ², Π΅Π²Ρ€ΠΎ Π½Π° Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½Ρ‹ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, ΠΈ Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π½ΠΎ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… Π΄Π΅Π½Π΅Π³ Π²Ρ€ΠΎΠ΄Π΅ ΠΊΠΈΠ²ΠΈ ΠΈ webmoney, Ρ‚.Π΅. Ρƒ нас Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ всС ΡŽΡ€ΠΈΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ вопросы, имССтся Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполняСт Ρ€ΠΎΠ»ΡŒ ΠΏΠ»Π°Ρ‚Ρ‘ΠΆΠ½ΠΎΠ³ΠΎ шлюза для Ρ€ΡƒΠ±Π»Π΅ΠΉ, Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² ΠΈ Π΅Π²Ρ€ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½Ρ‹Ρ… систСм. Завязано с нашими банковскими счСтами ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΠ΅ API для Π½Π°ΡˆΠΈΡ… ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊ ΠΆΠ΅ Ρƒ нас Π΅ΡΡ‚ΡŒ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π΅ Ρ€ΠΎΠ»ΡŒ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ° для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½Ρƒ Π²Ρ€ΠΎΠ΄Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΈΠ²ΠΈ ΠΈΠ»ΠΈ webmoney ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π° β€” Π·Π°Π²Π΅Π΄ΠΈΡ‚Π΅ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Оно общаСтся с нашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ-шлюзом, ΠΏΡƒΡΡ‚ΡŒ ΠΏΠΎ REST API Π² Π»ΠΎΠΊΠ°Π»ΠΊΠ΅. И Π²ΠΎΡ‚ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½Ρ‹ ΠΈ Π·Π°ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΎΠ°ΠΏΠ³Ρ€Π΅ΠΉΠ΄ΠΈΡ‚ΡŒ инфраструктуру, Ρ‚.ΠΊ. ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ всС Π±Ρ‹Π»ΠΎ Π² спСшкС поднято Π½Π° виртуалбоксах Π² офисС ΠΏΠΎΠ΄ столом… сайтом стали ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π° ΠΌΡ‹ стали ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π·Π° Π°ΠΏΡ‚Π°ΠΉΠΌ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Ρ‘ΠΌ с основного β€” Π²Ρ‹Π±ΠΎΡ€ сСрвСра. Π’.ΠΊ. бизнСс Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ малСнький ΠΈ ΠΌΡ‹ довСряСм хостСру (OVH) ΠΌΡ‹ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ нСльзя ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ систСму ΠΈΠ· ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° .iso, Π½ΠΎ Π½Π΅ Π±Π΅Π΄Π°, ΠΎΡ‚Π΄Π΅Π» ИВ-бСзопасности ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Ρ‚ Π°Π½Π°Π»ΠΈΠ· установлСного ΠΎΠ±Ρ€Π°Π·Π°. А ΠΊΠΎΠ³Π΄Π° вырастСм, Ρ‚Π°ΠΊ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π°Ρ€Π΅Π½Π΄ΡƒΠ΅ΠΌ свой ΡˆΠΊΠ°Ρ„ ΠΏΠΎΠ΄ Π·Π°ΠΌΠΊΠΎΠΌ ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ΠΌ физичСским доступом, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ свой Π”Π¦ построим. Π’ любом случаС, стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π°Ρ€Π΅Π½Π΄Π΅ ΠΆΠ΅Π»Π΅Π·Π° ΠΈ установкС Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π΅ΡΡ‚ΡŒ шанс Ρ‡Ρ‚ΠΎ Ρƒ вас Π² систСмС Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΡΠ΅Ρ‚ΡŒ «Ρ‚роян ΠΎΡ‚ хостСра», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π½Π΅ для слСТки Π·Π° Π²Π°ΠΌΠΈ Π° для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ инструмСнты управлСния сСрвСром.

Установка сСрвСра

Π—Π΄Π΅ΡΡŒ всё просто. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΆΠ΅Π»Π΅Π·ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ нашим Π½ΡƒΠΆΠ΄Π°ΠΌ. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π· FreeBSD. Ну ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ (Π² случаС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ хостСра ΠΈ своСго ΠΆΠ΅Π»Π΅Π·Π°) ΠΏΠΎ IPMI ΠΈΠ»ΠΈ с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠΌ ΠΈ скармливаСм Π² Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ .iso FreeBSD ΠΎΠ±Ρ€Π°Π·Π°. Для ΠΎΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ установки я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ansible ΠΈ mfsbsd. ЕдинствСнноС, Π² нашСм случаС с kimsufi, ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ custom installation для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π΄Π²Π° диска Π² Π·Π΅Ρ€ΠΊΠ°Π»Π΅ ΠΈΠΌΠ΅Π»ΠΈ «ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΡƒΡŽ ΠΈ /home ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ пространство диска Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΎ, Π½ΠΎ ΠΎΠ± этом ΠΏΠΎΠ·ΠΆΠ΅.

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅?

Установка систСмы происходит стандартным способом, я Π½Π΅ Π±ΡƒΠ΄Ρƒ Π½Π° этом ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ, лишь ΠΎΡ‚ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ эксплуатации стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° hardening ΠΎΠΏΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ bsdinstaller Π² ΠΊΠΎΠ½Ρ†Π΅ установки (Ссли Π²Ρ‹ сами ставитС систСму):

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅?

Π•ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅, Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ я Ρ‚ΡƒΡ‚ Π΅Π³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡŽ.

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΡˆΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈ Π½Π° ΡƒΠΆΠ΅ установлСнной систСмС. Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ядра. *ee β€” это Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Ρ‚Π°ΠΊΠΎΠΉ Π² BSD

# ee /etc/rc.conf

...
#sec hard
clear_tmp_enable="YES"
syslogd_flags="-ss"    
sendmail_enable="NONE"

# ee /etc/sysctl.conf

...
#sec hard
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_proc_debug=0
kern.randompid=$(jot -r 1 9999)
security.bsd.stack_guard_page=1

Π’Π°ΠΊ ΠΆΠ΅ стоит убСдится, Ρ‡Ρ‚ΠΎ Ρƒ вас установлСна послСдняя вСрсия систСмы, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всС Π°ΠΏΠ΄Π΅ΠΉΡ‚Ρ‹ ΠΈ Π°ΠΏΠ³Ρ€Π΅ΠΉΠ΄Ρ‹. Π’ нашСм случаС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, трСбуСтся Π°ΠΏΠ³Ρ€Π΅ΠΉΠ΄ Π΄ΠΎ послСднСй вСрсии, Ρ‚.ΠΊ. прСдустановочныС ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΎΡ‚ΡΡ‚Π°ΡŽΡ‚ Π½Π° ΠΏΠΎΠ»Π³ΠΎΠ΄Π°-Π³ΠΎΠ΄. Ну ΠΈ Ρ‚Π°ΠΌ мСняСм SSH ΠΏΠΎΡ€Ρ‚ Π½Π° ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ ΠΏΠΎ-ΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, добавляСм Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ.

Π—Π°Ρ‚Π΅ΠΌ настраиваСм aide, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ состояния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² систСмы. Π‘ΠΎΠ»Π΅Π΅ Ρ€Π°Π·ΠΆΡ‘Π²Π°Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΡƒΡ‚.

pkg install aide

ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ наш ΠΊΡ€ΠΎΠ½Ρ‚Π°Π±

crontab -e

06 01 * * 0-6 /root/chkaide.sh

#! /bin/sh
#chkaide.sh
MYDATE=`date +%Y-%m-%d`
MYFILENAME="Aide-"$MYDATE.txt
/bin/echo "Aide check !! `date`" > /tmp/$MYFILENAME
/usr/local/bin/aide --check > /tmp/myAide.txt
/bin/cat /tmp/myAide.txt|/usr/bin/grep -v failed >> /tmp/$MYFILENAME
/bin/echo "**************************************" >> /tmp/$MYFILENAME
/usr/bin/tail -20 /tmp/myAide.txt >> /tmp/$MYFILENAME
/bin/echo "****************DONE******************" >> /tmp/$MYFILENAME

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ систСмноС Π°ΡƒΠ΄ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

sysrc auditd_enable=YES

# service auditd start

Как это Π΄Π΅Π»ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ описано Π² руководствС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ пСрСзагруТаСмся ΠΈ приступаСм ΠΊ софту Π½Π° сСрвСрС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ сСрвСр прСдставляСт ΠΈΠ· сСбя Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½Ρ‹Ρ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ процСссор ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» VT-x ΠΈ EPT Ссли ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

Π’ качСствС ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ cbsd ΠΎΡ‚ olevole, ТСлаю побольшС Π΅ΠΌΡƒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΠΈ Π±Π»Π°Π³ Π·Π° эту ΠΏΡ€Π΅ΠΊΡ€Π°ΡΠ½ΡƒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ!

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹? ΠžΠΏΡΡ‚ΡŒ docker Ρ‡Ρ‚ΠΎ Π»ΠΈ?

А Π²ΠΎΡ‚ ΠΈ Π½Π΅Ρ‚. FreeBSD Jails β€” это прСкрасный инструмСнт для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅Π·Π°Ρ†ΠΈΠΈ, Π½Ρƒ Π° упомянутый cbsd для оркСстрации этих ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ имя β€” ΠΊΠ»Π΅Ρ‚ΠΊΠΈ.

ΠšΠ»Π΅Ρ‚ΠΊΠ° это ΠΊΡ€Π°ΠΉΠ½Π΅ эффСктивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для построСния инфраструктуры для самых Ρ€Π°Π·Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ, Π³Π΄Π΅ Π² ΠΈΡ‚ΠΎΠ³Π΅ трСбуСтся полная изоляция ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… сСрвисов ΠΈΠ»ΠΈ процСссов. По сути это ΠΊΠ»ΠΎΠ½ хост-систСмы, Π½ΠΎ Π΅ΠΌΡƒ Π½Π΅ трСбуСтся полная виртуализация «ΠΆΠ΅Π»Π΅Π·Π°». И рСсурсы благодаря этому Π½Π΅ тратятся Π½Π° «Π³ΠΎΡΡ‚Π΅Π²ΡƒΡŽ ОБ», Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Когда ΠΊΠ»Π΅Ρ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Π½ΡƒΠΆΠ΄, это ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования рСсурса β€” ΠΊΡƒΡ‡Π° ΠΊΠ»Π΅Ρ‚ΠΎΠΊ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π½ΠΎΠΌ сСрвСрС ΠΌΠΎΠ³ΡƒΡ‚ каТдая ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вСсь рСсурс сСрвСра ΠΏΡ€ΠΈ нСобходимости. Учитывая Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ подсСрвисам Π½ΡƒΠΆΠ½Ρ‹ Π΄ΠΎΠΏ. рСсурсы Π² Ρ€Π°Π·Π½ΠΎΠ΅ врСмя, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвСра ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ссли ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°ΡΠ±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСрами. Π’ случаС нСобходимости ΠΊΠ»Π΅Ρ‚ΠΊΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈ Π²Ρ‹ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ограничСния ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌΡƒ рСсурсу.

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅?

А Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ с ΠΏΠΎΠ»Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ?

Насколько ΠΌΠ½Π΅ извСстно, cbsd ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ bhyve ΠΈ XEN Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€Ρ‹. Π’Ρ‚ΠΎΡ€Ρ‹ΠΌ я Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ пользовался, Π° Π²ΠΎΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ это ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠΉ Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€ ΠΎΡ‚ FreeBSD. ΠœΡ‹ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования bhyve Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π°Π»Π΅Π΅.

Установка ΠΈ настройка окруТСния хоста

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π€Π‘ ZFS. Π­Ρ‚ΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для управлСния пространства Π½Π° сСрвСрС. Благодаря ZFS ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· дисков ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ массивы самых Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ, динамичСски «Π² Π³ΠΎΡ€ΡΡ‡ΡƒΡŽ» Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ пространство, ΠΌΠ΅Π½ΡΡ‚ΡŒ ΡƒΠΌΠ΅Ρ€ΡˆΠΈΠ΅ диски, ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΡΠ½Π°ΠΏΡˆΠΎΡ‚Π°ΠΌΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅, ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² Ρ†Π΅Π»ΠΎΠΉ сСрии статСй. ВСрнёмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ сСрвСру ΠΈ Π΅Π³ΠΎ дискам. Π’ Π½Π°Ρ‡Π°Π»Π΅ установки Π½Π° дисках ΠΌΡ‹ оставили свободноС пространство для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ? Π­Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ систСма поднималась автоматичСски ΠΈ ΡΠ»ΡƒΡˆΠ°Π»Π° ΠΏΠΎ SSH.

gpart add -t freebsd-zfs /dev/ada0

/dev/ada0p4 added!

добавляСм Ρ€Π°Π·Π΄Π΅Π» диска Π½Π° ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π΅ΡΡ мСсто

geli init /dev/ada0p4

Π²Π±ΠΈΠ²Π°Π΅ΠΌ наш ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

geli attach /dev/ada0p4

ΠΎΠΏΡΡ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈ Ρƒ нас появляСтся дСвайс /dev/ada0p4.eli β€” это ΠΈ Π΅ΡΡ‚ΡŒ нашС Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ пространство. Π—Π°Ρ‚Π΅ΠΌ повторяСм Ρ‚ΠΎΠΆΠ΅ самоС для /dev/ada1 ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… дисков Π² массивС. И создаСм Π½ΠΎΠ²Ρ‹ΠΉ ZFS pool.

zpool create vms mirror /dev/ada0p4.eli /dev/ada1p4.eli /dev/ada3p4.eli β€” Π½Ρƒ Π²ΠΎΡ‚, Ρƒ нас ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΠΎΠ΅Π²ΠΎΠΉ Π½Π°Π±ΠΎΡ€ Π³ΠΎΡ‚ΠΎΠ². Π—Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ массив дисков Π½Π° случай Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… ΠΈΠ· строя.

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ датасСт Π½Π° Π½ΠΎΠ²ΠΎΠΌ «ΠΏΡƒΠ»Π΅»

zfs create vms/jails

pkg install cbsd β€” запустили ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΠΈ устанавливаСм ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚ для Π½Π°ΡˆΠΈΡ… ΠΊΠ»Π΅Ρ‚ΠΎΠΊ.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ cbsd установлСн, Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

# env workdir="/vms/jails" /usr/local/cbsd/sudoexec/initenv

Π½Ρƒ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅ΠΌ Π½Π° ΠΊΡƒΡ‡Ρƒ вопросов, Π² основном ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

*Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π²Π°ΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π΄Π΅ΠΌΠΎΠ½ cbsdd Π½Π΅ стартовал автоматичСски, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΡƒΠ΅Ρ‚Π΅ диски Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ автоматичСски (Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это Π΄Π΅Π»Π°Π΅Ρ‚ zabbix)

**Π’Π°ΠΊ ΠΆΠ΅ я Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ NAT ΠΎΡ‚ cbsd, Π° Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽ Π΅Π³ΠΎ сам Π² pf.

# sysrc pf_enable=YES

# ee /etc/pf.conf

IF_PUBLIC="em0"
IP_PUBLIC="1.23.34.56"
JAIL_IP_POOL="192.168.0.0/24"

#WHITE_CL="{ 127.0.0.1 }"

icmp_types="echoreq"

set limit { states 20000, frags 20000, src-nodes 20000 }
set skip on lo0
scrub in all

#NAT for jails
nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC

## Bitcoin network port forward
IP_JAIL="192.168.0.1"
PORT_JAIL="{8333}"
rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL

# service pf start

# pfctl -f /etc/pf.conf

Настройка ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ Ρ„Π°Π΅Ρ€Π²ΠΎΠ»Π° это Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π΅ΠΌΠ°, поэтому я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² настройку ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ BLOCK ALL ΠΈ настройки Π±Π΅Π»Ρ‹Ρ… списков, это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΡ‡ΠΈΡ‚Π°Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»-Π²Π° статСй доступных Π² Π³ΡƒΠ³Π»Π΅.

Ну Ρ‡Ρ‚ΠΎ Т… Ρƒ нас установлСна cbsd, ΠΏΠΎΡ€Π° ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ Π»ΠΎΡˆΠ°Π΄ΠΊΡƒ β€” Π΄Π΅ΠΌΠΎΠ½ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½Π° Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅!

cbsd jconstruct-tui

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅?

Π’ΡƒΡ‚ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ создания ΠΊΠ»Π΅Ρ‚ΠΊΠΈ. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ всС значСния выставили, создаСм!

ΠŸΡ€ΠΈ создании ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ, слСдуСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС основы для ΠΊΠ»Π΅Ρ‚ΠΎΠΊ. Π― Π²Ρ‹Π±ΠΈΡ€Π°ΡŽ стрибутив с рСпозитория FreeBSD ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ repo. Π­Ρ‚ΠΎΡ‚ Π²Ρ‹Π±ΠΎΡ€ производится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ создании ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ вСрсии (Ρ…ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ Π»ΡŽΠ±Ρ‹Ρ… вСрсий, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ€ΡˆΠ΅ вСрсии хоста).

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ всС установлСно β€” запускаСм ΠΊΠ»Π΅Ρ‚ΠΊΡƒ!

# cbsd jstart bitcoind

Но Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π² ΠΊΠ»Π΅Ρ‚Ρƒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ софт.

# jls

   JID  IP Address      Hostname                      Path
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind

jexec bitcoind Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² консоль ΠΊΠ»Π΅Ρ‚ΠΊΠΈ

ΠΈ ΡƒΠΆΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ устанавливаСм софт с Π΅Π³ΠΎ зависимостями (наша хост-систСма ΠΎΡΡ‚Π°Π΅Ρ‚ΡŒΡΡ чистой)

bitcoind:/@[15:25] # pkg install bitcoin-daemon bitcoin-utils

bitcoind:/@[15:30] # sysrc bitcoind_enable=YES

bitcoind:/@[15:30] # service bitcoind start

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ Π΅ΡΡ‚ΡŒ, Π½ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡΡ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠ»Π΅Ρ‚ΠΊΠ°ΠΌ ΠΏΠΎ сСти ВОР. И Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρƒ нас Π² ΠΏΠ»Π°Π½Π°Ρ… Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠ»Π΅Ρ‚ΠΎΠΊ с ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ софтом ΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· прокси. Благодаря pf ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ NAT ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π½Π½ΠΎΠΌΡƒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ IP адрСсов Π² локальной сСти, ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ NAT Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для нашСго TOR-ΡƒΠ·Π»Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π΄Π°ΠΆΠ΅ Ссли Π² ΠΊΠ»Π΅Ρ‚ΠΊΡƒ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π·Π»ΠΎΠ²Ρ€Π΅Π΄, ΠΎΠ½ вСроятнСС всСго Π½Π΅ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ Π½Π° связь с внСшним ΠΌΠΈΡ€ΠΎΠΌ, Π° Ссли ΠΈ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚, Ρ‚ΠΎ Π½Π΅ раскроСт IP нашСго сСрвСра. поэтому ΠΌΡ‹ создаСм Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, для «ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡΠ°» сСрвисов ΠΊΠ°ΠΊ «.onion»-сСрвис ΠΈ ΠΊΠ°ΠΊ прокси для Π²Ρ‹Ρ…ΠΎΠ΄Π° Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»Π΅Ρ‚ΠΊΠ°ΠΌ.

# cbsd jsconstruct-tui

# cbsd jstart tor

# jexec tor

tor:/@[15:38] # pkg install tor

tor:/@[15:38] # sysrc tor_enable=YES

tor:/@[15:38] # ee /usr/local/etc/tor/torrc

Π‘Ρ‚Π°Π²ΠΈΠΌ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ Π½Π° локальом адрСсС (для всСх ΠΊΠ»Π΅Ρ‚ΠΎΠΊ доступСн)

SOCKSPort 192.168.0.2:9050

Π§Π΅Π³ΠΎ ΠΆΠ΅ Π½Π°ΠΌ Π΅Ρ‰Π΅ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΡΡ‡Π°ΡΡ‚ΡŒΡ. Π”Π°, Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ сСрвис для нашСго Π²Π΅Π±Π°, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Запустим nginx, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€ΠΎΠ»ΡŒ reverse-proxy ΠΈ заботится ΠΎ ΠΏΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠΈ Let’s Encrypt сСртификатов

# cbsd jsconstruct-tui

# cbsd jstart nginx-rev

# jexec nginx-rev

nginx-rev:/@[15:47] # pkg install nginx py36-certbot

И Π²ΠΎΡ‚ 150 ΠœΠ‘ зависимостСй ΠΌΡ‹ помСстили Π² ΠΊΠ»Π΅Ρ‚ΠΊΡƒ. А хост ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ чист.

вСрнСмся ΠΊ настройкС nginx ΠΏΠΎΠ·ΠΆΠ΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π΄Π²Π΅ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ для нашСго ΠΏΠ»Π°Ρ‚Ρ‘ΠΆΠ½ΠΎΠ³ΠΎ шлюза Π½Π° nodejs ΠΈ rust ΠΈ Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ, которая ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π½Π° Π°ΠΏΠ°Ρ‡Π΅ ΠΈ ΠΏΡ…ΠΏ, Π° Π΅Ρ‰Π΅ для послСднСй Π½ΡƒΠΆΠ½Π° Π‘Π” MySQL.

# cbsd jsconstruct-tui

# cbsd jstart paygw

# jexec paygw

paygw:/@[15:55] # pkg install git node npm

paygw:/@[15:55] # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

… ΠΈ Π΅Ρ‰Π΅ 380 ΠœΠ‘ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ

Π΄Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π³ΠΈΡ‚ΠΎΠΌ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ запускаСм.

# cbsd jsconstruct-tui

# cbsd jstart webapp

# jexec webapp

webapp:/@[16:02] # pkg install mariadb104-server apache24 php74 mod_php74 php74-pdo_mysql

450 ΠœΠ‘ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅.

Ρ‚ΡƒΡ‚ Π΄Π°Π΅ΠΌ доступ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΠΎ SSH прям Π² ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, ΠΎΠ½ΠΈ Ρ‚Π°ΠΌ сами всё ΡΠ΄Π΅Π»Π°ΡŽΡ‚:

webapp:/@[16:02] # ee /etc/ssh/sshd_config

Port 2267 β€” мСняСм ΠΏΠΎΡ€Ρ‚ SSH ΠΊΠ»Π΅Ρ‚ΠΊΠΈ Π½Π° любой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ

webapp:/@[16:02] # sysrc sshd_enable=YES

webapp:/@[16:02] # service sshd start

Ну Π²ΠΎΡ‚, сСрвис Π·Π°ΠΏΡƒΡ‰Π΅Π½, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π² pf firewall

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ ΠΊΠ°ΠΊΠΈΠ΅ Ρƒ нас ИП Ρƒ ΠΊΠ»Π΅Ρ‚ΠΎΠΊ ΠΈ ΠΊΠ°ΠΊ Π²ΠΎΠΎΠ±Ρ‰Π΅ выглядит наша «Π»ΠΎΠΊΠ°Π»ΠΊΠ°»

# jls

   JID  IP Address      Hostname                      Path
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind
     2  192.168.0.2     tor.space.com                 /zroot/jails/jails/tor
     3  192.168.0.3     nginx-rev.space.com           /zroot/jails/jails/nginx-rev
     4  192.168.0.4     paygw.space.com               /zroot/jails/jails/paygw
     5  192.168.0.5     webapp.my.domain              /zroot/jails/jails/webapp

ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ

# ee /etc/pf.conf

## SSH for web-Devs
IP_JAIL="192.168.0.5"
PORT_JAIL="{ 2267 }"
rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL

Π½Ρƒ ΠΈ Ρ€Π°Π· ΡƒΠΆ ΠΌΡ‹ Ρ‚ΡƒΡ‚, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π° Π½Π° reverse-proxy:

## web-ports for nginx-rev
IP_JAIL="192.168.0.3"
PORT_JAIL="{ 80, 443 }"
rdr pass on $IF_PUBLIC proto tcp from any to $IP_PUBLIC port $PORT_JAIL -> $IP_JAIL

# pfctl -f /etc/pf.conf

Ну Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½Π°Ρ…

Π§Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ β€” Ρƒ нас Π΅ΡΡ‚ΡŒ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ доступно снаруТи, ΠΈ ΠΎΠ½ΠΎ локально общаСтся с нашим ΠΏΠ»Π°Ρ‚Ρ‘ΠΆΠ½Ρ‹ΠΌ шлюзом. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ для взаимодСйствия с самой ΡΠ΅Ρ‚ΡŒΡŽ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½Π° β€” Π½ΠΎΠ΄Π° bitcoind это всСго лишь Π΄Π΅ΠΌΠΎΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ копию Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° Π°ΠΊΡƒΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ. Π£ этого Π΄Π΅ΠΌΠΎΠ½Π° Π΅ΡΡ‚ΡŒ RPC ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» кошСлька, ΠΎΠ΄Π½Π°ΠΊΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ «ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ». Для Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ electrum β€” это CLI кошСлСк. Π­Ρ‚ΠΎΡ‚ кошСлСк Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС «Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°» для Π½Π°ΡˆΠΈΡ… Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΎΠ² β€” Π² ΠΎΠ±Ρ‰Π΅ΠΌ Ρ‚Π΅ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ «Π²Π½Π΅» систСмы доступной ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ подальшС ΠΎΡ‚ всСх. Π£ Π½Π΅Π³ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Π΅ΡΡ‚ΡŒ GUI, поэтому Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ кошСлСк ΠΌΡ‹ собираСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρƒ сСбя Π½Π°
Π»Π°ΠΏΡ‚ΠΎΠΏΠ°Ρ…. Пока Π±ΡƒΠ΄Π΅ΠΌ Π΅Π»Π΅ΠΊΡ‚Ρ€ΡƒΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ сСрвСрами, Π° ΠΏΠΎΠ·ΠΆΠ΅ Π² Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅ΠΌ ElectrumX, Ρ‡Ρ‚ΠΎ Π± совсСм Π½ΠΈ ΠΎΡ‚ ΠΊΠΎΠ³ΠΎ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ‚ΡŒ.

# cbsd jsconstruct-tui

# cbsd jstart electrum

# jexec electrum

electrum:/@[8:45] # pkg install py36-electrum

Π΅Ρ‰Π΅ 700 ΠœΠ‘ софта Ρƒ нас Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅

electrum:/@[8:53] # adduser

Username: wallet
Full name: 
Uid (Leave empty for default): 
Login group [wallet]: 
Login group is wallet. Invite wallet into other groups? []: 
Login class [default]: 
Shell (sh csh tcsh nologin) [sh]: tcsh
Home directory [/home/wallet]: 
Home directory permissions (Leave empty for default): 
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]: 
Username   : wallet
Password   : <disabled>
Full Name  : 
Uid        : 1001
Class      : 
Groups     : wallet 
Home       : /home/wallet
Home Mode  : 
Shell      : /bin/tcsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (wallet) to the user database.
Add another user? (yes/no): no
Goodbye!
electrum:/@[8:53] # su wallet

electrum:/@[8:53] # su wallet

wallet@electrum:/ % electrum-3.6 create

{
    "msg": "Please keep your seed in a safe place; if you lose it, you will not be able to restore your wallet.",
    "path": "/usr/home/wallet/.electrum/wallets/default_wallet",
    "seed": "jealous win pig material ribbon young punch visual okay cactus random bird"
}

Π’ΠΎΡ‚ Ρƒ нас Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ создан кошСлСк.

wallet@electrum:/ % electrum-3.6 listaddresses

[
    "18WEhbjvMLGRMfwudzUrUd25U5C7uZYkzE",
    "14XHSejhxsZNDRtk4eFbqAX3L8rftzwQQU",
    "1KQXaN8RXiCN1ne9iYngUWAr6KJ6d4pPas",
    ...
    "1KeVcAwEYhk29qEyAfPwcBgF5mMMoy4qjw",
    "18VaUuSeBr6T2GwpSHYF3XyNgLyLCt1SWk"
]

wallet@electrum:/ % electrum-3.6 help

К Π½Π°ΡˆΠ΅ΠΌΡƒ on-chain ΠΊΠΎΡˆΠ΅Π»ΡŒΠΊΡƒ Π²ΠΏΡ€Π΅Π΄ΡŒ смоТСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ΠΉ ΠΊΡ€ΡƒΠ³ Π»ΠΈΡ†. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ доступ ΠΈΠ·Π²Π½Π΅ Π² эту ΠΊΠ»Π΅Ρ‚ΠΊΡƒ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ SSH Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ВОР (Ρ‚Π°ΠΊΠΎΠΉ Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ VPN). ЗапускаСм Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ SSH, Π½ΠΎ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Π΅ΠΌ наш pf.conf Π½Π° хостС.

electrum:/@[9:00] # sysrc sshd_enable=YES

electrum:/@[9:00] # service sshd start

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ с кошСльком Π²Ρ‹Ρ…ΠΎΠ΄ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. ΠŸΠΎΡΡ‚Π°Π²ΠΈΠΌ Π΅ΠΉ IP-адрСс ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ пространства подсСти, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ NAT-ится. Π‘Π½Π°Ρ‡Π°Π»Π° помСняСм /etc/pf.conf Π½Π° хостС

# ee /etc/pf.conf

JAIL_IP_POOL="192.168.0.0/24" смСним Π½Π° JAIL_IP_POOL="192.168.0.0/25", Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ всС адрСса 192.168.0.126-255 Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ прямого доступа Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. Π­Π΄Π°ΠΊΠΈΠΉ софтварный «air-gap» network. И NAT ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΡΡ‚Π°Π΅Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ

nat pass on $IF_PUBLIC from $JAIL_IP_POOL to any -> $IP_PUBLIC

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°

# pfctl -f /etc/pf.conf

Π’Π΅ΠΏΠ΅Ρ€ΡŒ бСрСмся Π·Π° Π½Π°ΡˆΡƒ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ

# cbsd jconfig jname=electrum

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅?

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅?

jset mode=quiet jname=electrum ip4_addr="192.168.0.200"
Remove old IP: /sbin/ifconfig em0 inet 192.168.0.6 -alias
Setup new IP: /sbin/ifconfig em0 inet 192.168.0.200 alias
ip4_addr: 192.168.0.200

Π₯ΠΌ, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас пСрСстанСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ сама систСма. Однако ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ систСмный proxy. Но Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π½ΠΎ, Π½Π° TOR это SOCKS5 прокси, Π° для удобства Π½Π°ΠΌ Π±Ρ‹ Π΅Ρ‰Π΅ HTTP прокси.

# cbsd jsconstruct-tui

# cbsd jstart polipo

# jexec polipo

polipo:/@[9:28] # pkg install polipo

polipo:/@[9:28] # ee /usr/local/etc/polipo/config

socksParentProxy = "192.168.0.2:9050"
socksProxyType = socks5

polipo:/@[9:42] # sysrc polipo_enable=YES

polipo:/@[9:43] # service polipo start

Ну Π²ΠΎΡ‚, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² нашСй систСмС Π΅ΡΡ‚ΡŒ Π΄Π²Π° прокси-сСрвСра, ΠΈ ΠΎΠ±Π° выводят Ρ‡Π΅Ρ€Π΅Π· TOR: socks5://192.168.0.2:9050 ΠΈ http://192.168.0.6:8123

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ нашСго кошСлька

# jexec electrum

electrum:/@[9:45] # su wallet

wallet@electrum:/ % ee ~/.cshrc

#in the end of file proxy config
setenv http_proxy http://192.168.0.6:8123
setenv https_proxy http://192.168.0.6:8123

Π½Ρƒ Π²ΠΎΡ‚, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ шСлл Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ·-ΠΏΠΎΠ΄ прокси. Если Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Ρ‚ΠΎ стоит Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² /usr/local/etc/pkg.conf ΠΈΠ· ΠΏΠΎΠ΄ Ρ€ΡƒΡ‚Π° ΠΊΠ»Π΅Ρ‚ΠΊΠΈ

pkg_env: {
               http_proxy: "http://my_proxy_ip:8123",
           }

Ну Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ TOR hidden service Π² качСствС адрСса нашСго SSH сСрвиса Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ кошСлька.

# jexec tor

tor:/@[9:59] # ee /usr/local/etc/tor/torrc

HiddenServiceDir /var/db/tor/electrum/
HiddenServicePort 22 192.168.0.200:22

tor:/@[10:01] # mkdir /var/db/tor/electrum

tor:/@[10:01] # chown -R _tor:_tor /var/db/tor/electrum

tor:/@[10:01] # chmod 700 /var/db/tor/electrum

tor:/@[10:03] # service tor restart

tor:/@[10:04] # cat /var/db/tor/electrum/hostname

mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion

Π’ΠΎΡ‚ ΠΎΠ½ наш адрСс для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ c локальной ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Но сначала Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ наш SSH-ΠΊΠ»ΡŽΡ‡:

wallet@electrum:/ % mkdir ~/.ssh

wallet@electrum:/ % ee ~/.ssh/authorized_keys

ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAG9Fk2Lqi4GQ8EXZrsH3EgSrVIQPQaAlS38MmJLBabihv9KHIDGXH7r018hxqLNNGbaJWO/wrWk7sG4T0yLHAbdQAFsMYof9kjoyuG56z0XZ8qaD/X/AjrhLMsIoBbUNj0AzxjKNlPJL4NbHsFwbmxGulKS0PdAD5oLcTQi/VnNdU7iFw== user@local

Ну ΠΈ с клиСнтской линукс-ΠΌΠ°ΡˆΠΈΠ½Ρ‹

user@local ~$ nano ~/.ssh/config

#remote electrum wallet
Host remotebtc
        User wallet
        Port 22
        Hostname mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion
        ProxyCommand /bin/ncat --proxy localhost:9050 --proxy-type socks5 %h %p

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ (Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ это Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π½ΡƒΠΆΠ΅Π½ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π΅ΠΌΠΎΠ½ TOR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ Π½Π° 9050)

user@local ~$ ssh remotebtc

The authenticity of host 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:iW8FKjhVF4yyOZB1z4sBkzyvCM+evQ9cCL/EuWm0Du4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'mdjus4gmduhofwcso57b3zl3ufoitguh2knitjco5cmgrokpreuxumad.onion' (ECDSA) to the list of known hosts.
FreeBSD 12.1-RELEASE-p1 GENERIC 
To save disk space in your home directory, compress files you rarely
use with "gzip filename".
        -- Dru <[email protected]>
wallet@electrum:~ % logout

УспСх!

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ-ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°ΠΌΠΈ Π½Π°ΠΌ Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π½ΠΎΠ΄Π° Lightning Network, собствСнно это Π±ΡƒΠ΄Π΅Ρ‚ наш основной Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ инструмСнт с Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΎΠΌ. Π£ *c-lightning, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ собираСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Π΄Π΅ΠΌΠΎΠ½Π°, Π΅ΡΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ Sparko, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΌ HTTP (REST) интСрфСйсом ΠΈ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с off-chain транзакциями, Ρ‚Π°ΠΊ ΠΈ с on-chain транзакциями. c-lightning для функционирования Π½ΡƒΠΆΠ½Π° bitcoind Π½ΠΎΠ΄Π°.

*Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ рСализация Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ЯП ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Lightning Network. Из Ρ‚Π΅Ρ… Ρ‡Ρ‚ΠΎ ΠΌΡ‹ протСстировали c-lightning (написан Π½Π° Π‘) показался Π½Π°ΠΉΠ±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈ рСсурсо-эффСктивным

# cbsd jsconstruct-tui

# cbsd jstart cln

# jexec cln

lightning:/@[10:23] # adduser

Username: lightning
...

lightning:/@[10:24] # pkg install git

lightning:/@[10:23] # su lightning

cd ~ && git clone https://github.com/ElementsProject/lightning

lightning@lightning:~ % exit

lightning:/@[10:30] # cd /home/lightning/lightning/

lightning:/home/lightning/lightning@[10:31] # pkg install autoconf automake gettext git gmp gmake libtool python python3 sqlite3 libsodium py36-mako bash bitcoin-utils

lightning:/home/lightning/lightning@[10:34] # ./configure && gmake && gmake install

Пока компилируСтся ΠΈ инсталируСтся всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅, создадим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ RPC для lightningd Π² bitcoind

# jexec bitcoind

bitcoind:/@[10:36] # ee /usr/local/etc/bitcoin.conf

rpcbind=192.168.0.1
rpcuser=test
rpcpassword=test
#allow only c-lightning
rpcallowip=192.168.0.7/32

bitcoind:/@[10:39] # service bitcoind restart

ΠœΠΎΡ‘ Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»Π΅Ρ‚ΠΊΠ°ΠΌΠΈ оказываСтся Π½Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΡƒΠΆ ΠΈ Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π½Ρ‹ΠΌ Ссли ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ tmux, которая позволяСт Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠΉ сСссии ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ мноТСство ΠΏΠΎΠ΄-сСссий Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ². Аналог: screen

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅?

Вакс, ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ IP нашСй Π½ΠΎΠ΄Ρ‹, ΠΈ Ρ…ΠΎΡ‚ΠΈΠΌ вСсти всС финансовыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· ВОР. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π° Π½ΡƒΠΆΠ΅Π½ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ .onion.

# jexec tor

tor:/@[9:59] # ee /usr/local/etc/tor/torrc

HiddenServiceDir /var/db/tor/cln/
HiddenServicePort 9735 192.168.0.7:9735

tor:/@[10:01] # mkdir /var/db/tor/cln

tor:/@[10:01] # chown -R _tor:_tor /var/db/tor/cln

tor:/@[10:01] # chmod 700 /var/db/tor/cln

tor:/@[10:03] # service tor restart

tor:/@[10:04] # cat /var/db/tor/cln/hostname

en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.onion

Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ создадим ΠΊΠΎΠ½Ρ„ΠΈΠ³ для c-lightning

lightning:/home/lightning/lightning@[10:31] # su lightning

lightning@lightning:~ % mkdir .lightning

lightning@lightning:~ % ee .lightning/config

alias=My-LN-Node
bind-addr=192.168.0.7:9735
rgb=ff0000
announce-addr=en5wbkavnytti334jc5uzaudkansypfs6aguv6kech4hbzpcz2ove3yd.onion:9735
network=bitcoin
log-level=info
fee-base=0
fee-per-satoshi=1
proxy=192.168.0.2:9050
log-file=/home/lightning/.lightning/c-lightning.log
min-capacity-sat=200000

# sparko plugin
# https://github.com/fiatjaf/lightningd-gjson-rpc/tree/master/cmd/sparko

sparko-host=192.168.0.7
sparko-port=9737

sparko-tls-path=sparko-tls

#sparko-login=mywalletusername:mywalletpassword

#sparko-keys=masterkey;secretread:+listchannels,+listnodes;secretwrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice
sparko-keys=masterkey;secretread:+listchannels,+listnodes;ultrawrite:+invoice,+listinvoices,+delinvoice,+decodepay,+waitpay,+waitinvoice
# for the example above the initialization logs (mixed with lightningd logs) should print something like

lightning@lightning:~ % mkdir .lightning/plugins

lightning@lightning:~ % cd .lightning/plugins/

lightning@lightning:~/.lightning/plugins:% fetch https://github.com/fiatjaf/sparko/releases/download/v0.2.1/sparko_full_freebsd_amd64

lightning@lightning:~/.lightning/plugins % mkdir ~/.lightning/sparko-tls

lightning@lightning:~/.lightning/sparko-tls % cd ~/.lightning/sparko-tls

lightning@lightning:~/.lightning/sparko-tls % openssl genrsa -out key.pem 2048

lightning@lightning:~/.lightning/sparko-tls % openssl req -new -x509 -sha256 -key key.pem -out cert.pem -days 3650

lightning@lightning:~/.lightning/plugins % chmod +x sparko_full_freebsd_amd64

lightning@lightning:~/.lightning/plugins % mv sparko_full_freebsd_amd64 sparko

lightning@lightning:~/.lightning/plugins % cd ~

Π½ΡƒΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для bitcoin-cli, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Ρ‡Ρ‚ΠΎ общаСтся с bitcoind

lightning@lightning:~ % mkdir .bitcoin

lightning@lightning:~ % ee .bitcoin/bitcoin.conf

rpcconnect=192.168.0.1
rpcuser=test
rpcpassword=test

провСряСм

lightning@lightning:~ % bitcoin-cli echo "test"

[
  "test"
]

запускаСм lightningd

lightning@lightning:~ % lightningd --daemon

Π‘Π°ΠΌ lightningd ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ lightning-cli, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

lightning-cli newaddr ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс для Π½ΠΎΠ²ΠΎΠ³ΠΎ входящСго ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°

{
   "address": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv",
   "bech32": "bc1q2n2ffq3lplhme8jufcxahfrnfhruwjgx3c78pv"
}

lightning-cli withdraw bc1jufcxahfrnfhruwjgx3cq2n2ffq3lplhme878pv all ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° адрСс всС дСньги кошСлька (всСх ΠΎΠ½-Ρ‡Π΅ΠΉΠ½ адрСсов)

Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для off-chain ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ lightning-cli invoice, lightning-cli listinvoices, lightning-cli pay ΠΈΡ‚Π΄.

Ну Π° для ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρƒ нас Π΅ΡΡ‚ΡŒ REST Api

curl -k https://192.168.0.7:9737/rpc -d '{"method": "pay", "params": ["lnbc..."]}' -H 'X-Access masterkey'

ПодвСдСм ΠΈΡ‚ΠΎΠ³ΠΈ

# jls

   JID  IP Address      Hostname                      Path
     1  192.168.0.1     bitcoind.space.com            /zroot/jails/jails/bitcoind
     2  192.168.0.2     tor.space.com                 /zroot/jails/jails/tor
     3  192.168.0.3     nginx-rev.space.com           /zroot/jails/jails/nginx-rev
     4  192.168.0.4     paygw.space.com               /zroot/jails/jails/paygw
     5  192.168.0.5     webapp.my.domain              /zroot/jails/jails/webapp
     7  192.168.0.200   electrum.space.com            /zroot/jails/jails/electrum
     8  192.168.0.6     polipo.space.com              /zroot/jails/jails/polipo
     9  192.168.0.7     lightning.space.com           /zroot/jails/jails/cln

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅?

Π£ нас имССтся Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ со своим ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ доступа ΠΊΠ°ΠΊ ΠΈΠ· Ρ‚Π°ΠΊ ΠΈ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ.

# zfs list

NAME                    USED  AVAIL  REFER  MOUNTPOINT
zroot                   279G  1.48T    88K  /zroot
zroot/ROOT             1.89G  1.48T    88K  none
zroot/ROOT/default     1.89G  17.6G  1.89G  /
zroot/home               88K  1.48T    88K  /home
zroot/jails             277G  1.48T   404M  /zroot/jails
zroot/jails/bitcoind    190G  1.48T   190G  /zroot/jails/jails-data/bitcoind-data
zroot/jails/cln         653M  1.48T   653M  /zroot/jails/jails-data/cln-data
zroot/jails/electrum    703M  1.48T   703M  /zroot/jails/jails-data/electrum-data
zroot/jails/nginx-rev   190M  1.48T   190M  /zroot/jails/jails-data/nginx-rev-data
zroot/jails/paygw      82.4G  1.48T  82.4G  /zroot/jails/jails-data/paygw-data
zroot/jails/polipo     57.6M  1.48T  57.6M  /zroot/jails/jails-data/polipo-data
zroot/jails/tor        81.5M  1.48T  81.5M  /zroot/jails/jails-data/tor-data
zroot/jails/webapp      360M  1.48T   360M  /zroot/jails/jails-data/webapp-data

Как Π²ΠΈΠ΄Π½ΠΎ, bitcoind Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всС 190 Π“Π‘ пространства. А Ρ‡Ρ‚ΠΎ Ссли Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Π½ΠΎΠ΄Π° для тСстов? Π’ΡƒΡ‚ ZFS ΠΊΠ°ΠΊ Π½ΠΈΠΊΠ°ΠΊ кстати. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ cbsd jclone old=bitcoind new=bitcoind-clone host_hostname=clonedbtc.space.com ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ½Π°ΠΏΡˆΠΎΡ‚ ΠΈ ΠΏΠΎΠ΄Π²ΡΠ·Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ ΠΊ этому ΡΠ½Π°ΠΏΡˆΠΎΡ‚Ρƒ. Π£ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ своС собствСнноС пространство, Π½ΠΎ ΠΏΡ€ΠΈ этом ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π€Π‘ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ состояниСм ΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠΌ (сэкономим ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 190 Π“Π‘)

КаТдая ΠΊΠ»Π΅Ρ‚ΠΊΠ° это свой ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ датасСт ZFS, ΠΈ это ΠΊΡ€Π°ΠΉΠ½Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. ZFS Ρ‚Π°ΠΊ ΠΆΠ΅ позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΡ€ΡƒΡ‚Ρ‹Π΅ ΡˆΡ‚ΡƒΠΊΠΈ, Π²Ρ€ΠΎΠ΄Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΡΠ½Π°ΠΏΡˆΠΎΡ‚ΠΎΠ² ΠΏΠΎ SSH. ΠžΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ это Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ, ΠΈΡ‚Π°ΠΊ ΡƒΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ.

Π‘Ρ‚ΠΎΠΈΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° хоста, Ρƒ нас для этих Ρ†Π΅Π»Π΅ΠΉ Zabbix.

Π‘ β€” Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

Π§Ρ‚ΠΎ касаСтся бСзопасности, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Π² контСкстС инфраструктры:

ΠšΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ β€” Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ инструмСнты UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСм ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этого ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°. ΠœΡ‹ логичСски раздСляСм доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ логичСски ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ элСмСнту систСмы β€” ΠΊΠ»Π΅Ρ‚ΠΊΠ΅. Доступ осущСствляСтся посрСдством стандартной ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Вся коммуникация ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΠΊΠ»Π΅Ρ‚ΠΎΠΊ происходит Π² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. Благодаря ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡŽ дисков ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ бСспокоится ΠΈ сохранности Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ врСмя Π·Π°ΠΌΠ΅Π½Ρ‹ диска ΠΈΠ»ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ сСрвСр. ЕдинствСнный критичСский доступ являСтся доступ ΠΊ хост-систСмС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠΉ доступ обСспСчиваСт Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

Π¦Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ β€” Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этого ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° происходит Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π½Ρ‹Ρ… уровнях. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ Π² случаС сСрвСрного оборудования, ECC памяти, ZFS ΡƒΠΆΠ΅ «ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ» заботится ΠΎ цСлостности Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±ΠΈΡ‚ΠΎΠ² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠœΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹Π΅ ΡΠ½Π°ΠΏΡˆΠΎΡ‚Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Π»Π΅Ρ‚Ρƒ. Π£Π΄ΠΎΠ±Π½Ρ‹Π΅ инструмСнты экспорта-ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΊΠ»Π΅Ρ‚ΠΎΠΊ Π΄Π΅Π»Π°ΡŽΡ‚ простым Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π΅Ρ‚ΠΎΠΊ.

Π”ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ β€” Π’ΡƒΡ‚ ΡƒΠΆΠ΅ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ. Зависит ΠΎΡ‚ стСпСни вашСй извСстности ΠΈ Ρ„Π°ΠΊΡ‚Π° наличия Ρƒ вас нСнавистников. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ обСспСчили Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ кошСлька ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ· ВОР сСти. ΠŸΡ€ΠΈ нСобходимости ΠΌΠΎΠΆΠ½ΠΎ Π½Π° Ρ„Π°Π΅Ρ€Π²ΠΎΠ»Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всё ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ доступ ΠΊ сСрвСру ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΡƒΠ½Π΅Π»ΠΈ (ВОР ΠΈΠ»ΠΈ Π’ΠŸΠ это Π΄Ρ€ΡƒΠ³ΠΎΠΉ вопрос). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ сСрвСр Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Ρ€Π΅Π·Π°Π½ ΠΎΡ‚ внСшнСго ΠΌΠΈΡ€Π° насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π΅Π³ΠΎ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ смоТСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ сами.

ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π·Π° β€” А это зависит ΠΎΡ‚ дальнСйшСй эксплуатации ΠΈ соблюдСния Π²Π΅Ρ€Π½Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΡ€Π°Π², доступа ΠΈΡ‚ΠΏ. Но ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Ρƒ нас всС дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π°ΡƒΠ΄ΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Π° благодаря криптографичСским Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π» Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ дСйствия.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ описанная конфигурация Π½Π΅ являСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ всСгда, это скорСС ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, сохраняя Π·Π° собой ΠΎΡ‡Π΅Π½ΡŒ эластичныС возмоТности ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ кастомизации.

А ΠΊΠ°ΠΊ ΠΆΠ΅ полная виртуализация?

ΠŸΡ€ΠΎ ΠΏΠΎΠ»Π½ΡƒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ срСдствами cbsd ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΡƒΡ‚. Π― лишь добавлю, Ρ‡Ρ‚ΠΎ для Ρ€Π°Π±ΠΎΡ‚ bhyve Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ядра.

# cat /etc/rc.conf

...
kld_list="vmm if_tap if_bridge nmdm"
...

# cat /boot/loader.conf

...
vmm_load="YES"
...

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Π²Π΄Ρ€ΡƒΠ³ Π΅ΡΡ‚ΡŒ нСобходимости завСсти Π΄ΠΎΠΊΠ΅Ρ€, Ρ‚ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ°ΠΊΠΉΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ debian ΠΈ Π²ΠΏΠ΅Ρ€Ρ‘Π΄!

Π‘ΠΈΡ‚ΠΊΠΎΠΉΠ½ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅?

Π’ΠΎΡ‚ ΠΈ всё

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉ это всё Ρ‡Π΅ΠΌ я Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ. Если Π’Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ Ρ‚ΠΎ ΠΌΠ½Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠΈΠ½ΡƒΡ‚ΡŒ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΎΠ² β€” bc1qu7lhf45xw83ddll5mnzte6ahju8ktkeu6qhttc. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ Π² дСйствии ΠΈ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΈΡ‚ΠΊΠΎΠΉΠ½ΠΎΠ², Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΉΡ‚ΠΈ Π½Π° ΠΌΠΎΠΉ pet-project.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com