ufw (Uncomplicated Firewall) ve Güvenlik Duvarı İşlemleri
Iptables, Linux dağıtımlarında ön tanımlı olarak bulunan, yöneticinin dağıtımdaki güvenlik duvarı tabloları ve bu tablolarla ilişkili kurallar ve zincirlerin yapılandırılmasını, analiz ve yönetimini sağlayan bir uygulamadır1.
ufw
ile kıyaslandığında daha komplike bir yapı sunmaktadır. İleri seviye gereksinimlerde iptables
için ayrıca yazı yazılabilir. Ancak, şu aşamada UFW (Uncomplicated Firewall) temel gereksinimlerimizi karşıladığı, Iptables’ın karmaşıklığını azalttığı ve firewall (güvenlik duvarı) kullanımını pratikleştirdiği için tercihim oldu2.
UFW (Uncomplicated Firewall / Kolay Ateş Duvarı)
Hem konsol hem de GUI (grafiksel arayüz) üzerinden port ve güvenlik duvarı işlemlerini gerçekleştirmemize olanak veren bir güvenlik duvarı aracı olarak ifade edilebilir. Ön tanımlı olarak pasif modda bulunan UFW yönetici tarafından aktifleştirilerek kullanılabilir. Genel olarak SSH işlemleri içerisinde port açma/değiştirme/kapatma aşamalarında faydalandığımız UFW üzerinden yapabileceğimiz işlemlere biraz daha yakından bakalım3.
UFW Durum Kontrolü
Ön tanımlı olarak bir çok portun kapalı durumda tutulduğu sistemlerde açılan her port bir güvenlik sorunu oluşturabilir. Bu nedenle kontrollü bir şekilde süreç yönetilmeli, iletişimin devam etmediği portlar tekrar pasif konumda tutulmalıdır. Bu aşamada öncelikle UFW’nin durumunu kontrol edelim. Eğer root kullanıcı üzerinden giriş yaptıysanız sudo kullanmadan işlemleri gerçekleştirebilirsiniz.
sudo ufw status
Eğer UFW kurulu ve aktifleştirilmişse yukarıdaki gibi açık portlarla ilgili bilgilendirme dönecektir. Şayet yüklü değilse aşağıdaki komut ile indirebilirsiniz.
apt-get install ufw
İndirme işlemi ardından aktifleştirme işlemini de yapalım.
ufw enable
Başlangıç aşamasındaki işlemlerimiz bu kadar. Normal şartlarda, DigitalOcean droplet kurulumlarında firewall ve IPv6 (Internet Protocol’ünün altıncı revizyonu) düzenlemelerine karar verilebilmekte. Ancak kurulum aşamasında ya da sonrasında farklı düzenlemeler yapılmış olma ihtimaline karşın, IPv4 işlemlerine ek olarak IPv4 (Internet Protocol’ünün dördüncü revizyonu) düzenlemeleri yapmak istersek? Öncelikle bir durum kontrolü yapalım.
grep IPV6 /etc/default/ufw
İlgili satırda yes ya da no değerlerinden birini alacağız. yes ise güvenlik duvarı işlemlerinde IPv6 için ekstra bir değişiklik yapmamıza gerek kalmamakta. Eğer ilgili satırda no atanmışsa o halde nano ile satıra erişim değeri yes olarak değiştirmeliyiz.
sudo nano /etc/default/ufw # IPV6=yes
olarak düzenlenecek
Dosyayı kaydedip çıkış yaptığınızda artık IPv4 ve IPv6 güvenlik duvarı kurallarını yapılandırmak mümkün olacaktır. Bir kural eklendiğinde işlemler her iki IP yapısı için de benzer şekilde tanımlanacaktır ve kural satırı oluşturulacaktır. Düzenleme aşamasında 4. ve 6. revizyonlar için ayrı ayrı işlemler gerçekleştirilebilir. Aktif olan güvenlik duvarını ise aşağıdaki komutla pasifleştirmek mümkün.
ufw disable
Yazının başında kuralları status
ile listeyelemiştik. Daha detaylı bilgi için verbose
parametresini ekleyebilirsiniz4.
UFW Kuralları
Temel işlemlerin ardından artık port ve erişimlerle ilgili düzenlemelere geçebiliriz. UFW yeni kurulduğunda bir kural listelemeyebilir ya da var olan kurallara ihtiyaçlarınız doğrultusunda yenilerini eklemek isteyebilirsiniz. O halde, başlayalım. İlk örneğimizi ftp erişimi üzerine verelim ve 21. portu erişime açalım.
ufw allow 21
Ön tanımlı portlar ve servisler birbirleri yerine kullanılabilirler. Örneğin, yukarıdaki örnekteki port işlemini 21
yerine ftp
yazarak da gerçekleştirebilirdik.
ufw allow ftp
Ftp bağlantımızı sonlandırdık ve işlemlerimizi tamamladık. Artık 21. porta ihtiyacımız kalmadı. O halde, kullanılmayan, ihtiyaç duymadığımız 21. portu kapatalım.
ufw deny 21
Yukarıdaki örneğe ek olarak, TCP (Transmission Control Protocol/Internet Protocol) ve UDP (User Datagram Protocol – Kullanıcı Veribloğu İletişim Kuralları) iletişim paketlerinden birine izin vermek veya engellemek istediğimizde kullanımımızı şu şekilde güncellemeliyiz5.
ufw allow 21/tcp
ufw deny 21/tcp
ufw allow 21/udp
ufw deny 21/udp
Spesifik olarak bir port yerine port aralığı üzerinden de işlemler gerçekleştirebiliriz. Örneğin 1900-2000 arasındaki portları tcp protokolüne izin verecek şekilde açalım.
ufw allow 1900:2000/tcp
Port işlemlerinin pratik bir şekilde nasıl düzenlenebileceğinin ardından IP işlemlerine ve portları belirli IP erişimleri için nasıl düzenleyebileceğimize bakalım. Belirttiğimiz IP adresine herhangi bir port atamak için şu komutu kullanabiliriz.
ufw allow from [ip-adresi]
Ya da herhangi bir portu iletişime geçen tüm IP adreslerine açabiliriz.
ufw allow to any port 22
Belirli bir portu spesifik olarak belirttiğimiz IP ve CIDR netmask erişimlerine ise şu şekilde açarız6.
ufw allow from [ip-adresi] to 127.0.0.1 port 11211 proto tcp
ufw allow from [ip-adresi]/16 to any port 22 proto tcp
Yazının girişinde allow
ve deny
ile kural tanımlama ve pasifleştirme işlemlerine değinmiştim. Peki, tanımladımız bu kuralları tek tek nasıl sileceğiz? Örneğin SSH erişimi için tanımladığımız kuralı hem servis ismi hem de port bilgisi kullanarak nasıl sileceğimize bakalım.
ufw delete allow ssh
ufw delete allow 22/tcp
Tanımladığımız daha komplike kurallarda numaralandırma işlemi gerçekleştirebilmekteyiz. Bu şekilde numaraların referans gösterdiği kurallar üzerine hızlıca düzenlemeler yapılabilmekte. Bu işlem için öncelikle kuralların numaralarını almamız gerekir.
ufw status numbered
İlk sütundaki numaraları kullanarak yukarıdaki işlemleri gerçekleştirebiliriz. Örneğin, 3 numaralı kuralımızı silelim.
ufw delete 3
UFW Log
UFW üzerinden gerçekleşen işlemler syslog dosyasında kayıt altına alınmaktadır. Aşağıdaki kodla güvenlik duvarı tarafından loglanmış kayıtları görüntüleyebilirsiniz.
grep -i ufw /var/log/syslog
Log işlemlerini logging parametresiyle kontrol etmek mümkün. on
ile log kaydını başlatabilir off
ile durdurabilirsiniz; ufw logging on # off
UFW Sıfırlama
Yukarıdaki tüm işlemlerin ardından kuralların tamamını silmek isteyebilirsiniz. Bu durumda reset parametresini kullanabiliriz. Bu işlemin ardından kurallar silinir ve UFW tekrar pasif moda geçiriliz.
ufw reset
Komutun uygulanmasının ardından onay istenecektir.
Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)?
Onayın verilmesinin ardından gerçekleştirilmiş işlemlere dair backup alındığına dair bir döküm görüntüleyebilirsiniz.
Backing up 'user.rules' to '/etc/ufw/user.rules.20171120_193955'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20171120_193955'
Backing up 'after.rules' to '/etc/ufw/after.rules.20171120_193955'
Backing up 'before.rules' to '/etc/ufw/before.rules.20171120_193955'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20171120_193955'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20171120_193955'
Yukarıdaki dosyaları görüntülediğinizde kurallar ve filtrelere dair bilgilerin kayıt altında tutulduğunu görebilirsiniz. Özetle, en çok ihtiyaç duyulacağını düşündüğüm kullanımları listeledim. Çok daha detaylı bilgi ve kural kullanımları için man ufw
komutunu kullanabilirsiniz. SSH Tunnel ve SOCKS5 Proxy İle Güvenli ve Engelsiz İnternet başlıklı yazıda bahsi geçen port işlemleri için bu yazıki yönergeler işinize yarayacaktır.