VSFTPD (Very Secure FTP Daemon) adından da anlaşılacağı üzere “Çok Güvenli FTP Servisi” anlamına gelir. Linux ve Unix benzeri işletim sistemleri üzerinde çalışan açık kaynak kodlu ve hafif bir FTP sunucusu yazılımıdır.
Temel Özellikleri:
- Yüksek güvenlik (chroot desteği, SSL/TLS, kullanıcı izolasyonu)
- Performans odaklı mimari (yüksek eşzamanlı bağlantı desteği)
- Kolay yapılandırma ve sade konfigürasyon dosyası
- Standart FTP protokolüyle uyumlu (RFC’lere uygun)
- Aktif/pasif mod desteği
- Anonim veya kimlik doğrulamalı kullanıcı erişimi desteği
VSFTPD Nasıl Çalışır?
VSFTPD istemcilerden gelen FTP bağlantı isteklerini dinleyerek çalışır. İstemciler FTP veya SFTP protokolü üzerinden dosya gönderme/alma işlemlerini gerçekleştirir.
VSFTPD’nin çalışma mekanizması genel hatlarıyla aşağıdaki gibidir;
1. Bağlantı Kabulü
VSFTPD, TCP 21 numaralı port üzerinde dinleme yapar (varsayılan). İstemci bu porta bağlanır.
2. Kimlik Doğrulama
- Yerel sistem kullanıcıları ile
- PAM (Pluggable Authentication Module) üzerinden
- Anonim erişim (opsiyonel)
3. Yetkilendirme ve İzolasyon
Kullanıcının sadece kendine atanmış dizinlere erişebilmesi için chroot özelliği kullanılabilir.
4. Dosya Transferi
VSFTPD veri aktarımı sırasında aktif ya da pasif mod kullanabilir. Gerekirse SSL/TLS şifreleme (FTPS) ile güvenli aktarım desteklenir.
Neden VSFTPD Tercih Edilir?
Avantajları:
- Güvenlik Chroot, TLS/SSL desteği, yazma/yürütme kısıtlamaları sayesinde sistem güvenliğini üst düzeye çıkarır.
- Hafiflik CPU ve RAM kullanımında çok düşük bir iz bırakır. Düşük kaynaklı sistemlerde dahi kararlı çalışır.
- Kolay Yönetim Yapılandırma dosyası sade, anlaşılır ve modülerdir.
- Yüksek Performans Çoklu eş zamanlı bağlantılarda performans kaybı yaşamaz.
- Geniş Uyumluluk Ubuntu, Debian, CentOS gibi birçok Linux dağıtımında desteklenir.
Dezavantajları:
- Gelişmiş GUI arayüzü yoktur.
- Kullanıcı ve dosya yönetimi tamamen komut satırına dayanır.
Kurulum Adımları
Bu bölümde VSFTPD’nin nasıl kurulacağını ve yapılandırılacağını adım adım işleyeceğiz.
a) İşletim Sistem Güncellemesi
sudo apt update && sudo apt upgrade -y
b) VSFTPD Kurulumu
sudo apt install vsftpd -y
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
c) FTP Kullanıcısı Oluşturma
sudo adduser velikadirkozan
d) Dizin ve Yetkilerin Ayarlanması
sudo mkdir -p /ftp/velikadirkozan-ftp-directory
sudo chmod 777 -R /ftp/
sudo chmod -R 755 /ftp/velikadirkozan-ftp-directory
sudo chown velikadirkozan:velikadirkozan /ftp/velikadirkozan-ftp-directory
e) VSFTPD Yapılandırma
sudo nano /etc/vsftpd.conf
Önerilen Yapılandırma Parametreleri:
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
user_sub_token=$USER
local_root=/ftp/$USER
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
VSFTPD Konfigürasyon Açıklamaları
1. listen=YES
- Anlamı: VSFTPD, IPv4 üzerinden bağlantı kabul edecek şekilde yapılandırılır.
- Neden Kullanılır? Eğer IPv6 kullanılmıyorsa, sadece IPv4’ü dinlemesi yeterlidir.
2. listen_ipv6=NO
- Anlamı: VSFTPD’nin IPv6 desteği kapatılır.
- Not: Bu satır,
listen=YES
ile birlikte kullanıldığında, VSFTPD sadece IPv4 bağlantıları üzerinden çalışır.
3. anonymous_enable=NO
- Anlamı: Anonim (kayıtsız) kullanıcıların FTP erişimi devre dışı bırakılır.
- Neden Önemlidir? Güvenlik açısından, anonim girişler genellikle önerilmez.
4. local_enable=YES
- Anlamı: Sistemdeki yerel kullanıcılar FTP erişimi yapabilir.
- Kullanım Amacı: Her kullanıcı kendi hesap bilgisiyle oturum açabilir.
5. write_enable=YES
- Anlamı: Kullanıcıların dosya yazma (upload), klasör oluşturma gibi işlemleri yapmasına izin verilir.
- Uyarı: Bu özellik açıkken, klasör/dosya izinleri güvenli şekilde ayarlanmalıdır.
6. dirmessage_enable=YES
- Anlamı: Bir dizine girildiğinde varsa
.message
dosyasındaki içerik kullanıcıya gösterilir. - Kullanım Amacı: Her klasör için açıklama veya uyarı mesajı görüntüleme sağlar.
7. use_localtime=YES
- Anlamı: Aktarımlarda ve loglarda sistemin yerel saat dilimi kullanılır.
- Alternatifi: Varsayılan olarak UTC kullanılır; bu ayar yerel saatle daha uyumlu kayıt sağlar.
8. xferlog_enable=YES
- Anlamı: Tüm dosya transferleri bir log dosyasına kaydedilir (genellikle
/var/log/xferlog
). - Neden Kullanılır? Erişim kayıtlarının incelenmesi ve güvenlik analizi için önemlidir.
9. connect_from_port_20=YES
- Anlamı: Aktif mod FTP bağlantılarında veri transferi için port 20 kullanılır.
- Not: Eğer istemciler pasif mod kullanıyorsa, bu ayar etkisizdir.
10. chroot_local_user=YES
- Anlamı: Yerel kullanıcılar sadece kendi dizinleri içinde işlem yapabilir (chroot).
- Güvenlik: Kullanıcılar sistemin diğer bölümlerine erişemez. Kesinlikle önerilir.
11. user_sub_token=$USER
- Anlamı:
local_root
ayarında$USER
değişkeninin kullanıcı adıyla dinamik olarak değiştirilmesini sağlar. - Örnek:
local_root=/ftp/$USER
satırı varsa,sercan-user
için/ftp/sercan-user
kullanılır.
12. local_root=/ftp/$USER
- Anlamı: Her kullanıcı için FTP kök dizini
/ftp/kullanici-adi
olarak ayarlanır. - Kullanım Amacı: Kullanıcılar kendilerine özel dizinle sınırlandırılır.
13. secure_chroot_dir=/var/run/vsftpd/empty
- Anlamı: Chroot özelliği için VSFTPD’nin ihtiyaç duyduğu izole edilmiş boş dizindir.
- Not: Bu dizin boş ve sadece root tarafından yazılabilir olmalıdır.
14. pam_service_name=vsftpd
- Anlamı: VSFTPD, kimlik doğrulama işlemleri için PAM (Pluggable Authentication Modules) kullanır.
- Açıklama:
/etc/pam.d/vsftpd
dosyası üzerinden kontrol yapılır.
15. rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
- Anlamı: Eğer SSL/TLS aktifse, bu sertifika dosyası kullanılır.
- Not: Şu an
ssl_enable=NO
olduğundan bu satır aktif olarak kullanılmaz.
16. rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
- Anlamı: SSL sertifikasına ait özel anahtar dosyasıdır.
- Not: Varsayılan test sertifikasıdır. Gerçek kullanım için özel bir SSL sertifikası önerilir.
17. ssl_enable=NO
- Anlamı: SSL/TLS desteği devre dışı bırakılmıştır.
- Uyarı: Gerçek ortamda SSL/TLS devreye alınmalı ve
ssl_enable=YES
yapılmalıdır. Aksi takdirde kullanıcı adı/parola gibi bilgiler açık metin olarak ağda iletilir.
f) SSH/SFTP ile Güvenli Dosya Paylaşımı
sudo nano /etc/ssh/sshd_config
Eklemeniz Gereken Yapılandırma:
Subsystem sftp internal-sftp
Match Group ftpaccess
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Match User mrdiytest
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /ftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
Bu yapılandırma ile belirli kullanıcılar sadece SFTP üzerinden kendi dizinine erişebilir.
g) Servislerin Yeniden Başlatılması
sudo systemctl restart vsftpd
sudo systemctl restart ssh
h) Testler ve Kontroller
- FileZilla, WinSCP gibi istemcilerle test edin.
- FTP Bağlantısı: ftp://sunucu_ip_adresi
- SFTP Bağlantısı: sftp://sunucu_ip_adresi
- Kullanıcı adı/parola: velikadirkozan / belirlenen parola ile giriş yapmayı deneyiniz.
ı) Güvenlik Tavsiyeleri
- SSL/TLS: ssl_enable=YES kullanarak şifreli veri transferi sağlayın.
- Firewall Ayarı (UFW):
sudo ufw allow 21/tcp
sudo ufw allow 22/tcp
- Fail2Ban: Brute-force saldırılarına karşı koruma sağlar.
- Log Takibi: /var/log/vsftpd.log ve /var/log/auth.log düzenli izlenmelidir.