Apache Web Sunucuyu Yurt Dışı (Türkiye Dışı) Trafiğe Kapama
Merhaba, bu yazıda apache web sunucularını yurt dışı (türkiye dışı) internet trafiğine kapamada apache konfigurasyon dosyasına konulacak ayar bloğunu paylaşacağım.

Yazının içindekileri şu şekildedir:



a. Türkiye IP Subnet'lerini Elde Etmede İzlenen Yol

Türkiye ip aralıkları paylaşan ücretsiz


web adresinden Türkiye ip aralıkları alınmıştır. Bu adresin ve bir başka makale paylaşan adresin belirttiklerine göre ücretsiz ülke ip aralıkları paylaşan web sitelerinin paylaştıkları veriler ücretli ülke ip aralıkları paylaşan web sitelerine göre daha az doğru bilgi içermekteymiş. Bu nedenle ücretsiz web siteden alınan ip aralıkları tam manasıyla doğru diyemiyoruz ama çoğunlukla doğru.

Ücretsiz Türkiye IP aralıkları paylaşan web sitesindeki her bir ip aralığını CIDR formatına (ip bloğu / subnet formatına) dönüştüren bir araç aranmıştır. Bunun için

https://www.ipaddressguide.com/cidr

adresindeki ip aralıklarını CIDR formatına (ip bloğu / subnet formatına) dönüştüren online dönüştürücü araç kullanılmıştır. IP aralıklarını CIDR formatına dönüştürmeye ihtiyaç vardır, çünkü apache konfigurasyon dosyası syntax (söz dizimi) gereği ip aralığı kabul etmiyor. CIDR formatında ip bloğu / subnet kabul ediyor.

Tüm ip aralıkları tek tek dönüştürülmüştür ve karşılığında ip blokları / subnet'leriyle beraber bir txt dosyasına kaydedilmiştir.



ip_araliklari_ve_karsiliginda_bloklari.txt:


102.217.236.0 - 102.217.236.255

102.217.236.0/24

103.130.145.0 - 103.130.145.255

103.130.145.0/24

103.130.147.0 - 103.130.147.255

103.130.147.0/24

104.132.168.0 - 104.132.168.255

104.132.168.0/24

104.166.156.0 - 104.166.157.255

104.166.156.0/23

...



Apache konfigurasyon dosyası ip ayarı için sadece ip bloğu / subnet'i aldığından txt dosyasındaki sadece ip bloklarını / subnet'lerini filtrelemek gerekmiştir. Bunun için bir linux shell komutu grep kullanılmıştır ve oluşturulan txt dosyasından ilgili subnet kısımları farklı bir txt dosyasına kaydedilmiştir.



Linux Terminal:
grep -v "-" ip_araliklari_ve_karsiliginda_bloklari.txt| grep "\." > subnetler.txt


     -v : Tersi anlamındadır. Yani komutun kullanımına 
          göre dosyadan - (tire) içermeyen satırları 
          getir işlemini yapar.




Yukarıdaki linux shell komutu grep ile önce - (tire) içermeyen satırlar alınmıştır, sonra . (nokta) içeren satırlar alınmıştır. Nokta filtrelemesi ile boşluk içeren satır atlamalar elimine edilmiştir. Böylece sadece ip blokları / subnet'ler alt alta yeni txt dosyasında kalmıştır.

Ardından apache'de konfigurasyon dosyasından belirli ip'lere erişimi açma, diğer her yere erişimi kapama yapan ayar bloğu alınmıştır.



apache2.conf


...

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted

        order deny,allow
        deny from all
        allow from ::1
        allow from 127.0.0.1

        ...

</Directory>

...





Bu ayar bloğuna alt alta tüm filtreleyerek elde ettiğimiz ip bloklarını / subnet'lerini eklememiz gerekir. Fakat ayar bloğunda görüldüğü gibi her ip bloğuna / subnet'ine allow from ön anahtar kelimesi eklememiz gerekir. Bunun için bir php script'i hazırlanmıştır.



PHP Script'i:

<?php

	$file1 = fopen("subnetler.txt", "r");
	$file2 = fopen("apache_konfigurasyon_hali", "a+");

	while (($line = fgets($file1)) !== false) {
	        fwrite($file2, " allow from " . $line);  
	}

	fclose($file1);
	fclose($file2);

?>





Bu script çalıştırıldığında her bir ip bloğunun başına allow from anahtar kelimesi sırayla eklenmiştir ve alt alta yeni bir txt dosyasına yazılmıştır. Daha sonra allow from'lu ip blokları / subnet'leri komple kopyalanmıştır ve apache2.conf konfigurasyon dosyasında <Directory /var/www> ... </Directory> etiketleri arasına yapıştırılarak eklenmiştir.



