2020-08-13

Linux, static route ve netplan

Ubuntu 18.04 ve sonrası artık route tablosuna giriş eklemek için netplan kullanıyor.

Bir örnek üzerinden gidelim. Yerel ağımızdaki IP aralığı 192.168.1.0/24 olsun. Bir de uzak ofisimiz var, onun da IP aralığı 192.168.2.0/24. Uzak ofisteki kullanıcıların merkeze ulaşması için kurulan router'ın IP adresi de 192.168.2.101 olsun.

Bu durumda iletişimin sağlanabilmesi için, örneğin, uzak ofisteki bir ubuntu makinenin üzerinde

$ sudo ip route add 192.168.1.0/24 via 192.168.2.101 dev ens32

gibi bir yönlendirme girişi yapmak gerek. Ancak bu kalıcı olmayacak. Bir sonraki yeniden başlatmada da geçerli olmasını sağlayabilmek için /etc/netplan altındaki dosyayı düzenlememiz gerekecek. Bu klasörde ismi standart olmayan bir dosya vardır, kast edilen dosya bu. Elle IP adresi ataması yapılmış bir bilgisayar için bu dosyanın içeriği şu şekilde olabilir:

network:
    ethernets:
        ens32:
            addresses:
            - 192.168.2.7/24
            dhcp4: false
            gateway4: 192.168.2.1
            nameservers:
                addresses:
                - 192.168.2.2

Buraya, gördüğüm kadarıyla gateway4'ün hemen altına, şu satırları girmek gerek:

- to: 192.168.1.0/24
  via: 192.168.2.101
Yani tam içerik şöyle olacak:

network:
    ethernets:
        ens32:
            addresses:
            - 192.168.2.7/24
            dhcp4: false
            gateway4: 192.168.2.1
             - to: 192.168.1.0/24
               via: 192.168.2.101
            nameservers:
                addresses:
                - 192.168.2.2

Bu şekilde işlem tamam.

---

2020-12-28 ek: Netplan yaml dosyasındaki hatalardan dolayı yapılandırma uygulanmazsa bunun kaydını görmek için

$ journalctl -b -g netplan # NETPLAN (büyük harflerle) de olabilir

kullanılabilir. Ayrıca yaml dosyasındaki hataları görebilmek için netplan komutu ile birlikte aşağıdaki parametreler kullanılabilir:

# netplan try # yaml dosyasındaki ayarları uygula, hata varsa mevcut duruma geri dön

# netplan apply # yaml dosyasındaki ayarları uygula

# netplan ip leases ens33 # arayüz üzerindeki DHCP atamalarını görüntüle

Bunların haricinde üzerinde çalıştığımız sistem IP adresini bir DHCP sunucudan almışsa bu sunucuyu bulmak için

$ journalctl -b -g DHCP # anahtar kelime konusunda yaratıcı olmak gerekebilir

Veya çoğu dağıtğımda /var/lib/dhclient/dhclient.leases gibi bir dosyanın içeriğini inceleyebiliriz:

$ cat /var/lib/dhclient/dhclient.leases

Bunlar işimizi görmezse UDP 68 üzerinden gerçekleşen ağdaki DHCP trafiğine göz atmak istersek:

# tcpdump -i eth0 -nev udp port 68

ve hatta ağdaki DHCP sunucuyu bulabilmek için bir dhcp-discover paketi göndermek için

# nmap --script broadcast-dhcp-discover -e eth0

DHCP'nin mevcut atamasını serbest bırakıp yeniden istekte bulunmak için

# dhclient -r

Şu anda sistemin kullandığı DNS sunucuyu görmek için

# resolvectl dns

Gerekli durumda ağ hizmetlerini tekrar başlatmak için

$ sudo systemctl restart network-manager

---

https://netplan.io/examples/

2020-08-01

WannaCry

2016 yılında Shadow Brokers adında bir hacker grubu, NSA tarafından kullanıldığı iddia edilen bazı araçları yayınladı. Bu araçların arasında birçok işletim sistemine ait sıfırıncı gün (zero day) açıklarından faydalanan bazı "faydalı" programlar vardı. Söylenene göre NSA, bu araçların kendilerine ait olduğun yalanlamadı. NSA'in bu araçları kullanarak dünyadaki bütün bilgisayarlar, mobil cihazlar ve hatta televizyonlara girebildiği, hedeflediği kişileri izleyebildiği ve bilgi topladığı iddia edildi.

