İçindekiler
FreeBSD Jail
FreeBSD sistemimiz içersinde sanal bir sistem oluşturmak için kullanılan bir yöntemdir. Bu yöntem ile oluşturulan sistemler, ana sistemden tamamen bağımsızdır. Bu sayede olası bir güvenlik açığından etkilenmezler. Ayrıca jail içerisinde çalışan bir servis ele geçirildiğinde, ana sistemde çalışan servisler etkilenmez.
Jail'ler bir tür işletim sistemi düzeyinde sanallaştırma olarak düşünülebilir.
FreeBSD'yi diğer işletim sistemlerinden güvenlik açısından öne çıkaran bir sistemdir.
Bu sayfada anlatılan kurulum ve kullanım bilgileri. Thick Jail olarak isimlendirilen tamami ile ayrı bir yapı oluşturulması ile ilgilidir.
Ayrıca VNET özellikleride kullanılarak Jail'lerin ayrı bir ağda çalışması sağlanacaktır.
Kurulan jail temel FreeBSD dosyalarının hepsine sahip olacaktır.
Jail'de çalışan FreeBSD sürümü ana sistemde çalışan FreeBSD sürümden daha güncel olamaz.
Bu yazıda Jail kurulumu, kullanımı ve yönetimi anlatılacaktır.
- FreeBSD sisteminizde internet erişimi gerekmektedir.
- Yazı boyunca kullanılan
__JAİL_ADI__
sizin belirleyeceğiniz bir isim olacaktır. Örnek komutlarda uch32bitjail ismi kullanılmıştır. - Yazı boyunca kullanılan
__VERSİYON__
kuracağınız jail'in FreeBSD sürümüdür. Örnek komutlarda kullanılan sürüm 13.2-RELEASE'dir. - Yazı boyunca kullanılan
__MİMARİ__
kuracağınız jail'in FreeBSD mimarisidir. Örnek komutlarda kullanılan mimari i386'dir.- Örnek komutlar amd64 mimarisi içerisinde i386 jail kurulumu için kullanılmıştır.
FreeBSD Jail Kurulumu
Jail kurulum aşamaları şu şekilde sıralanabilir.
- Klasörlerin oluşturulması.
- Gerekli base arşivinin indirilmesi.
- Ana sistem üzerinde ayarların yapılması.
- Jail yapılandırma dosyalarının oluşturulması ve düzenlenmesi.
Klasör Yapısı
Jail'lerin özellikle belirli bir dizinde tutulma zorunluğu bulunmamaktadır. Yazdıda /usr/jails
dizinini kullanılacaktır. İsterseniz değiştirebilirsiniz…
Aşağıdaki komutta gerekli yerleri değiştirerek çalıştırın ve klasörleri oluşturun.
mkdir -p /usr/jails/files mkdir /usr/jails/__JAİL_ADI__
-p
parametresi recursive olarak klasörleri oluşturur. Yani /usr/jails
klasörü yoksa onu da oluşturur.
Gerekli Dosyaların İndirilmesi
Gerektiğinde tekrardan indirme gerekmemesi için indirilen dosyaları /usr/jails/files
konumunda tutulacaktır.
İhtiyaç halinde hızlıca yeni bir jail kurmak için kullanabilirsiniz. Ancak alan sıkıntısı çekiyorsanız bu dosyaları her jail kurulumunda tekrardan indirebilirsiniz.
- Gerekli dosyaları indirmek için aşağıdaki komutu düzenleyerek çalıştırın.
fetch https://download.freebsd.org/ftp/releases/__MİMARİ__/__MİMARİ__/__VERSION__/base.txz -o /usr/jails/files/__VERSION__-__MİMARİ__-base.txzÖrnek;
fetch https://download.freebsd.org/ftp/releases/i386/i386/13.2-RELEASE/base.txz -o /usr/jails/files/13.2-RELEASE-i386-base.txz
- İndirilen base arşivini ilgili jail konumuna çıkartmak için aşağıdaki komutu düzenleyerek çalıştırın.
tar -xpf /usr/jails/files/__VERSION__-__MİMARİ__-base.txz -C /usr/jails/__JAİL_ADI__ --unlinkÖrnek;
tar -xpf /usr/jails/files/13.2-RELEASE-i386-base.txz -C /usr/jails/rtfi32bitjail --unlink
- Eğer disk alanınız az ise, indirilen dosyaları silmek için aşağıdaki komutu çalıştırabilirsiniz. Yeni jail kurmak için yeniden indirmeniz gerekir.
rm -f /usr/jails/files/__VERSION__-__MİMARİ__-base.txzÖrnek;
rm -f /usr/jails/files/13.2-RELEASE-i386-base.txz
Ana Sistem Ayarları
Jail'lerin çalışması için ana sistem üzerinde bazı ayarlamalar yapılması gerekmektedir.
- Jail için internet bağlantısı ve saat ayarlarını direkt olarak ana sistemden kopyalanması gerekmektedir. Aşağıdaki komutu düzenleyerek çalıştırın.
cp /etc/resolv.conf /usr/jails/__JAİL_ADI__/etc/resolv.conf cp /etc/localtime /usr/jails/__JAİL_ADI__/etc/localtimeÖrnek;
cp /etc/resolv.conf /usr/jails/rtfi32bitjail/etc/resolv.conf cp /etc/localtime /usr/jails/rtfi32bitjail/etc/localtime
- Jail için olası güncelleştirmeleri almak için aşağıdaki komutu düzenleyerek çalıştırın.
freebsd-update -b /usr/jails/__JAİL_ADI__/ fetch installÖrnek;
freebsd-update -b /usr/jails/rtfi32bitjail/ fetch install
- Makine başladığında jail'lerin otomatik olarak başlamasını istiyorsanız aşağıdaki komutu çalıştırın.1)
sysrc jail_enable="YES" # Başlangıçta jailleri başlatmak için. sysrc jail_parallel_start="YES" # Bu satırıda eklerseniz, jailler arkaplanda başlatılır.
VNET Ayarları
Yazıda hazırlanan jail, ana sistemden tamamen bağımsız olarak hazırlanmaktadır. Bu yüzden jail'in ayrı bir ağda çalışması gerekmektedir. Bunun için VNET kullanılacaktır.
Eğer jail'inizde ayrı bir ağ üzerinden internet erişimi olmasını istemiyorsanız2) bu kısmı atlayabilirsiniz.
- Bağdaştırıcı köprüsü oluşturmak için aşağıdaki komutu çalıştırın.
ifconfig bridge create
Size bir çıktı vermesi gerekmektedir. Bu çıktıda köprü bağdaştırıcının ismi bulunmaktadır. Bu ismi bir yere not edin.Örnek olarakbridge0
- Köprü oluşturulduktan sonra aşağıdaki komutu çalıştırarak onu
em0
arayüzüne eklemek gerekecektir:
Buradaem0
cihazın bağdaştırıcı ismidir. Sizin sisteminizde bu isim farklı olabilir. Öğrenmek içinifconfig
komutunu kullanabilirsiniz.
Aşağıda örnek bir çıktı bulunmaktadır. Vurgulanan satırda ismi görebilirsiniz.
em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=481009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER,NOMAP> ether 08:00:27:06:c2:65 inet 192.168.1.47 netmask 0xffffff00 broadcast 192.168.1.255 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
- Aşağıdaki komutu çalıştırın ve köprüyü em0 arayüzüne ekleyin. Burada
bridge0
bir önceki komutta oluşturulan köprü ismidir.em0
ise ana sistemdeki ağ arayüzüdür.
ifconfig bridge0 addm em0
- Bu işlemlerin her başlangıçta otomatik gerçekleşmesi için
/etc/rc.conf
dosyasına aşağıdaki satırları ekleyin.
defaultrouter="192.168.1.1" cloned_interfaces="bridge0" ifconfig_bridge0="inet 192.168.1.150/24 addm em0 up"
Jail Konfigürasyonu
Jail'ler için konfigürasyon dosyalarını ayarlamanın iki yolu bulunmaktadır. Eğer çok fazla jail kullanacaksanız ikinci yolu tercih etmeniz daha mantıklı olacaktır.
Birinci Yol
Konfigürasyon bilgileri tek bir dosyada tutulur. Bu dosya /etc/jail.conf
dosyasıdır.
Her yeni jail için bu dosyaya yeni girdiler eklemeniz gerekmektedir.
İkinci Yol
Konfigürasyon bilgileri her jail için ayrı bir dosyada tutulur. Bu dosyalar /etc/jail.conf.d/
klasörü içerisinde tutulur.
Her yeni jail için bu klasöre yeni bir dosya oluşturmanız gerekmektedir. Eğer çok sayıda jail bulunuyorsa bu yöntem karışıklığı önler.
Seçilen yönteme göre konfigürasyon dosyasını açın ve vurgulanan satırları düzenleyerek ekleyin.
Detaylı bilgiler yorum olarak yanlarına yazılmıştır.
Oluşturulacak olan dosyalarda satır sonlarına dikkat ediniz. CRLF yerine LF kullanınız. Aksi taktirde istenmeyen sonuçlar oluşabilir.
- /etc/jail.conf
__JAİL_ADI__ { # Jail'in ismi exec.start = "/bin/sh /etc/rc"; # Jail başlatıldığında çalıştırılacak olan komutlar. exec.stop = "/bin/sh /etc/rc.shutdown"; # Jail kapatıldığında çalıştırılacak olan komutlar. exec.consolelog = "/var/log/jail_console_${name}.log"; # Komu çıktılarının yazılacağı dosya. allow.raw_sockets; # Raw soketlerin kullanılmasına izin verir. (ping gibi) exec.clean; # Komutları temiz bir ortamda çalıştırılması. mount.devfs; # /dev dizinine bir devfs(5) dosya sistemi ekleme. host.hostname = "${name}"; path = "/usr/jails/${name}"; # Komutların çalıştırılacağı dizin. Kısaca jail'in kurulu olduğu dizin. vnet; vnet.interface = "${epair}b"; $id = "154"; # Ip adresinin son kısmını hesaplayacak olan değer. Her jail için farklı olmalıdır. $ip = "192.168.1.${id}/24"; $gateway = "192.168.1.1"; $bridge = "bridge0"; # vnet ayarlamalarında oluşturulan köprü ismi. $epair = "epair${id}"; exec.prestart += "ifconfig ${epair} create up"; exec.prestart += "ifconfig ${epair}a up descr jail:${name}"; exec.prestart += "ifconfig ${bridge} addm ${epair}a up"; exec.start += "ifconfig ${epair}b ${ip} up"; exec.start += "route add default ${gateway}"; exec.poststop = "ifconfig ${bridge} deletem ${epair}a"; exec.poststop += "ifconfig ${epair}a destroy"; }
Jail Yönetimi
- Sistemde çalışmakta olan jail'leri listelemek için aşağıdaki komutu kullanabilirsiniz.
jls
- Jail'i başlatmak için aşağıdaki komutu kullanabilirsiniz. Eğer başlangıçta otomatik başlatmak için ayar yapmadıysanız bir alttaki komutu kullanmak zorundasınız.
service jail start __JAİL_ADI__ service jail onestart __JAİL_ADI__
- Jail'i durdurmak için aşağıdaki komutu kullanabilirsiniz.
service jail stop __JAİL_ADI__
- Jail'i yeniden başlatmak için aşağıdaki komutu kullanabilirsiniz.
service jail restart __JAİL_ADI__
Jail'i Silme
FreeBSD işletim sisteminde güvenlik birinci planda olduğundan bazı dosyaları silmek için root yetkisi bile yeterli değildir. Bu sistemi dosya bayrakları kontrol eder.
- İlk olarak sileceğinizi jaili durdurun. Daha sonra aşağıdaki komutu jail'inize göre çalıştırın ve dosya bayraklarını değiştirin.
chflags -R 0 /usr/jails/__JAİL_ADI__
- Artık jail klasörünü aşağıdaki komutla silebilirsiniz.
rm -rf /usr/jails/__JAİL_ADI__
- Son olarak ilgili jail'e ait konfigürasyon dosyasını silerek silme işlemini tamamlayın. Birinci yol ile konfigürasyon sağladıysanız.
/etc/jail.conf
dosyasını düzenleyin. İkinci yol ile konfigürasyon sağladıysanız./etc/jail.conf.d/JAİL_ADI.conf
dosyasını silin.
Jail Paket Yönetimi
Eğer jail'inize internet erişimi vermediyseniz.3) Ana sistemden jail'e paket kurmak için aşağıdaki komutu kullanabilirsiniz.
pkg -j __JAİL_ADI__ install __PAKET_ADI__Örnek;
pkg -j rtfi32bitjail install wget
Jail Erişimi
Ana sistem üzerinden jail yönetimi daha uygun olsada, isterseniz jail içerisine aşağıdaki komutla erişebilirsiniz.
jexec -u root __JAIL_ISMI__
Jail Üzerinde Komut Çalıştırma
Jail üzerinde komut çalıştırmak için çalıştıracağınız komuta aşağıdaki ön eki eklemeniz gerekmektedir.
jexec -l __JAİL_ADI__ __KOMUT__
Örnek;
jexec -l rtfi32bitjail service stop apache24
UCH Viki'den alınmıştır. https://wiki.ulascemh.com/doku.php?id=tr:cs:op:bsd:jail