Düz FTP protokolü 1971'de tasarlandı — şifreleme diye bir kavram yoktu. Kullanıcı adı, şifre ve dosya içeriği ağ üzerinde açık metin olarak aktarılıyor. Kurumsal ortamda böyle bir yapı kullanmak ciddi güvenlik riski.
Rocky Linux'ta vsftpd ile TLS şifreli FTPS sunucusu kurarak bu sorunu çözüyorum. SELinux ve firewalld entegrasyonuyla tam güvenli bir yapı elde ediyorsunuz.
FTPS vs SFTP: Fark Ne?
İki terim sık karıştırılıyor:
- FTPS (FTP over SSL/TLS): Klasik FTP protokolüne TLS şifreleme ekleniyor. Port 21 veya 990. vsftpd ile kuruyoruz.
- SFTP (SSH File Transfer Protocol): FTP ile alakası yok, SSH üzerinden çalışıyor. Port 22. OpenSSH ile geliyor.
Her ikisi de güvenli. Kurumsal uygulamalar genellikle FTPS bekliyor. SFTP ise Linux yöneticileri için daha pratik.
1. vsftpd Kurulumu
dnf install -y vsftpd
systemctl enable --now vsftpd
2. SSL Sertifikası Oluşturma
Self-signed sertifika oluşturun (üretim için Let's Encrypt öneriyorum):
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem -subj "/C=TR/ST=Izmir/L=Izmir/O=SirketAdi/CN=ftp.sirketiniz.com"
chmod 600 /etc/vsftpd/vsftpd.pem
3. vsftpd Yapılandırması
/etc/vsftpd/vsftpd.conf dosyasını düzenleyin:
# Temel ayarlar
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
TLS/SSL ayarları
ssl_enable=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_tlsv1_2=YES
ssl_sslv2=NO
ssl_sslv3=NO
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
Kullanici izolasyonu (chroot)
chroot_local_user=YES
allow_writeable_chroot=YES
local_root=/home/ftp/$USER
Pasif mod
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
pasv_address=SUNUCU_IP
Log
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
log_ftp_protocol=YES
systemctl restart vsftpd
4. FTP Kullanıcısı Oluşturma
Shell erişimi olmayan FTP kullanıcısı oluşturun:
useradd -m -d /home/ftp/ftpkullanici -s /sbin/nologin ftpkullanici
passwd ftpkullanici
mkdir -p /home/ftp/ftpkullanici/upload
chown -R ftpkullanici:ftpkullanici /home/ftp/ftpkullanici
5. SELinux Yapılandırması
Rocky Linux'ta SELinux varsayılan olarak aktif. FTP için gerekli politikaları etkinleştirin:
setsebool -P ftp_home_dir on
setsebool -P ftpd_full_access on
SELinux etiketi ekleyin:
semanage fcontext -a -t var_log_t "/var/log/vsftpd.log"
restorecon -v /var/log/vsftpd.log
Hata alıyorsanız kontrol edin:
ausearch -m AVC -ts recent | grep vsftpd
sealert -a /var/log/audit/audit.log | grep vsftpd
6. Firewalld Yapılandırması
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=40000-50000/tcp
firewall-cmd --reload
firewall-cmd --list-all
Pasif mod için kernel modülünü yükleyin:
modprobe nf_conntrack_ftp
echo "nf_conntrack_ftp" >> /etc/modules-load.d/ftp.conf
7. Bağlantı Testi
FileZilla ile test edin:
- Host: ftp.sirketiniz.com
- Port: 21
- Encryption: Require explicit FTP over TLS
- Kullanıcı/Şifre: Oluşturduğunuz FTP kullanıcısı
Komut satırından test:
curl -v --ssl-reqd ftp://ftp.sirketiniz.com/ --user ftpkullanici:sifre --insecure
Sık Karşılaşılan Sorunlar
500 OOPS: refusing to run with writable root inside chroot: vsftpd.conf'a şunu ekleyin:
allow_writeable_chroot=YES
Pasif mod bağlantısı başarısız: pasv_address değerinin sunucunun public IP adresi olduğunu kontrol edin.
SELinux izin reddi: Özel politika oluşturun:
ausearch -m AVC | audit2allow -M vsftpd_custom
semodule -i vsftpd_custom.pp
Sonuç
vsftpd ile Rocky Linux üzerinde TLS şifreli, SELinux korumalı ve chroot izolasyonlu güvenli bir FTP sunucusu kurdunuz. Kullanıcılar sadece kendi klasörlerini görebiliyor, tüm bağlantılar TLS ile şifreli aktarılıyor. Kurulum veya yapılandırma konusunda sorularınız varsa iletişim formundan ulaşabilirsiniz.