Yayınlanan araçların içinde dikkat çeken bir araç olan EternalBlue, SMBv1 protokolündeki bir açıktan faydalanıyordu. 2017 yılında bu açığı kullanarak WannaCry kötücül (malicious) yazılımı dünya çapında yüzbinlerce bilgisayara bulaştı. Dosyalar şifrelendi, sistemler çalışmaz hale geldi. Şifrelenen verilerin tekrar ulaşılabilir olması için fidye ödenmesi istendi. Bazıları fidye öderken diğerleri verilerini kaybetti. Bankacılık, sağlık ve ulaşım sektöründe büyük aksaklıklar yaşandı. Sonrasında NotPetya adındaki bir kötücül yazılım da EternalBlue'yu kullandı. Sonradan bu araçların NSA tarafından orta doğudaki bankacılık sistemleri üzerinde kullandığına dair bazı bilgiler yayınlandı [7].

İlginçtir, Microsoft NSA'i sözkonusu sıfırıncı gün açıklarını 5 yıldır kullandığı ve bildirmediği için suçladı. Ya da biz öyle anladık. Sonrasında bu açıklar yayınlanan bazı yamalarla kapatıldı [8]. O günlerden sonra SMBv1 kullanımı önerilmedi. Ama olanlar olmuştu.

O dönemde Shadow Brokers'ın yayınladığı araçlardan bazıları:

  • EternalBlue: SMB protokolündeki bir zafiyeti hedef alan bir araç
  • EternalChampion: SMB protokolünde EternalBlue'dan farklı bir zafiyeti hedef alan bir araç
  • EternalRomance: Bu da SMBv1 protokolündeki bir zafiyeti hedef alan bir araç
  • EternalSynergy: Çok ilginç, bu da SMB protokolündeki bir açığı kullanıyor
  • DoublePulsar: Sistemlerde arka kapı oluşturmaya yarayan bir araç
  • ExplodingCan: IIS'i hedef alan bir araç
  • EnglishmanDentist: Microsoft Exchange Server'ı hedef alan bir araç
  • EsteemAudit: Eski Windows sürümlerindeki RDP protokolünü hedef alan bir araç
  • EducatedScholar: Oracle veritabanı sunucularını hedef alan bir araç
  • ErraticGopher: Belirli Windows sürümlerindeki Telnet protokolünü hedef alan bir araç

Mart 2017 gibi Wikileaks'te Vault 7 adında bu sefer CIA'e ait olduğu iddia edilen başka diğer araçlar (Weeping Angel, Marble Framework gibi) yayınlandı. Bu araçları daha sonra başkaca siber hareketlerin bir parçası olarak görmedik, şükür.

---

[1] https://news.slashdot.org/story/16/10/20/1926222/prosecutors-say-contractor-stole-50-terabytes-of-nsa-data
[2] https://money.cnn.com/2017/04/14/technology/windows-exploits-shadow-brokers/index.html
[3] https://www.wired.com/2016/08/shadow-brokers-mess-happens-nsa-hoards-zero-days/ 
[4] https://www.wired.com/story/eternalblue-leaked-nsa-spy-tool-hacked-world/ 
[5] https://yro.slashdot.org/story/17/04/17/1416228/microsoft-says-previous-windows-patches-fixed-newly-leaked-nsa-exploits 
[6] https://www.wired.com/2017/05/ransomware-meltdown-experts-warned/
[7] https://www.wired.com/2017/04/major-leak-suggests-nsa-deep-middle-east-banking-system/ 
[8] https://www.trendmicro.com/vinfo/us/security/news/vulnerabilities-and-exploits/shadow-brokers-leaks-hacking-tools-what-it-means-for-enterprises 

2020-07-29

Reklamlar, reklam engelleyiciler ve paranın etiğe etkisi

İlk başta internet reklamları vardı. Sonra reklam engelleyiciler geldi. Bir tarafta ürünlerini satmak için reklam bütçesi ayıran firmalar, diğer yanda da internette reklamlar aracılığıyla ücretsiz sunulan hizmetleri kullanan ama reklam görmek istemeyen kullanıcılar. Evet, ortada bir dengesizlik var. Ama dengesizliğin ilk çıktığı yerin reklam aracı kuruluşları olduğunu düşünüyorum.

Yeni okuduğum bir habere göre reklamlarının hedef kitlelere ulaşmadığını gören büyük reklam verici firmalar çözümü Adblock'a gizli gizli para yedirmekte bulmuşlar. "Kabul edilebilir reklamlar" adı altında "bazı" reklamlar artık kullanıcılar adına "beyazlisteye" alınmaya başlanmış. Amerikalı senatör Ron Wyden da bu beyazlisteyi inceleme konusunu gündeme getirmiş. Perdeler arkasında neler oluyor...

2020-07-28

Windows'da stderr akışını yönlendirme

Konsolda çalışan uygulamalar için 3 temel akış vardır:
  1. Standart Giriş (stdin)
  2. Standart Çıkış (stdoout)
  3. Standart Hata (stderr)
