UFW, Ubuntu, Linux, GeoIP, MaxMind, Debian, RedHat

UFW ile GeoIP Tabanlı Kural Yapılandırması

yazar:

kategori:

Giriş

Linux dağıtımlarında kullanılan ve bir güvenlik duvarı olan UFW, IPtables güvenlik duvarının yapılandırmasını kolaylaştırmak için geliştirilmiştir. 

Ayrıca UFW’nin varsayılan olarak kapalı olduğunu, kurulumdan sonra etkinleştirmek gerektiğini hatırlatmakta fayda vardır.

Bu noktadan sonra işletim sistemimiz Debian sunucu, GeoIP Database için de MaxMind DB olarak yazımıza devam edeceğiz.

MaxMind, internet üzerindeki IP adreslerinin coğrafi konumlarını belirlemek için kullanılan bir teknoloji sağlayıcısı olduğundan; geliştirici ve işletmeler ürünlerini optimize etmekte bu teknolojiden yararlanırlar.

Debian ve CentOS sunucularda UFW Kurulumu

Debian için UFW Kurulumu:

Debian sunucularda main repoda UFW paketini doğrudan kurabilirsiniz:



CentOS için UFW Kurulumu:

UFW RedHat tabanlı dağıtımlarda default repolarda bulunmadığından. EPEL reposunun eklenmesi gerekmektedir.

EPEL reposunun eklenmesi sonrası UFW kurulumu gerçekleştirebilir.

  • https://docs.fedoraproject.org/en-US/epel/
  • https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-using_firewalls

UFW’nin Temel Kullanımı

UFW‘yi kullanarak, belirli portları açmak veya kapatmak, belirli IP adreslerine izin vermek veya engellemek gibi işlemler yapabilirsiniz.

> Örneğin, 21 portunu açmak için ufw allow 21 komutunu, kapatmak için ufw deny 21 komutunu kullanabilirsiniz

Bir IP adresini veya IP bloğunu Whitelist’e alıp sınırlamalara takılmamak için ufw allow from <IP> komutunu kullanabilirsiniz.

> Bağlantı kesintisi yaşamamak için kurulum sonrasında etkin olmayan UFW’yi etkinleştirmeden önce IP adresinizi Whitelist’e alabilirsiniz.

Kurallar eklendikten sonra ufw enable komutu ile UFW‘yi aktif hale getirebilirsiniz.

Örnek:


GeoIP Yapılandırması

Gerekli Paketlerin Kurulumu:

GeoIP tabanlı kuralların yapılandırılması için bir takım paketlerin kurulması gerekiyor, bu paketler CSV okuma, Iptables için pluginleri içeriyor.

apt install perl xtables-addons-common libtext-csv-xs-perl libmoosex-types-netaddr-ip-perl

Ayrıca MaxMind DB’den alacağımız CSV dosyalarını tutmak ve derlemek için bir dizin oluşturacağız:

mkdir /usr/share/xt_geoip


MaxMind GeoIP CSV indirilmesi

MaxMind CSV formatında hazırladığı Database’i sürekli olarak yenilendiğinden dolayı bunu bir betik ile indirip ilgili dizine dosyaları aktaracağız.

Betik:

