FreeBSD 12.0 Sunucular İçin Önerilen İlk Kurulum Adımları
FreeBSD, sunucu ortamlarında kararlılığı, güvenliği ve yüksek performansıyla öne çıkan güçlü bir açık kaynak işletim sistemidir. Özellikle web sunucuları, veritabanı sunucuları, dosya sunucuları ve ağ geçitleri gibi kritik altyapılarda tercih edilen FreeBSD, doğru bir başlangıç yapılandırması ile uzun vadede sorunsuz ve güvenli bir çalışma ortamı sunar. Yeni bir FreeBSD 12.0 sunucusunu devreye alırken atılacak ilk adımlar, sistemin genel güvenliğini, performansını ve yönetilebilirliğini doğrudan etkiler. Bu makale, yeni bir FreeBSD 12.0 sunucusunu sıfırdan kurarken izlenmesi gereken kritik adımları, güvenlikten performansa, sistem yönetiminden temel servislerin kurulumuna kadar detaylı bir şekilde ele almaktadır. Amacımız, sunucunuzun temelini en iyi uygulamalara uygun bir şekilde atarak, gelecekteki operasyonlarınız için sağlam, güvenli ve verimli bir zemin oluşturmaktır. FreeBSD 12.0’ın sunduğu yenilikler ve kararlılıkla birleşen bu adımlar, sunucunuzun potansiyelini tam olarak kullanmanızı sağlayacaktır.
Temel Sistem Güncelleme ve Yükseltme
Yeni bir FreeBSD sunucusu kurulduğunda yapılması gereken ilk ve en önemli adımlardan biri, sistemin güncel olduğundan emin olmaktır. Bu, hem güvenlik açıklarının kapatılması hem de en son özellik ve iyileştirmelerden faydalanmak için hayati öneme sahiptir. FreeBSD’de bu süreç iki ana bileşenden oluşur: temel sistemin (kernel ve kullanıcı alanı araçları) güncellenmesi ve kurulu paketlerin güncellenmesi.
Sistem Temelinin Güncellenmesi
FreeBSD’nin çekirdeği ve temel kullanıcı alanı araçları, freebsd-update komutu ile güncellenir. Bu komut, resmi FreeBSD güvenlik ve hata düzeltmeleri için kullanılır.
İlk olarak, mevcut güncellemeleri kontrol etmek için:
freebsd-update fetch
Bu komut, indirilebilecek tüm güncellemeleri listeler. Ardından, bu güncellemeleri sisteme uygulamak için:
freebsd-update install
Çekirdek güncellemeleri yapıldığında, sistemin yeniden başlatılması gerekebilir. freebsd-update komutu size bu konuda bilgi verecektir. Genellikle, sistem güncellemeleri tamamlandıktan sonra bir yeniden başlatma işlemi önerilir.
Paketlerin Güncellenmesi
FreeBSD, yazılımları yönetmek için güçlü bir paket yönetim sistemi olan pkg‘yi kullanır. Yeni bir kurulumda pkg genellikle otomatik olarak kurulmamış olabilir. Eğer kurulu değilse, ilk olarak pkg‘yi bootstrap etmeniz gerekir:
pkg bootstrap
Ardından, paket veritabanını güncellemek ve kurulu tüm paketleri yükseltmek için aşağıdaki komutları kullanın:
pkg update
pkg upgrade
Bu komutlar, kurulu olan tüm üçüncü taraf yazılımlarınızın en son ve güvenli sürümlerine güncellenmesini sağlar. Bu adımların düzenli olarak tekrarlanması, sisteminizin güvenli ve stabil kalmasını sağlar.
Çekirdek Kaynaklarının Güncellenmesi (İsteğe Bağlı ama Önerilen)
Özelleştirilmiş bir çekirdek derlemeniz veya sistem kaynak kodları üzerinde çalışmanız gerekiyorsa, /usr/src dizinindeki çekirdek kaynaklarını da güncel tutmanız önemlidir. FreeBSD 12.0 için kaynak kodlarını svnlite veya git ile edinebilirsiniz.
Eğer kaynak kodları kurulu değilse:
svnlite checkout https://svn.freebsd.org/base/stable/12 /usr/src
Eğer kaynak kodları zaten kuruluysa, güncellemek için /usr/src dizinine gidip:
svnlite update
Bu, sisteminizin temel kaynak kodlarını güncel tutar. Özelleştirilmiş bir çekirdek derlemeniz gerekmiyorsa, bu adım çoğu sunucu için zorunlu değildir, ancak bazı özel durumlarda veya geliştirme ortamlarında faydalıdır.
Temel Güvenlik Önlemleri
Bir sunucunun güvenliği, kurulumun ilk aşamalarından itibaren ele alınması gereken en kritik konulardan biridir. Yanlış yapılandırılmış bir sistem, potansiyel saldırılara açık kapı bırakabilir. İşte yeni bir FreeBSD sunucusunda alınması gereken temel güvenlik önlemleri:
Root Şifresi ve Kullanıcı Yönetimi
* Root Şifresini Değiştirme: Kurulum sırasında belirlenmiş olsa bile, root kullanıcısının şifresini hemen değiştirmek iyi bir uygulamadır. Güçlü, karmaşık bir şifre seçtiğinizden emin olun.
passwd root
* Yeni Bir Yönetici Kullanıcısı Oluşturma: root kullanıcısı ile doğrudan günlük işlemler yapmak yerine, sudo yetkilerine sahip yeni bir kullanıcı oluşturmak daha güvenlidir.
adduser
Bu komut sizi interaktif bir süreçten geçirerek yeni bir kullanıcı oluşturmanızı sağlar. Yeni kullanıcıyı wheel grubuna eklediğinizden emin olun. Bu, kullanıcının sudo ile root yetkileri alabilmesini sağlar.
pw group mod wheel -m yeni_kullanici_adiniz
SSH Yapılandırması
SSH (Secure Shell), sunucuya uzaktan güvenli erişim sağlamanın birincil yoludur. SSH yapılandırmasını güçlendirmek, yetkisiz erişimi engellemek için hayati öneme sahiptir. /etc/ssh/sshd_config dosyasını düzenleyin:
* Root Girişini Devre Dışı Bırakma: root kullanıcısının SSH üzerinden doğrudan giriş yapmasını engelleyin. Bu, bir saldırganın yalnızca root şifresini tahmin etmesi durumunda sisteme girememesini sağlar.
PermitRootLogin no
* Parola Kimlik Doğrulamasını Devre Dışı Bırakma (Anahtar Tabanlı Kimlik Doğrulama Kullanın): Parola tabanlı kimlik doğrulama, kaba kuvvet saldırılarına karşı savunmasızdır. Bunun yerine, SSH anahtarları kullanarak daha güvenli bir yöntem tercih edin.
PasswordAuthentication no
Anahtar tabanlı kimlik doğrulama için, istemcinizde bir SSH anahtar çifti oluşturun (ssh-keygen) ve genel anahtarınızı (~/.ssh/id_rsa.pub) sunucudaki yeni oluşturduğunuz kullanıcının ~/.ssh/authorized_keys dosyasına kopyalayın.
* Varsayılan SSH Portunu Değiştirme: Çoğu kaba kuvvet saldırısı varsayılan SSH portu olan 22’yi hedefler. Portu bilinmeyen bir porta değiştirmek, otomatik saldırıların büyük bir kısmını engeller.
Port 2222 # Örnek olarak 2222 kullanıldı, farklı bir port seçebilirsiniz.
* Belirli Kullanıcılara İzin Verme: Yalnızca belirli kullanıcıların SSH ile bağlanmasına izin verin.
AllowUsers yeni_kullanici_adiniz
Yapılandırma değişikliklerinden sonra SSH servisini yeniden başlatın:
service sshd restart
Güvenlik Duvarı (pf) Yapılandırması
FreeBSD, güçlü bir durum bilgisi olan güvenlik duvarı olan pf (Packet Filter) ile birlikte gelir. pf‘yi etkinleştirmek ve yapılandırmak, sunucunuza gelen ve giden trafiği kontrol etmenizi sağlar.
pf‘yi etkinleştirmek için /etc/rc.conf dosyasına aşağıdaki satırları ekleyin:
pf_enable="YES"
pf_rules="/etc/pf.conf"
Ardından, /etc/pf.conf dosyasını oluşturun veya düzenleyin. İşte basit bir pf.conf örneği:
# Harici ağ arayüzünüzü tanımlayın
ext_if="vtnet0" # Sunucunuzun ağ arayüzüne göre değiştirin (örneğin: em0, igb0)
Gelen ve giden tüm trafiği varsayılan olarak engelle
block all
Loopback trafiğine izin ver
pass out quick on lo0 all
pass in quick on lo0 all
Durum bilgisi olan (stateful) bağlantılara izin ver
set skip on lo0
pass out quick on $ext_if proto tcp all keep state
pass out quick on $ext_if proto udp all keep state
pass out quick on $ext_if proto icmp all keep state
Gelen SSH bağlantılarına izin ver (varsayılan 22 veya değiştirdiğiniz port)
Portu değiştirdiyseniz, buradaki 22'yi yeni port numaranızla değiştirin
pass in on $ext_if proto tcp to any port 2222 flags S/SA keep state
pf.conf dosyasını kaydettikten sonra, yapılandırmayı kontrol edin ve pf servisini başlatın:
pfctl -nf /etc/pf.conf # Yapılandırma dosyasını test et
service pf start # pf servisini başlat
ipfw da bir diğer seçenektir, ancak pf genellikle daha modern ve esnek kabul edilir.
sudo Kurulumu ve Yapılandırması
root kullanıcısı yerine yeni oluşturduğunuz kullanıcı ile işlem yapmak için sudo‘yu kurmanız gerekir.
pkg install sudo
Ardından, sudo‘yu yapılandırmak için visudo komutunu kullanın. Bu komut, /etc/sudoers dosyasını güvenli bir şekilde düzenlemenizi sağlar.
visudo
Aşağıdaki satırı bularak veya ekleyerek wheel grubundaki kullanıcıların sudo kullanmasına izin verin (genellikle yorum satırı olarak bulunur):
%wheel ALL=(ALL) ALL
Bu, wheel grubundaki kullanıcıların, kendi şifrelerini girdikten sonra sudo komutuyla root yetkilerini kullanabilmesini sağlar.
sysctl Ayarlamaları
FreeBSD’nin çekirdek davranışını kontrol eden bazı sysctl ayarları, güvenliği artırmak için değiştirilebilir. Bu ayarlar /etc/sysctl.conf dosyasına eklenir.
Örneğin:
kern.randompid=1 # PID atamada rastgelelik
net.inet.ip.random_id=1 # IP kimliklerini rastgele yap
net.inet.tcp.drop_synfin=1 # SYN+FIN paketlerini düşür (bazı tarayıcılarda sorun yaratabilir)
net.inet.icmp.maskrepl=0 # ICMP maske yanıtlarını devre dışı bırak
net.inet.icmp.log_redirect=0 # ICMP yönlendirmelerini günlüğe kaydetme
Bu değişikliklerin etkili olması için sistemi yeniden başlatmanız veya sysctl -p komutunu çalıştırmanız gerekir.
Sistem Yapılandırması ve Optimizasyon
Güvenlik adımlarının ardından, sunucunuzun temel yapılandırmasını ve performansını optimize etmek için bazı önemli adımlar atılmalıdır.
Ana Bilgisayar Adı ve Ağ Ayarları
Sunucunuzun ana bilgisayar adını (hostname) ayarlamak ve ağ arayüzü yapılandırmasını kontrol etmek önemlidir. /etc/rc.conf dosyasına aşağıdaki satırları ekleyin veya düzenleyin:
hostname="sunucu.alanadiniz.com"
ifconfig_vtnet0="DHCP" # DHCP kullanıyorsanız
veya statik IP için:
ifconfig_vtnet0="inet 192.168.1.10 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
DNS çözümlemesi için /etc/resolv.conf dosyasını kontrol edin ve doğru DNS sunucularını içerdiğinden emin olun.
Zaman Senkronizasyonu (NTP)
Sistem saatinin doğru olması, günlük dosyalarının tutarlılığı, güvenlik sertifikalarının geçerliliği ve genel sistem operasyonları için kritiktir. NTP (Network Time Protocol) servisini etkinleştirerek sistem saatinizi otomatik olarak senkronize edebilirsiniz.
/etc/rc.conf dosyasına aşağıdaki satırı ekleyin:
ntpd_enable="YES"
ntpd_sync_on_start="YES"
Ardından ntpd servisini başlatın:
service ntpd start
Yerel Ayarlar (Locale) ve Klavye Düzeni
Sisteminizin dil ve karakter setini doğru ayarlamak, özellikle farklı dillerde içerik işleyen uygulamalar için önemlidir. /etc/login.conf dosyasını düzenleyerek varsayılan yerel ayarları değiştirebilirsiniz. Örneğin, Türkçe yerel ayarları için:
default:\
:charset=UTF-8:\
:lang=tr_TR.UTF-8:\
...
cap_mkdb /etc/login.conf komutunu çalıştırarak değişiklikleri etkinleştirin.
Klavye düzeni için /etc/rc.conf dosyasına:
keymap="tr.kbd"
ekleyebilirsiniz.
Disk Yapılandırması (ZFS/UFS)
FreeBSD, hem UFS (Unix File System) hem de ZFS (Zettabyte File System) dosya sistemlerini destekler.
* ZFS: Modern sunucular için ZFS şiddetle tavsiye edilir. Veri bütünlüğü, anlık görüntüler (snapshots), veri sıkıştırma, birim yönetimi ve RAID-Z gibi gelişmiş özellikler sunar. Eğer kurulum sırasında ZFS seçmediyseniz, sonradan yapılandırmak daha karmaşık olabilir, ancak sağladığı avantajlar genellikle buna değerdir. ZFS havuzlarınızın sağlığını düzenli olarak zpool status ile kontrol edin.
* UFS: Daha basit bir dosya sistemi gereksinimleriniz varsa veya eski sistemlerle uyumluluk önemliyse UFS yeterli olabilir. UFS kullanıyorsanız, fsck ile düzenli dosya sistemi kontrolü ve tunefs ile bazı optimizasyonlar düşünebilirsiniz.
Takas Alanı (Swap) Kontrolü
Sisteminizin yeterli takas alanına sahip olduğundan emin olun. Genellikle fiziksel RAM’in 1-2 katı kadar takas alanı önerilir, ancak bu, sunucunun kullanım amacına göre değişebilir. swapinfo komutu ile mevcut takas alanını görebilirsiniz. Eğer yetersizse, ek bir takas dosyası veya bölümü oluşturabilirsiniz.
Takas dosyası oluşturma örneği:
truncate -s 4G /usr/swap0 # 4GB'lık bir takas dosyası oluştur
chmod 0600 /usr/swap0
mdconfig -a -t vnode -f /usr/swap0 -u 0
swapon /dev/md0
Bu ayarı kalıcı hale getirmek için /etc/fstab dosyasına aşağıdaki satırı ekleyin:
/usr/swap0 none swap sw 0 0
Kaynak Limitleri (ulimit)
Bazı uygulamalar veya servisler, dosya açma limiti (file descriptors), işlem sayısı gibi kaynak limitlerinin artırılmasını gerektirebilir. Bu limitler /etc/login.conf dosyasında default veya belirli kullanıcı sınıfları için ayarlanabilir.
Örneğin, dosya açma limitini artırmak için:
default:\
...
:openfiles=2048:\
...
Değişikliklerden sonra cap_mkdb /etc/login.conf komutunu çalıştırmayı unutmayın.
İzleme ve Günlükleme
Bir sunucunun sağlıklı çalıştığından emin olmak ve potansiyel sorunları erkenden tespit etmek için düzenli izleme ve günlük kayıtlarının incelenmesi çok önemlidir.
Temel İzleme Araçları
FreeBSD, sistem kaynaklarını izlemek için bir dizi komut satırı aracı sunar:
* top: İşlemci, bellek ve çalışan süreçlerin genel durumunu gösterir.
* vmstat: Sanal bellek istatistiklerini, disk ve CPU kullanımını raporlar.
* iostat: Disk G/Ç istatistiklerini gösterir. Özellikle disk performansı sorunlarını teşhis etmek için kullanışlıdır.
* netstat: Ağ bağlantıları, yönlendirme tabloları ve ağ arayüzü istatistikleri hakkında bilgi verir.
* systat: Çeşitli sistem istatistiklerini dinamik olarak gösteren bir araçtır.
Sistem Günlükleri
Tüm sistem olayları, hata mesajları ve servis günlükleri /var/log dizininde bulunur.
* /var/log/messages: Genel sistem mesajları.
* /var/log/auth.log: Kimlik doğrulama ile ilgili olaylar (SSH girişleri vb.).
* /var/log/maillog: Posta sunucusu günlükleri.
* dmesg: Çekirdek boot mesajlarını gösterir.
Günlükleri düzenli olarak kontrol etmek, sisteminizdeki anormallikleri veya güvenlik ihlallerini tespit etmenize yardımcı olur. grep, awk, sed gibi araçlarla günlükleri filtreleyebilir ve analiz edebilirsiniz.
Günlük Rotasyonu (newsyslog)
Günlük dosyalarının çok büyümesini ve disk alanını tüketmesini önlemek için FreeBSD, newsyslog servisini kullanır. Bu servis, günlük dosyalarını belirli aralıklarla döndürür, sıkıştırır ve eski kopyalarını siler. /etc/newsyslog.conf dosyasını düzenleyerek rotasyon politikalarını özelleştirebilirsiniz. Varsayılan ayarlar çoğu zaman yeterlidir, ancak yüksek trafikli sunucularda veya belirli servisler için özel ayarlamalar gerekebilir.
Temel Servislerin Kurulumu ve Yönetimi (Örnekler)
Sunucunuzun kullanım amacına bağlı olarak çeşitli servisler kurmanız gerekebilir. pkg paket yöneticisi bu süreçte ana aracınız olacaktır.
Paket Yönetimi (pkg)
Daha önce de belirtildiği gibi, pkg üçüncü taraf yazılımları kurmak, güncellemek ve kaldırmak için kullanılır.
* Bir paket aramak: pkg search paket_adi
* Bir paket kurmak: pkg install paket_adi
* Bir paketi kaldırmak: pkg delete paket_adi
* Kurulu paketleri listelemek: pkg info
Web Sunucusu (Nginx/Apache)
Bir web sitesi veya web uygulaması barındıracaksanız, bir web sunucusu kurmanız gerekir. Nginx ve Apache en popüler seçeneklerdir.
* Nginx Kurulumu:
pkg install nginx
sysrc nginx_enable="YES"
service nginx start
* Apache Kurulumu:
pkg install apache24
sysrc apache24_enable="YES"
service apache24 start
Yapılandırma dosyaları genellikle /usr/local/etc/nginx/ veya /usr/local/etc/apache24/ dizinlerinde bulunur.
Veritabanı Sunucusu (PostgreSQL/MySQL)
Veri depolamak için bir veritabanı sunucusuna ihtiyacınız olabilir.
* PostgreSQL Kurulumu:
pkg install postgresql12-server
sysrc postgresql_enable="YES"
service postgresql initdb
service postgresql start
* MySQL Kurulumu:
pkg install mysql80-server
sysrc mysql_enable="YES"
service mysql-server start
Kurulumdan sonra veritabanı güvenliğini sağlamak için mysql_secure_installation gibi komutları çalıştırmayı unutmayın (MySQL için).
Versiyon Kontrol Sistemi (Git)
Kod geliştiriyorsanız veya yapılandırma dosyalarını yönetiyorsanız Git vazgeçilmez bir araçtır.
pkg install git
Yedekleme Stratejileri
Veri kaybı, bir sunucu yöneticisinin karşılaşabileceği en kötü senaryolardan biridir. Bu nedenle, kapsamlı bir yedekleme stratejisi oluşturmak hayati öneme sahiptir.
* Yedeklemenin Önemi: Donanım arızaları, yazılım hataları, yanlış yapılandırmalar veya siber saldırılar nedeniyle veri kaybı yaşanabilir. Düzenli ve güvenilir yedeklemeler, bu tür felaketlerden kurtulmanızı sağlar.
* Kullanılacak Araçlar:
* tar: Dosya ve dizinleri arşivlemek için klasik bir Unix aracıdır.
* rsync: Dosyaları yerel olarak veya ağ üzerinden senkronize etmek için etkilidir. Yalnızca değişen dosyaları kopyalayarak bant genişliğinden tasarruf sağlar.
* ZFS Anlık Görüntüleri (Snapshots): Eğer ZFS kullanıyorsanız, anlık görüntüler belirli bir zamandaki dosya sisteminin durumunu kaydetmek için inanılmaz derecede hızlı ve verimli bir yoldur. Felaket durumunda hızlı geri dönüş sağlar.
zfs snapshot zpool_adı/filesystem_adı@yedek_adı
* Yedekleme Hedefleri: Yedeklemelerinizi farklı bir diske, farklı bir sunucuya veya bulut depolama hizmetlerine (AWS S3, Google Cloud Storage vb.) kopyalayın. “3-2-1 kuralı”nı uygulamak iyi bir yaklaşımdır: verilerinizin 3 kopyasını tutun, 2 farklı ortamda ve 1 kopyası off-site (uzak konumda) olsun.
* Otomatik Yedeklemeler: cron kullanarak yedekleme işlemlerini otomatikleştirin.
* Yedeklemeleri Test Etme: Yedeklemelerinizin gerçekten çalışıp çalışmadığını düzenli olarak test edin. Bir yedekleme stratejisi, ancak geri yükleme yapabildiğinizde değerlidir.
Düzenli Bakım ve Yönetim
Sunucunuzu kurduktan sonra işiniz bitmez. Optimal performans, güvenlik ve kararlılık için düzenli bakım ve yönetim faaliyetleri gereklidir.
* Sürekli Güncellemeler: Temel sistem (freebsd-update) ve paketlerin (pkg update && pkg upgrade) düzenli olarak güncel tutulduğundan emin olun. Otomatik güncellemeler, belirli riskleri olsa da, bazı ortamlar için düşünülebilir.
* Log Kontrolü: Sistem günlüklerini (/var/log) düzenli olarak inceleyin. Anormal girişler, hata mesajları veya güvenlik uyarıları olup olmadığını kontrol edin. Log analizi araçları (örneğin logcheck) bu süreci otomatikleştirebilir.
* Performans İzleme: Sunucunuzun CPU, bellek, disk G/Ç ve ağ kullanımını sürekli izleyin. Yüksek kaynak tüketimi, performans sorunlarının veya potansiyel saldırıların belirtisi olabilir. top, vmstat, iostat gibi araçlar veya daha gelişmiş izleme çözümleri (Netdata, Prometheus, Grafana) kullanabilirsiniz.
* Güvenlik Denetimleri: Güvenlik duvarı kurallarınızı, SSH yapılandırmanızı ve kullanıcı izinlerini düzenli olarak gözden geçirin. Yeni yazılımlar kurduğunuzda, bunların güvenlik etkilerini değerlendirin.
Disk Alanı Yönetimi: Disk kullanımını izleyin ve gereksiz dosyaları temizleyin. df -h ve du -sh gibi komutlar disk alanı kullanımını anlamanıza yardımcı olur.
Sonuç
Yeni bir FreeBSD 12.0 sunucusunun kurulumu, dikkatli ve metodik bir yaklaşım gerektiren önemli bir süreçtir. Bu makalede özetlenen adımlar – temel sistem ve paket güncellemeleri, kapsamlı güvenlik önlemleri, sistem yapılandırması ve optimizasyonu, izleme ve günlükleme, temel servislerin kurulumu ve düzenli bakım – sunucunuzun temelini sağlam bir şekilde atmanızı sağlar. Güvenli bir SSH erişimi yapılandırmaktan, bir güvenlik duvarı kurmaya ve düzenli yedekleme stratejileri oluşturmaya kadar her adım, sunucunuzun uzun vadeli kararlılığı ve güvenliği için kritik öneme sahiptir.
Bu ilk adımları titizlikle uygulayarak, hem potansiyel güvenlik açıklarını en aza indirir hem de sunucunuzun performansını maksimize edersiniz. Unutmayın ki, sunucu yönetimi sürekli bir öğrenme ve adaptasyon sürecidir. Teknolojiler geliştikçe ve tehditler değiştikçe, sisteminizi güncel tutmak ve en iyi uygulamaları takip etmek hayati önem taşır. Bu makale, FreeBSD sunucu maceranızda size yol gösterici bir başlangıç noktası sunmayı amaçlamaktadır.