Bir program standart bilgilendirmesini stdout'a yapar. Microsoft'un örneği üzerinden gidelim. Eğer olmayan bir dosyayı dir ile listelemek ve çıktısını bir dosyaya yazmak istersek:

C:\> dir abc.def > dosya.txt
File Not Found

hala "File Not Found" hatasını ekranda görürüz. Üstelik bu çıktı dosya.txt'ye de yazılmaz. Çünkü dosyaya yazılan kısım stdout'a gönderilen, "File Not Found" ise stderr'a gönderilen bilgidir.

Bu durumda "File Not Found" mesajını hata.txt dosyasına, geri kalan tüm stdout'ları da dosya.txt dosyasına göndermeyi seçebiliriz:

C:\> dir abc.def 2>hata.txt > dosya.txt

Ya da hataları görmek istemiyorsak stderr'u nul'a yönlendirebiliriz. Dikkat, Windows'da nul tek "l" ile yazılır.

C:\> dir abc.def 2>nul > dosya.txt

Bunlar Linux'ta, Windows komut satırında (cmd.exe) ve Powershell'de de geçerli.

Linux ve Powershell'de geçerli olup da Windows komut satırında geçerli olmayan stderr'un stdout'a yönlendirilmesi. Bunu Linux ve Powershell'de şu şekilde yapabiliriz:

C:\> dir abc.def 2>&1

ya da linux'ta

 $ ls abc.def 2>&1

Bunun sonucunda olmayan bir dosyayı listeleme girişimimizde oluşturulan tüm çıktı stdout'a gitmiş olur. Bunu da toplu olarak bir dosyaya yazabiliriz:

C:\> dir abc.def 2>&1 > dosya.txt

Ama bu iş Windows komut satırında olmadı.

Şu sitede belirtilene göre hem stdout hem stderr'u aynı dosyaya yazmak için bir sıra değişikliği yapmak gerek:

C:\> dir abc.def > dosya.txt 2>&1

Bu durumda şöyle bir genelleme yapılabilir; çıktısı ile ilgilendiğimiz komut sonrasında önce stdout'u yönlendireceğimiz komut yer almalı. Stderr'un yönlendirmesi sonra gelmeli.

Tüm bunlar nerden aklıma geldi; ffprob'u kullanırken üretilen çıktıların tümü stderr'a gönderiliyor; garip bir şekilde. Bunları bir dosyaya yazdıramadım. Ama stderr yönlendirmesi başarılı oldu.

[1]'e göre bir de console çıktımız varmış.
[2]'ye göre powershell 7'de daha da fazlası varmış.
---
[1] https://www.robvanderwoude.com/battech_redirection.php
[2] https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_redirection?view=powershell-7

Komut satırından toplu resim kırpma

Elimde aynı yerinden kırpılması gereken çok sayıda resim var. Kırpılan resimleri de başka bir klasöre kaydetmem gerek. Bunu komut satırından nasıl yapabilirim diye düşünürken aklıma ffmpeg geldi. Resim kırpma için şu sayfada bulduğum bilgileri poweshell ile birleştirerek aşağıdaki satırı yazdım. Resimlerin asılları D:\kaynak klasöründe resimxxx.png ismiyle bulunuyor (xxx: 3 haneli ardışıl sayılar). Kırpılan resimleri D:\kirpilmis klasörüne kaydedeceğim.

