Port knocking

Bilgisayar dünyasında **port knocking** terimi önceden belirlenmiş portlara yapılan bağlantı isteklerine göre istenilen portların açılması tekniğidir. Önceden belirlenmiş portlara yine önceden belirlenmiş zaman aralığında bağlantı isteği gönderilmesi ile birlikte ateş duvarı kuralları dinamik olarak değiştirilerek gerçekte istenilen servisin portları açılır. Bu uygulama güvenlik nedeni ile dışarıdan hizmet verildiğinin gizlenmek istendiği durumlarda oldukça kullanışlıdır.

Port knocking kullanılırken genel olarak karşı bilgisayardaki bir sunucu program ateş duvarı log dosyalarını inceler ve daha önce belirlenmiş bağlantı kalıbının görülmesi durumunda ateş duvarı ayarlarını değiştirerek istenilen hizmeti veren portun açılmasını sağlar.

Port knocking daha çok Secure Shell (Güvenli Kabuk - SSH) portunun, yani 22. portun açılması için kullanılmaktadır. Port knocking sayesinde kapalı görünen SSH için kullanılan 22. port bu gizli bağlantı bilgilerini bilen kişi için açılmaktadır. Port knocking için oldukça fazla değiştirilebilir ayar vardır. Portların sırası, belirli zaman aralıkları içinde sıra ile bağlantı isteği yollanması, belirli protokollerin kullanılması (TCP, UDP veya ICMP gibi), kaynak IP kısıtlamaları veya çeşitli şifrelenmiş bağlantı uygulamaları gibi.

Port knocking sistem tarafında çok az kaynak harcayan basit yazılımlar ile uygulanabilir. Port knocking uygulanan sunucuda hafif bir sunucu programı çeşitli portlara gelen paketleri loglara bakarak veya paketleri kaydederek dinler ve doğru durumlarda belirli port veya portları açabilir. Kullanıcı tarafında ise istemci programı karşı makineye istenilen bağlantıyı yapmadan önce daha önce belirlenmiş şekilde bağlantı istekleri gerçekleştirir.

Çoğunlukla port knocking programları, karşı kullanıcının doğru sıradaki isteklerinden sonra yanlış bir istekte bulunmaları durumunda hedef portu açmaz. Bunun olduğunu anlamanın tek yolu açılmasını beklediğiniz portun açılmamasıdır. Hiçbir zaman kullanıcıya bilgi yollanmaz, paket gönderilmez. Böylece rastgele port taraması yapan kötü niyetli kişilere portların açılması önlenmiş olur.

Güvenlik topluluklarında port knocking yöntemi geniş bir şekilde uygulanıyor olmasa bile, kullanımı gittikçe artmaktadır ve yeni bazı rootkitlerde de kullanılmaktadır.

## Port Knocking teoride nasıl çalışır?

**1. Adım**

İstemci, sunucuda n portunu dinleyen uygulamaya bağlanamaz.

**2. Adım**

İstemci önceden belirlenmiş portlara önceden belirlenmiş şekilde (sırada, zamanda vs.) bağlantı açma istekleri (SYN Paketleri) yollar. İstemci sunucudaki port knocking programının iç yapısını bilmektedir ama bu işlem bitene kadar ona sunucudan herhangi bir doğrulama bilgisi yollanmaz.

**3. Adım**

Sunucuda çalışan port knocking programı doğru şekilde bağlantı isteği yapıldığını fark eder (bunu ya loglara bakarak ya da paketlere bakarak yapabilir) ve gerçekte istenilen portu (burada n portunu) o istemci için açar.

**4. Adım**

İstemci sunucuya normal şekilde bağlanarak normal kullanıcı doğrulama işlemlerinden geçer.

## Dış bağlantılar
* Linux için iptables kullanarak port knocking uygulaması (İngilizce)
* PORTKNOCKING - Kapalı portların gizli olarak onaylanıp açılması (İngilizce).
* Slashdot'daki "ek güvenlik için port knocking" makalesi (İngilizce)