Π’Π°ΠΊ ΡΠ»ΠΎΠΆΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Ρ ΠΏΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ ΠΈ ΡΠ΅ΡΠ΅ΠΉ (ΠΊΠΎΡΠΎΡΠ΅: ΡΠΈΡΠ°Π΄ΠΌΠΈΠ½), ΠΈ Π΄ΠΎΠ²Π΅Π»ΠΎΡΡ ΠΏΠΎΠ²Π΅Π΄Π°ΡΡ Π·Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ 10 Π»Π΅Ρ ΠΏΡΠΎΡ. Π΄Π΅ΠΉΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΌΡΡ
ΡΠ°Π·Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ΅Ρ
, ΡΡΠΎ ΡΡΠ΅Π±ΡΡΡ [ΠΏΠΎ|Π·Π°]Π²ΡΡΠ΅Π½Π½ΡΡ
ΠΌΠ΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΠΈ. Π Π΅ΡΠ΅ ΡΠ»ΠΎΠΆΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π°Π·Π°Π΄ Ρ Π½Π°ΡΡΠ» Π΄Π»Ρ ΡΠ΅Π±Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ dev
, ΡΠ°ΠΊ, ΠΌΠΈΠΌΠΎ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΠ»). ΠΠΎ Ρ Π½Π΅ ΠΏΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ, Ρ ΠΏΡΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Π€ΠΈΠ½Π°Π½ΡΠΎΠ²ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (fintech) ΠΈΠ΄ΡΡ ΡΡΠ΄ΠΎΠΌ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΡ (infosec) ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π±Π΅Π· Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠΎΠΆΠ΅Ρ, Π½ΠΎ Π½Π΅Π΄ΠΎΠ»Π³ΠΎ. ΠΠΎΡ ΠΏΠΎΡΡΠΎΠΌΡ Ρ Ρ ΠΎΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΎΠΏΡΡΠΎΠΌ ΠΈ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ fintech, ΡΠ°ΠΊ ΠΈ infosec, ΠΏΡΠΈΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎΠΌ ΠΈΠ»ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠΌ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΊΠ°ΠΆΡ Π½Π΅ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎ Π±ΠΈΡΠΊΠΎΠΉΠ½, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΡΡ (ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ) ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² β ΠΎΠ΄Π½ΠΈΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ ΡΠ΅Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², Π³Π΄Π΅ «Π» ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΡΡΠΎ ΠΊΠ°ΠΊ ΠΊ Π±ΠΈΡΠΊΠΎΠΉΠ½ΠΎΠ²ΠΎΠΉ Π±ΠΈΡΠΆΠ΅, ΡΠ°ΠΊ ΠΈ ΠΊ ΡΠ°ΠΌΠΎΠΌΡ ΡΠΈΠΏΠΎΠ²ΠΎΠΌΡ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΌΡ Π·ΠΎΠΎΠΏΠ°ΡΠΊΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ Π±ΠΈΡΠΊΠΎΠΉΠ½ΠΎΠΌ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ.
Π₯ΠΎΡΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Ρ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΊ ΠΏΡΠΈΡΠΈΠΏΠΎΠ² «keep it stupid simple» ΠΈ «less is more», ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠ°ΠΊ ΡΡΠ°ΡΡΡ, ΡΠ°ΠΊ ΠΈ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π² Π½Π΅ΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ.
ΠΠΎΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ: ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΡΠΌ Π²ΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π±ΠΈΡΠΊΠΎΠΉΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°. ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΠ±ΠΌΠ΅Π½ ΡΡΠ±Π»Π΅ΠΉ, Π΄ΠΎΠ»Π»Π°ΡΠΎΠ², Π΅Π²ΡΠΎ Π½Π° Π±ΠΈΡΠΊΠΎΠΉΠ½Ρ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, ΠΈ Ρ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΡΡΠΎΠ²ΡΡ Π΄Π΅Π½Π΅Π³ Π²ΡΠΎΠ΄Π΅ ΠΊΠΈΠ²ΠΈ ΠΈ webmoney, Ρ.Π΅. Ρ Π½Π°Ρ Π·Π°ΠΊΡΡΡΡ Π²ΡΠ΅ ΡΡΠΈΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ, ΠΈΠΌΠ΅Π΅ΡΡΡ Π³ΠΎΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ»Ρ ΠΏΠ»Π°ΡΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΠ·Π° Π΄Π»Ρ ΡΡΠ±Π»Π΅ΠΉ, Π΄ΠΎΠ»Π»Π°ΡΠΎΠ² ΠΈ Π΅Π²ΡΠΎ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΠ°Π²ΡΠ·Π°Π½ΠΎ Ρ Π½Π°ΡΠΈΠΌΠΈ Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΈΠΌΠΈ ΡΡΠ΅ΡΠ°ΠΌΠΈ ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΊΠΎΠ΅ API Π΄Π»Ρ Π½Π°ΡΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊ ΠΆΠ΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅Π΅ ΡΠΎΠ»Ρ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ° Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π½Ρ Π²ΡΠΎΠ΄Π΅ ΡΠΈΠΏΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠΈΠ²ΠΈ ΠΈΠ»ΠΈ webmoney ΠΊΠ°Π±ΠΈΠ½Π΅ΡΠ° β Π·Π°Π²Π΅Π΄ΠΈΡΠ΅ Π°ΠΊΠΊΠ°ΡΠ½Ρ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠ°ΡΡΡ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠ½ΠΎ ΠΎΠ±ΡΠ°Π΅ΡΡΡ Ρ Π½Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ-ΡΠ»ΡΠ·ΠΎΠΌ, ΠΏΡΡΡΡ ΠΏΠΎ REST API Π² Π»ΠΎΠΊΠ°Π»ΠΊΠ΅. Π Π²ΠΎΡ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π±ΠΈΡΠΊΠΎΠΉΠ½Ρ ΠΈ Π·Π°ΠΎΠ΄Π½ΠΎ ΠΏΡΠΎΠ°ΠΏΠ³ΡΠ΅ΠΉΠ΄ΠΈΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, Ρ.ΠΊ. ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠ΅ Π±ΡΠ»ΠΎ Π² ΡΠΏΠ΅ΡΠΊΠ΅ ΠΏΠΎΠ΄Π½ΡΡΠΎ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π±ΠΎΠΊΡΠ°Ρ Π² ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ΄ ΡΡΠΎΠ»ΠΎΠΌβ¦ ΡΠ°ΠΉΡΠΎΠΌ ΡΡΠ°Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π° ΠΌΡ ΡΡΠ°Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ²Π°ΡΡ Π·Π° Π°ΠΏΡΠ°ΠΉΠΌ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
ΠΡΠ°ΠΊ, Π½Π°ΡΠ½ΡΠΌ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ β Π²ΡΠ±ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°. Π’.ΠΊ. Π±ΠΈΠ·Π½Π΅Ρ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ ΠΈ ΠΌΡ Π΄ΠΎΠ²Π΅ΡΡΠ΅ΠΌ Ρ
ΠΎΡΡΠ΅ΡΡ (OVH) ΠΌΡ Π²ΡΠ±Π΅ΡΠ΅ΠΌ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°
ΠΠ΄Π΅ΡΡ Π²ΡΡ ΠΏΡΠΎΡΡΠΎ. ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΆΠ΅Π»Π΅Π·ΠΎ ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π½Π°ΡΠΈΠΌ Π½ΡΠΆΠ΄Π°ΠΌ. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΎΠ±ΡΠ°Π· FreeBSD. ΠΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ (Π² ΡΠ»ΡΡΠ°Π΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Ρ
ΠΎΡΡΠ΅ΡΠ° ΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΆΠ΅Π»Π΅Π·Π°) ΠΏΠΎ IPMI ΠΈΠ»ΠΈ Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΎΠΌ ΠΈ ΡΠΊΠ°ΡΠΌΠ»ΠΈΠ²Π°Π΅ΠΌ Π² Π·Π°Π³ΡΡΠ·ΠΊΡ .iso FreeBSD ΠΎΠ±ΡΠ°Π·Π°. ΠΠ»Ρ ΠΎΡΠΊΠ΅ΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, Ρ Π½Π΅ Π±ΡΠ΄Ρ Π½Π° ΡΡΠΎΠΌ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ, Π»ΠΈΡΡ ΠΎΡΠΌΠ΅ΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° 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
Π’Π°ΠΊ ΠΆΠ΅ ΡΡΠΎΠΈΡ ΡΠ±Π΅Π΄ΠΈΡΡΡ, ΡΡΠΎ Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΈ
ΠΠ°ΡΠ΅ΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ 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 Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»Π½ΡΡ Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ
ΠΌΠ°ΡΠΈΠ½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ? ΠΠΏΡΡΡ docker ΡΡΠΎ Π»ΠΈ?
Π Π²ΠΎΡ ΠΈ Π½Π΅Ρ. cbsd
Π΄Π»Ρ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΠΈ ΡΡΠΈΡ
ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΌ ΠΈΠΌΡ β ΠΊΠ»Π΅ΡΠΊΠΈ.
ΠΠ»Π΅ΡΠΊΠ° ΡΡΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π΄Π»Ρ ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ ΡΠ΅Π»Π΅ΠΉ, Π³Π΄Π΅ Π² ΠΈΡΠΎΠ³Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½Π°Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠΎ ΡΡΡΠΈ ΡΡΠΎ ΠΊΠ»ΠΎΠ½ Ρ ΠΎΡΡ-ΡΠΈΡΡΠ΅ΠΌΡ, Π½ΠΎ Π΅ΠΌΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½Π°Ρ Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ «ΠΆΠ΅Π»Π΅Π·Π°». Π ΡΠ΅ΡΡΡΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ Π½Π΅ ΡΡΠ°ΡΡΡΡΡ Π½Π° «Π³ΠΎΡΡΠ΅Π²ΡΡ ΠΠ‘», Π° ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°Π±ΠΎΡΡ. ΠΠΎΠ³Π΄Π° ΠΊΠ»Π΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ Π½ΡΠΆΠ΄, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠ° β ΠΊΡΡΠ° ΠΊΠ»Π΅ΡΠΎΠΊ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΡΡ ΡΠ΅ΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. Π£ΡΠΈΡΡΠ²Π°Ρ ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°Π·Π½ΡΠΌ ΠΏΠΎΠ΄ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ Π½ΡΠΆΠ½Ρ Π΄ΠΎΠΏ. ΡΠ΅ΡΡΡΡΡ Π² ΡΠ°Π·Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ°ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π΅ΡΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ. Π ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΊΠ»Π΅ΡΠΊΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΠΈ Π²ΡΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΌΡ ΡΠ΅ΡΡΡΡΡ.
Π ΡΡΠΎ ΡΠ°ΠΌ Ρ ΠΏΠΎΠ»Π½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ?
ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, cbsd
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ bhyve
ΠΈ XEN Π³ΠΈΠΏΠ΅ΡΠ²ΠΈΠ·ΠΎΡΡ. ΠΡΠΎΡΡΠΌ Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ, Π° Π²ΠΎΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠΉ bhyve
Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π°Π»Π΅Π΅.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Ρ ΠΎΡΡΠ°
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π€Π‘
gpart add -t freebsd-zfs /dev/ada0
/dev/ada0p4 added!
Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π» Π΄ΠΈΡΠΊΠ° Π½Π° ΠΎΡΡΠ°Π²ΡΠ΅Π΅ΡΡ ΠΌΠ΅ΡΡΠΎ
geli init /dev/ada0p4
Π²Π±ΠΈΠ²Π°Π΅ΠΌ Π½Π°Ρ ΠΏΠ°ΡΠΎΠ»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ
geli attach /dev/ada0p4
ΠΎΠΏΡΡΡ Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ Ρ Π½Π°Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅Π²Π°ΠΉΡ /dev/ada0p4.eli β ΡΡΠΎ ΠΈ Π΅ΡΡΡ Π½Π°ΡΠ΅ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. ΠΠ°ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π΄Π»Ρ /dev/ada1 ΠΈ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
Π΄ΠΈΡΠΊΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. Π ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ
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 ΠΊΠΎΡΠ΅Π»Π΅ΠΊ.
Π»Π°ΠΏΡΠΎΠΏΠ°Ρ
. ΠΠΎΠΊΠ° Π±ΡΠ΄Π΅ΠΌ Π΅Π»Π΅ΠΊΡΡΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ, Π° ΠΏΠΎΠ·ΠΆΠ΅ Π² Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ»Π΅ΡΠΊΠ΅ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅ΠΌ
# 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 ΠΈ
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°
# 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
Π£ΡΠΏΠ΅Ρ !
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΡΠΌΠΈ ΠΈ ΠΌΠΈΠΊΡΠΎ-ΠΏΠ»Π°ΡΠ΅ΠΆΠ°ΠΌΠΈ Π½Π°ΠΌ ΡΠ°ΠΊ ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ° Π½ΠΎΠ΄Π° 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, ΠΈ ΡΡΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ.
Π‘ΡΠΎΠΈΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Ρ
ΠΎΡΡΠ°, Ρ Π½Π°Ρ Π΄Π»Ρ ΡΡΠΈΡ
ΡΠ΅Π»Π΅ΠΉ
Π β Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΠΈΠ· ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡ:
ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ β Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ 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 ΠΈ Π²ΠΏΠ΅ΡΡΠ΄!
ΠΠΎΡ ΠΈ Π²ΡΡ
ΠΠΎΠΆΠ°Π»ΡΠΉ ΡΡΠΎ Π²ΡΡ ΡΠ΅ΠΌ Ρ Ρ
ΠΎΡΠ΅Π» ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ. ΠΡΠ»ΠΈ ΠΠ°ΠΌ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»Π°ΡΡ ΡΡΠ°ΡΡΡ ΡΠΎ ΠΌΠ½Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠΈΠ½ΡΡΡ Π±ΠΈΡΠΊΠΎΠΉΠ½ΠΎΠ² β
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com