Որոշեցի հարթակը տեղադրել Vultr֊ում, իրենց տրամադրում են FreeBSD մեքենաներ։
Խնդիրը նրանում է, որ իրենց մեքենաները աշխատում են UFS֊ով, սակայն ինձ պէտք է OpenZFS ֆայլային համակարգը։
Կարող եմ ստանալ վիրտուալ դիսկեր օգտագործելով truncate
հրամանը։
root@console:~ # truncate -s 40G /usr/local/disk0.img root@console:~ # zpool create zjails /usr/local/disk0.img root@console:~ # zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zjails 39.5G 129K 39.5G - - 0% 0% 1.00x ONLINE - root@console:~ # sysrc zfs_enable=“YES” zfs_enable: NO -> YES
Իհարկէ, առաջին բանը որ տեղադրում եմ հետեւեալ ծրագրերն են՝
tmux
vim
git-tiny
git-tiny
֊ն պէտք է նրա համար, որ տեղադրեմ illuria֊ի կողմից ստեղծուած Jailer
ծրագիրը՝
root@console:~ # git clone https://github.com/illuria/jailer
Cloning into ‘jailer’…
remote: Enumerating objects: 447, done.
remote: Counting objects: 100% (447/447), done.
remote: Compressing objects: 100% (206/206), done.
remote: Total 447 (delta 301), reused 384 (delta 238), pack-reused 0
Receiving objects: 100% (447/447), 136.34 KiB | 7.57 MiB/s, done.
Resolving deltas: 100% (301/301), done.
root@console:~ # cd jailer/
root@console:~/jailer # make install
root@console:~/jailer # jailer init
Enable the jail service first: Done!
Setting jailer_dir in rc.conf: Done!
Creating ZFS dataset zjails/jails with the mount point /usr/local/jails: Done!
Առաջին հերթին պէտք է քաշեմ ՕՀ֊ի պատկեր (image) Jailer
֊ի համար՝
root@console:~/jailer # jailer image fetch
Fetching 13.1-RELEASE: Done!
Ապա պէտք է ցանցերը կարգաւորեմ։ Երեւի աւելի լաւ կը լինի առանձին IP հասցէ տամ այդ jail֊ին։
Սկսեմ bridge network կարգաւորելով.
root@console:~ # sysrc cloned_interfaces=“bridge0” cloned_interfaces: -> bridge0 root@console:~ # sysrc ifconfig_bridge0="inet 10.0.0.1 netmask 255.255.255.0 up” ifconfig_bridge0: -> inet 10.0.0.1 netmask 255.255.255.0 up root@console:~ # service netif restart bridge0 /etc/rc.d/netif: WARNING: bridge0 does not exist. Skipped. Created clone interfaces: bridge0. Starting Network: bridge0. bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 58:9c:fc:10:d8:4f inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255 id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200 root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0 groups: bridge nd6 options=1
Հիմա արդէն կարող եմ ստեղծել նոր container օգտագործելով Jailer
֊ը՝
root@console:~ # jailer create -n -t eb -a 10.0.0.10 ctfd0 Creating ctfd0: Done!
Ապա միացնում ենք IP forwarding֊ը՝
root@console:~ # echo 'net.inet.ip.forwarding=1' >> /etc/sysctl.conf root@console:~ # service sysctl restart
Մնում է firewall֊ի մէջ աւելացնել հետեւեալ կարգաւորումները, /etc/pf.conf
ֆայլում՝
include "/etc/jail.conf.d/.pf.nat.jailer.conf” include "/etc/jail.conf.d/.pf.rdr.jailer.conf”
Ու վերջում, ստեղծում ենք այդ ֆայլերը՝
root@console:~ # touch /etc/jail.conf.d/.pf.rdr.jailer.conf root@console:~ # touch /etc/jail.conf.d/.pf.nat.jailer.conf
Ապա կարգաւորում ենք NAT եւ Redirection՝
root@console:~ # jailer nat add -i vtnet0 -a 140.82.57.32 ctfd0 Reloading pf rules. root@console:~ # jailer rdr add -i vtnet0 -a 140.82.57.32 ctfd0 Reloading pf rules. root@console:~ # pfctl -sn nat on vtnet0 inet from 10.0.0.10 to any -> 140.82.57.32 rdr pass on vtnet0 inet from any to 140.82.57.32 -> 10.0.0.10
Ապա ստուգենք։
root@console:~ # jailer cons ctfd0 root@ctfd0:~ # pkg install -y nginx0 root@ctfd0:~ # service nginx enable nginx enabled in /etc/rc.conf root@ctfd0:~ # service nginx start
Օքեյ։ Անցնենք Python֊ական բաներին (։