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.

AA

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
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
Ufw ipv6

İ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 status verbose

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
Ufw kullanimi

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
Ufw kurallar

İ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'
Ufw status backup

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.