Bu yazıda, kapalı ağ kapılarına önceden belirlenmiş bir şekilde bağlanmaya çalışarak ateş duvarında istenen ağ kapılarını açmaya yönelik bir yöntem olan port knocking yöntemi açıklanacak ve örnek bir Linux kurulumu gösterilecektir. Kapı çalmak metaforu, günlük hayatta kullanılan, kapının çalınma şekline göre kimin çaldığını ayırdetmek ve farklı tepki göstermek şeklinde gelişen iletişim biçimine gönderme yapmaktadır. Buna benzer bir şekilde, kapıyı çalan ve kapıyı dinleyen iki uygulamadan yararlanarak kurulan bir sistemde, ağ kapıları sadece bilinen istemcilerin erişimine açılabilir ve böylece özellikle sadece yönetim amacıyla uzaktan erişime açık bırakılması gereken servislerin denetlenmesi sağlanarak kapı taraması saldırılarından kısmen korunulabilir. Yöntem Kapının çalınma yöntemi basit bir şekilde sırayla birkaç kapıya bağlanılmasından, zamana bağlı, gelen IP adresine bağlı veya şifrelenmiş veri gönderilmesine kadar değişebilir. Bu yazıda, en basit kapı çalma şekli olan, sırayla birden fazla kapıya bağlanılması yöntemi örnek olarak verilecektir. Diğer yöntemler hakkında detaylı bilgi, artı ve eksileri, yazının sonunda verilen göndermelerden edinilebilir. Örnek bir senaryoda, istemcinin belli bir sırayla kapalı kapılara bağlanması sonucunda (sırayla 1111/tcp, 3333/udp, 5555/tcp) sunucunun ateş duvarı kurallarını değiştirerek ssh/tcp kapısını açması düşünülebilir. Sunucu gelen bağlantıları dinlemek için bağlantı katmanında işlem yaptığı için 1111, 3333 ve 5555 kapılarının açık olmasına gerek yoktur. Bağlanılabilecek olası 65535 kapı ve bunların her birinin tcp ve udp olasılıkları olduğundan, saldırganın doğru sırayı bilmesi olasılığı kabaca 1/(65535 2)3'tür. Bu da en kötü durumda 2,251,696,736,043,000 farklı kombinasyon denemesi gerektiği anlamına gelir. Doğru kapı çalınma bağlantısını dinleyen sunucu, genellikle aradaki iletişimin halini kaydeder , böylece kapı tarama programlarının tesadüf eseri doğru sırayı tutturmaları engellenmiş olur. Sunucu hizmetinin bağlantı kapısının tamamen kapalı olması, kapı tarama saldırılarını engellediği kadar, dolaylı olarak kaba kuvvet saldırılarını da engeller. Örneği verilen basit bir sıraya dayanan kapı çalma yönteminin, üstte belirtilen yararlarının yanı sıra, bazı zayıf yönleri de vardır. En başta saldırganın sırayı tahmin etmesini engellemek için sunucunun istemciyi belirlemek için DNS sorgulama yapması engellenmelidir. Aksi takdirde, özel ayarlanmış bir DNS sunucusu yardımıyla saldırganın bağlanılacak kapıları ve sıralarını tahmin etmesi olasıdır. Bu olmasa bile, kapalı görünen bir kapıya bağlanma durumunda sunucunun bağlananı belirlemek için DNS sorgusu yapması sonucunda yine kapının aslında açık fakat filtrelenmiş olduğu bilgisi sızabilir. Ayrıca gerek istemci tarafındaki, gerek sunucu tarafındaki, gerekse aradaki ateş duvarlarının çoğu kapıya erişimi sınırlandırması, kapı çalma etkinliğinin her ağda uygulanabilirliğini azaltmaktadır. knockd - Bir Kapı Çalma Uygulaması Kurulum kolaylığı ve kullanım eksikliği açısından uygun olarak tanımlanabilecek bir kapı çalma sunucusu/istemcisi olarak knockd örnek verilebilir. Yazılımın web sayfasına http://www.zeroflux.org/cgi-bin/cvstrac. cgi/knock/wiki adresinden erişmek mümkündür. Sayfalarda kullanım açıklamalarının yanısıra, bir kaç Unix için hazır paketlerine ve Windows/OSX için istemci programları için bağlantılar bulunmaktadır. Eğer sunucu tarafında Debian ya da Redhat ailesinden bir Linux dağıtımı kuruluysa, hazır paketler bulunmaktadır. Debian serisi dağıtımlarda $ sudo aptitude install knockd komutu yeterlidir. Redhat serisi dağıtımlar içinse programın sayfasından. rpm dosyası indirilmeli ve $ su - # rpm -i knock- . src. rpm # cd /usr/src/redhat/SPECS/ # rpmbuild -bb knock. spec # rpm -i /usr/src/redhat/RPMS/i386/knock-server- . rpm komutlarıyla kurulum yapılmalıdır. İstemci için Debian serisi dağıtımlarda yapılacak olan, sunucu ve istemci programlarının aynı pakette bulunmasından dolayı, sunucuyla aynıdır. Redhat serisinde yapılması gereken ise sunucu tarafında yapılması gerekenden son satırda ayrılmaktadır. Yani kaynak rpm dosyasından ikili rpm'ler yaratıldıktan sonra # rpm -i /usr/src/redhat/RPMS/i386/knock-server- . rpm komutu verilmelidir. Windows ve OSX istemcileri de programın web sayfasından edinilebilir. İstemci tarafında programın derlenememesi, edinilememesi gibi sorunlar olduğunda, hping, netcat gibi genel amaçlı programlar da kullanılabilir. Bunlara örnekler aşağıda verilecektir. Kurulumdan sonra yapılandırma gerektiren dosyalar /etc/knockd. conf dosyası ile dağıtıma özel seçenek dosyasıdır. Dağıtıma özel dosya Redhat serisinde /etc/sysconfig/knockd, Debian serisinde ise /etc/default/knockd dosyalarıdır. Dosyaların varsayılan içerikleri aşağıda verilmiştir, dosyaların özelleştirilmesi yazının devamında anlatılacaktır: /etc/knockd. conf: logfile = /var/log/knockd. log sequence = 7000,8000,9000 seq_timeout = 5 command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn sequence = 9000,8000,7000 seq_timeout = 5 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn /etc/default/knockd: ################################################ # # knockd's default file, for generic sys config # ################################################ # control if we start knockd at init or not # 1 = start # anything else = don't start START_KNOCKD=0 # command line options #KNOCKD_OPTS="-i eth0" /etc/sysconfig/knockd: #OPTIONS=""