Apache2.conf:


...

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted

        order deny,allow
        deny from all
        allow from 102.217.236.0/24
        allow from 103.130.145.0/24
        allow from 103.130.147.0/24
        allow from 104.132.168.0/24
        allow from 104.166.156.0/23
        
        ... (devamını yazmıyorum, çünkü 3bin satır) ...

</Directory>

...





Böylece apache servisi restart'landığında apache web sunucu Türkiye dışı ip'lerden gelen isteklere 401 yanıtı ile engel koymuştur, Türkiye içi ip'lerden gelen isteklere 200 OK yanıtı ile erişim sunmuştur.



Linux Terminal:

sudo service apache2 restart


[*] Uyarı 1:


Web dünyasındaki online proxy servisleri aracılığıyla yurt dışında dünyanın çeşitli başkentlerinden apache web sunucuya erişim denemeleri yapıldığında erişimin engellendiği görülmüştür. Yurt içinde örnekleme olarak Türk Telekom, Vodafone, Türksat Kablonet internet altyapılarından erişim denemesi yapıldığında ise apache web sunucuya erişildiği görülmüştür. Yalnız Türkiye IP Aralıkları paylaşan bu ücretsiz web sitesi ip aralıklarını paylaşırken en az hatayla ibaresiyle sunmaktadır. Dolayısıyla paylaştığı ip aralıklarında hatalar (yani Türkiye değil de farklı bir ülkeye ait ip aralıkları) olabilir. Bu nedenle istisnai olarak başka ülkelerin ip aralığı da izin listemize eklenmiş olabilir. Fakat genel itibariyle sorun görülmemiştir. Apache sunucumda log'ları takip ettiğimde önceleri daima yurt dışından trafik alırken şimdi %98 oranında o trafik düşmüş vaziyettedir.

[*] Uyarı 2:


Bu hazırlıklar neticesinde apache web sunucuyu yurtiçine açma, yurt dışına kapama işlemi sonrası fark edilmiştir ki ücretsiz Türkiye ip aralıklarını paylaşan web sitesi otomatik bir araçla apache web sunucular için ayar bloğunu oluşturup sunmaktaymış.





Bu da kötü bir süpriz olmuş oldu benim için. Dolayısıyla burada paylaşacağım ayar bloğunu ücretsiz Türkiye ip aralıkları paylaşan web sitenin şu adresinden de

IP2Location Web Sitesi Firewall Kuralı İndirme

edinebilirsiniz. Bu hazırladığım makaledeki ayar bloğu manuel yollardan oluşturulmuştur. O nedenle resmi web sayfanın ayar bloğunu almayı tercih edebilirsiniz. Ayrıca IP aralıkları 2 ayda bir güncellenmektedir. Bu nedenle bu sayfayı tercih edebilirsiniz.


b. Apache'de Türkiye Trafiğine İzin, Yurt Dışı Trafiğine Yasak Ayar Bloğu

Apache'de /var/www veya varsayılan kurulum halindeyseniz /var/www/html olan <Directory etiketi bulunur ve aşağıdaki gibi yapılır:

apache2.conf:

Apache2.conf Yapılandırma Ayar Bloğu

Ardından apache web sunucu servisi yeniden başlatılır.

Linux Terminal:

sudo service apache2 restart


Böylece değişiklikler aktifleşir ve apache web sunucu yurt dışı trafiğine benim gözlemlerime göre %98 kesinlikte kapanır, yurt içi trafiğine ise açık olur.

EK: Hata Ayıklama Amaçlı Türkiye IP Aralıkları ve Karşılığında Subnet'leri

Manuel yollardan yaptığım ip aralıklarını al, dönüştür, kaydet işleminde hatalı bir işlem yapılabilir diye geri dönük bir kayda dönebilmek adına aşağıdaki hata ayıklama kütüğü tutulmuştur. İsteyen bu aralıklarla subnet karşılıklarını kıyaslayabilir ve hata var mı kontrolü yapabilir.

Debugging Amaçlı Manuel Uygulanan CIDR Dönüşümleri

Yanlışlıkla bu hata ayıklama amaçlı olan ip aralıkları ve subnet'lerini apache2.conf'a (!) yapıştırmaya kalkmayın. Hata alırsınız. Buradaki ip aralıkları ve subnet'leri hata ayıklama amaçlı paylaşıldı. Apache2.conf'a yapıştıracağınız ip subnet listesi Apache2.conf Yapılandırma Ayar Bloğu linkinde yer alıyor.

Kaynak:

Bu yazı 24.08.2022 tarihinde, saat 14:57:48'de yazılmıştır. 23.08.2024 tarihi ve 21:20:23 saatinde ise güncellenmiştir.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 1410
Yorumlar
Henüz yorum girilmemiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :