===== 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.((Eğer manuel olarak başlatmak istiyorsanız bu adımı es geçiniz. Jail'i başlatma komutu bu aşamaya göre değişecektir.)) > 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ız((Hiç internet bağlantısı olmaması veya ana sistemle aynı ip'yi paylaşması)) 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 olarak ''bridge0'' * Köprü oluşturulduktan sonra aşağıdaki komutu çalıştırarak onu ''em0'' arayüzüne eklemek gerekecektir: > Burada ''em0'' cihazın bağdaştırıcı ismidir. Sizin sisteminizde bu isim farklı olabilir. Öğrenmek için ''ifconfig'' komutunu kullanabilirsiniz. > > Aşağıda örnek bir çıktı bulunmaktadır. Vurgulanan satırda ismi görebilirsiniz. >> em0: flags=8863 metric 0 mtu 1500 options=481009b ether 08:00:27:06:c2:65 inet 192.168.1.47 netmask 0xffffff00 broadcast 192.168.1.255 media: Ethernet autoselect (1000baseT ) status: active nd6 options=29 * 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. __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.((Bu yazıda vnet ile jail'lere internet erişimi verildiği için bu kısım atlanmıştır.)) 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 [[tr:cs:op:bsd:jail|UCH Viki]]'den alınmıştır. https://wiki.ulascemh.com/doku.php?id=tr:cs:op:bsd:jail