PS> dir D:\kaynak\resim*.png |
% {ffmpeg -i $_ `
-vf "crop=200:200:200:0" `
(Join-Path -Path "D:\kirpilmis" -ChildPath `
(Split-Path $_ -Leaf))}

Burada crop parametresi ile verilen sayılar kırpma işleminin yerini ve boyutlarını tarif ediyor:
crop=genişlik:yükseklik:x:y
x ve y, kırpmanın x ve y koordinatı olarak başlangıç noktası.

Blog sayfasında güzel gözüksün diye satırı backtick (`) karakteri kullanarak böldüm, tek satır yapmak için bu karakterleri çıkarmak gerek. İlk satırda kullanmadım, çünkü dikey çizgi (|) karakteri kullanılabildiği durumlarda satır bölücü olarak iş görüyor.

ffmpeg, uzantıya göre formatı otomatik seçtiği için sadece dosya uzantısını değiştirerek jpg veya başka bir formatta da kayıt yapılabilir.

2020-07-21

vSphere client is no longer authenticated hatası

Bir süredir Chrome ve Firefox üzerinde yaşadığımız şu hata çok can sıkıcı olmaya başlamıştı.


Çözüm olarak Firefox'un "Private Windows" gibi gezinme bırakmayan güvenli kipleri ile açıyordum ama alışkanlıkları ve düzeni (!) olan biri için bu bile çok zor.

Neyse, bir süre önce bu konu ile ilgili arama yapmıştım ama doğru sonuçlara ulaşamamışım anlaşılan. Şimdi baktığımda daha güzel sonuçlar buldum. Örneğin şu sayfa. Çözüm olabilecek 3 olasılıktan bahsedilmiş:

1. Çok olası olmamakla birlikte ESX sunucu üzerinde /etc/vmware/vsphere-client/webclient.properties içindeki

session.timeout=120

değerini tekrar ayarlamaktan bahsedilmiş. Bu adımı doğrudan atladım, çünkü buraya bir müdahalem olmadı.

2. Daha da zayıf bir ihtimalle yerel ağda SSO hizmetinin çalışmasını sağlayan isim çözümleme sisteminin farklı bir DNS sunucu kullanımı ile bozulması olasılığından bahsedilmiş. Bunu da atladım.

3. Tarayıcıda cookie'lerin bozulmuş olması durumu. Hemen Firefox > Options'a (Firefox > Seçenekler) girdim. Oradan Privacy & Security (Gizlilik & Güvenlik) alt alanına geldim. Burada Cookies and Site Data (Çerezler ve Site Verisi) başlığı altındaki "Manage Data" (Verileri Yönet) düğmesine basarak tarayıcımdaki tüm çerezleri görüntüledim.


Bu çok karışık olduğu için vCenter Appliance sunucumun ismini yazarak listeyi sınırladım.


Gösterilen tüm çerezler benim hedefimdekiler olduğu için aşağıdaki "Remove All Shown" düğmesine tıklayarak tüm çerezleri sildim.

Bundan sonra herşey eskisi gibi oldu. Bu eskiye merak ne menem birşeyse...

2020-07-18

Firefox Containers

Arama motorlarının genel arama alışkanlıklarımız hakkında gereğinden çok fazla bilgiye sahip olmasına, alışveriş sitelerde incelediğimiz şeylerin daha sonra başka yerlerdeki Google reklamları ile de karşımıza gelmesine, kişisel verilerimizin sanal dünyanın malı haline gelmesine karşıyım. Bu sebeple alışveriş sitesinde aradıklarımın orda kalmasını, arama motorlarında aradıklarımın anında unutulmasını ve her girdiğim sitenin arka planda benim ile ilgili yüzlerce veri tutmasını istemiyorum.

Bu konular hakkında söylenecek çok şey var ama uzatmadan konuya girmek istiyorum. Firefox'un yeni bir özelliği var: Containers. Türkçe sürümünde kapsayıcı sekme olarak geçiyor. Ama ben bu yazıda Containers'ı kullanacağım.

Amaç şu: her siteye girdiğimizde çerezler kullanıyoruz. İşleyiş açısından çerezlerin kaçınılmaz olduğu durumlar var. Ama kesinlikle kaçınılabilir olduğu durumlar da var. Containers işte bu amaçla tarayıcı sekmelerini gruplayarak iki grubun birbirlerinin çerezlerine erişimlerini engelleyen bir yöntem. Bu özelliği kullanmak için bir eklenti yüklemek gerekiyor. Eklenti de Mozilla Vakfı'nın bir ürünü: Multi-Account Containers.

Yükledikten sonra örneğin sosyal medya siteleri için bir container yaratıp tüm sosyal medya sitelerini bu container içinde açarsanız diğer sitelerin sosyal medya sitelerinde açtığınız oturumlardan hiç haberi olmuyor. Veya alışveriş siteleri için bir container yaratıp tüm alışverişlerinizi bu siteler içinde yaparsanız diğer sitelerde bu alışveriş sitelerinde yaptığınız gezintiden hiç bilgisi olmuyor.
 
Firefox'u seviyorum. Bu tür gizlilik ilkelerine önem verip kullanıcıların verilerini koruyup rahatça gezinmelerini sağlayacak adımlar atıyor. Ama pazar payı gittikçe azalıyor. Bu durumda rakiplerinin karşısında bir gün "artık devam edemiyoruz" diyecekler diye de korkuyorum.

2023-07-05 Ek: Ya ilk kullanımda farketmemişim, ya da sonradan eklenmiş. Container sırasını değiştirmek mümkün. Bunun için araç çubuğunda yer alan simgesini tıkladıktan sonra (ya da Ctrl+. kısayolu ile) Manage Containers komutu ile açılan menüde container isimlerini tutup sürükleyerek istediğimiz sırayı elde edebiliriz. Her seferinde fare ile açmaktan kaçınanlar için ise eklenti seçeneklerinde kısayol tanımlamaları var. Varsayılan olarak Ctrl+Shft+<sayı> kısayolu kullanılıyor. <sayı> kısmı da varsayılan olarak container sırasına göre atanıyor. Yani ilk sıradaki container'ı klavye kısayolu ile açmak için Ctrl+Shft+1 kullanabiliriz.