27.02.2021

Youtube'u nasıl engellerim

Gördüğüm kadarıyla herkesin hedefi bu. Evde çocuk var, tableti var, ve eline tablet geçen çocuk Youtube'u bırakmıyor. Ebeveynler de nasıl engellerim diye düşünüyorlar.

Kolay bir yol buldum. Bir Raspberry PI ve PI-Hole ile istenen cihaz üzerinde istenen engelleme (sadece Youtube değil, başka adresler de engellenebilir) yapılabiliyor. Raspberry PI nasıl edinilir, üzerine bir işletim sistemi nasıl kurulur ve PI-Hole nasıl çalışır hale getirilir, bu adımları atlıyorum.

PI-Hole kurulduktan (modem üzerinde DNS yönlendirmeleri, DHCP işleri vs bittikten) sonra pi-hole'a http://pi.hole gibi bir adresten ulaşabiliyor olmalısınız. Ulaşamıyorsanız cihazlarınızın gizli DNS (private DNS) kullanmadığından emin olun. http://pi.hole adresi üzerinden pi-hole'a ulaştıktan (ve kurulum sırasında verilen şifre ile oturum açtıktan) sonra sol üstte yer alan üç çizgili butondan menüyü genişletin (masaüstü bir bilgisayardan giriyorsanız menü solda açık gelir).

Menüde "Group Management" altından Groups'u seçin. Buraya YoutubeYok gibi bir isimle yeni bir grup yaratın. Varsayılan "Default" grubunuzla birlikte 2 grubunuz olacak. Daha sonra yine menüden "Group Management"in altındaki Clients'i seçin. Buraya kısıtlamanın uygulanacağı cihazın MAC adresin girerek sağındaki grup adını bir önceki adımda yarattığımız YoutubeYok (veya ne verdiyseniz ona) ayarlayın. Bu şekilde sadece kısıtlamaların uygulanacağı cihazı bir grubun üyesi yaptık. Başka cihazların da bu kısıtlamaya maruz kalmasını istiyorsanız onları da eklemelisiniz.

Nihayet son aşamada menüden "Group Management" altından Domains'i seçin. Bu sayfaya yasaklanmasını istediğiniz youtube adreslerini yazın. Sadece youtube.com yetmeyebilir, wildcard kullanarak googlevideo.com, googleapis.com ve google.com gibi adresleri de eklemeniz gerekebilir.

Bu adımdan sonra yasaklamalar devreye girmiş olacak. Kaydettikten hemen sonra devam eden bir akış varsa Youtube hemen kesilmeyecektir. Sistem DNS sorgularını "yanlış cevaplandırma" mantığına dayandığı için malum cihaz(lar)ın üzerinde zaten çözülmüş sorguların süresi geçene kadar (tahminen birkaç dakika) herşey normal çalışmaya devam edecektir.

Bu elbette bu işi yapmanın tek yolu değil, ama Raspberry PI uygun fiyatlı bir cihaz. pi-hole da tek seçenek olmayabilir, pfSense gibi çözümler de uygulanabilir, ama bu çok daha kolay bir yöntem gibi geldi bana.

25.02.2021

Powershell ile sayma

Varsayalım ki şöyle bir hedefimiz var; bugün uygulama olay günlüğü (Application Event Log) içinde kaydı düşülen olayların ID'lerine göre hangisinin kaç kez olduğunu bulmak istiyoruz.

Get-WinEvent -FilterHashTable @{LogName="Application";StartTime="2021-02-25 00:00"} |
Group-Object -Property ID -NoElement |
Sort-Object -Property Count -Descending

Bunu bir de Log Parser ile yapmak istedim:

SELECT EventID,
COUNT(EventID) As IdCount
FROM Application
WHERE (TimeGenerated>TO_TIMESTAMP('2021-02-25 00:00:00','yyyy-MM-dd HH:mm:ss'))
GROUP BY EventID
ORDER BY IdCount DESC

Aralarındaki benzerik hoşuma gitti.

23.02.2021

IP adresinden coğrafi konum öğrenme

Sysmon Tools'un sayfasını incelerken basit bir IP adresini coğrafi konuma çeviren servisi öğrendim, hoşuma gitti. Ücretsiz sürüm ayda 10.000 sorguya kadar izin veriyor. Bu sebeple Powershell ile kullanma yoluna gittim.

Herşeyden önce ipstack.com üzerinde ücretsiz bir hesap açıp API access key'ine sahip olmak gerekiyor.

Varsayalım ki elimde $IPAdresi adında bir değişen var ve içeriğinde coğrafi konumunu sorgulamak istediğim bir IP adresi var.

Sorguları göndermek için $IPAdresi değişkenini kullanarak şöyle bir URI oluşturuyoruz.

$uri  = "http://api.ipstack.com/" + $IPAdresi + "?access_key=xxxx-xxx-xxx-xxx"

Daha sonra bu adrese bir Invoke-WebRequest ile istek gönderdim ve sonucu $wr değişkenine kaydettim.

$wr = Invoke-WebRequest -uri $uri -UseBasicParsing

IPStack.com'un cevabı bir JSON nesnesi. Bunu dönüştürebilmek için de şu satırı kullandım:

$json = $wr.content | ConvertFrom-Json

Bu adımdan sonra $json nesnesinin şu alt alanları döndü ki çok işime yaradı.

continent_code: 2 harfli kıta kodu (AF: Afrika, AS: Asya, EU: Avrupa, NA: Kuzey Amerika, OC: Okyanusya, SA: Güney Amerika, AN: Antarktika)

continent_name: Yukarıdakinin tam hali, kıta adı

country_code: 2 harfli ülke kodu (tam liste için Wikipedia sayfasına bakın)

country_name: Yukarıdakinin tam hali, ülke adı

region_code: Bölge kodu. Amerika için eyalet kodları, Türkiye için plaka numaraları.

region_name: Bölge ismi. Amerika için eyalet ismi, Türkiye için şehir ismi.

city: Şehir. Türkye için yukarıdaki ile aynı.

Ayrıntılar için şu sayfaya bakılabilir.

Sonradan aklıma geldi, ama Invoke-WebRequest | ConvertFrom-Json kullanmak yerine tek seferde Invoke-RestMethod kullanılabilir. İkisi de Powershell 3.0 ile gelmiş.