#!/bin/bash
LICENSE_KEY="your_license_key"
url="https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country-CSV&license_key=$LICENSE_KEY&suffix=zip"
local_zip_path="/usr/share/xt_geoip/GeoLite2-Country-CSV.zip"
curl -o "$local_zip_path" "$url"
unzip "$local_zip_path" -d "/usr/share/xt_geoip/"
extracted_folder=$(ls /usr/share/xt_geoip/ | grep 'GeoLite2-Country-CSV_')
mv "/usr/share/xt_geoip/${extracted_folder}"/* /usr/share/xt_geoip/
rm -r "/usr/share/xt_geoip/${extracted_folder}/"
rm "$local_zip_path"

Yukarıdaki betikte LICENSE_KEY değişkenine lisans keyinizi girerek güncel GeoIP Database’ini alabilirsiniz. 

Database sürekli olarak yenilendiği için betiğin bir Cronjob ile çalıştırmasında fayda var. Eğer çalıştırılmazsa Database’e eklenen yeni IP’ler için erişim problemleri yaşayabilirsiniz.


Lisans ile ilgili detaylar: https://support.maxmind.com/hc/en-us/articles/4407111582235-Generate-a-License-Key

Betiğin çalıştırılması:

UFW için veritabanının Build Edilmesi

CSV formatında bulunan Database’in UFW ile kullanılabilir hale getirilmesi için build işleminin yapılması gerekiyor:

/usr/libexec/xtables-addons/xt_geoip_build_maxmind -D /usr/share/xt_geoip/ -S /usr/share/xt_geoip/

Burada çalışan bash kodunu açıklamamız gerekir:  

/usr/libexec/xtables-addons/xt_geoip_build_maxmind binary’si GeoIP Database’inin MaxMind özelinde build edilmesini sağlıyor. Aynı şekilde farklı bir Database kullanılacaksa /usr/libexec/xtables-addons/xt_geoip_build binary’si kullanılabilir.

-D parametresi Destination, yani CSV dosyalarının nerede işleneceği

-S parametresi Source ise CSV dosyalarının nereden okunacağı bilgisini alıyor.

GeoIP için Plugin’in Kernel’e Eklenmesi

GeoIP tabanlı UFW kuralları için eklediğimiz xtables pluginini Kernel’a tanıtarak kullanılabilir hale getiriyoruz:

modprobe xt_geoip

Yukarıdaki komut anlık olarak eklenecektir, bunu kalıcı hale getirmek isterseniz aşağıdaki komutu kullanabilirsiniz:

echo xt_geoip | tee -a /etc/modules

GeoIP için Kural Eklenmesi

Yapılandırmalar tamamlandıktan sonra, ihtiyacınıza göre GeoIP kurallarının eklenmesini sağlayabilirsiniz.

Burada önemli bir noktaya değinmekte fayda var. UFW’de GeoIP tabanlı kural yaparken bu işlemleri hem kalıcı kılmak adına hem de kolay yönetebilmek adına aşağıdaki dosyaları ekliyoruz:

1) /etc/ufw/before.rules
2) /etc/ufw/before6.rules

Burada ilk dosya IPV4 için işlenecek kurallar, ikinci dosya ise IPV6 için işlenecek kuralların yer aldığı kısım.

ÖNEMLİ NOT:

Eğer Port kısıtlaması yapacak ve işlem sağlayacağınız IP adresi veya bloğu bu şartın dışarısında kalacak ise GeoIP tabanlı kurallar öncesinde aynı dosyalarda GeoIP tabanlı kuralların öncesinde IP’nizi Whitelist’e eklemeniz gerekmekte. Aynı şekilde bu dosyalar içerisinde eklenecek kuralları, dosyanın sonunda yer alan COMMIT satırından önce eklemeniz gerekmekte.

Örnek olarak: SSH portunu sadece Türkiye IP’lerine vereceksiniz fakat Türkiye dışında bir IP Adresi veya bloğundan bu sunucuya SSH bağlantı yapılması gerekiyor.

Bunun için sırasıyla şu satırların eklenmesi gerekiyor:

-A ufw-before-input -s 192.168.1.101 -j ACCEPT -A ufw-before-input -m geoip -p tcp –dport 22 –src-cc TR -j ACCEPT

İlk satırda yer alan:

-s parametresi bütün portlara iznin tanımlandığı IP,
-j parametresi vermiş olduğunuz IP adresine uygulayacağınız izin

Burada ACCEPT komutu verilecek tanımlanan IP adresine izin verileceği anlamına gelmektedir.

İkinci satırda yer alan:

-m parametresi ile kullanacağımız modulün ismi,
-p parametresi ise portun tipi (TCP/UDP/HTTP/s vb.),
-dport parametresi ise kuralın tanımlanacağı port numarası,
–src-cc parametresi kaynağın geldiği ülke bilgisi,
-j parametresi ise bu tanımlanan bilgilere izin verilip verilmeyeceğinin bilgisi

Bu eklemelerden sonra /etc/ufw/before.rules dosyasının son görünümü şu şekilde olmalıdır:

-A ufw-before-input -s 192.168.1.101 -j ACCEPT
-A ufw-before-input -m geoip -p tcp --dport 22 --src-cc TR -j ACCEPT
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

Özetle 22 SSH portu için sadece Türkiye IP’lerine, 192.168.1.101 için ise bütün portlara erişim sağlayacak şekilde izinler tanımlandı.

Eğer spesifik olarak GeoIP bazlı kuralların overwrite edilmesi, bu kuralın dışına çıkılması gerekilirse şu adımlar izlenebilir:

Örneğin 22 (SSH) portu sadece Türkiye IP’lerine izin verilmişti, burada bu kuralın dışına çıkılarak yurtdışında bulunan bir IP’ye izin vereceğiz.

Bunun için /etc/ufw/before.rules ve /etc/ufw/before6.rules dosyasına GeoIP kuralı öncesi için ekleme yapacağız.

-A ufw-before-input -p tcp --dport 22 -s <Yurt Dışı IP'si> -j ACCEPT
-A ufw-before-input -m geoip -p tcp --dport 22 --src-cc TR -j ACCEPT
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

Daha sonrasında ufw reload ile kural tanımlanır.

Aynı şekilde Türkiye IP’leri içerisinde bulunan fakat engellenmesi istenen bir IP içinde benzer işlemler yapılabilir:

-A ufw-before-input -p tcp --dport 22 -s <Engellenecek Türkiye IP'si> -j DROP
-A ufw-before-input -m geoip -p tcp --dport 22 --src-cc TR -j ACCEPT
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

Burada overwrite edilecek spesifik kuralların GeoIP bazlı kural öncesinde yazılmasına dikkat etmek gerekiyor.

Daha detaylı bilgilere ulaşmak ister ve bilginizi geliştirmek isterseniz aşağıdaki kaynaklar sizin içindir.

https://people.netfilter.org/peejix/geoip/howto/geoip-HOWTO-3.html
https://github.com/tinti/xtables-addons
https://www.maxmind.com/en/geoip-databases


Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir