sslh: beşi bir yerde!

Çoğu zaman kurumlarda çalışırken insanı zıvanadan çıkartacak, hatta tansiyonunu fırlatacak (literally) proxy yapılandırmalarıyla karşılaşmak mümkün oluyor. Hatta öyle ki, bazen bir yazılım kurmak istediğimde veya bir yere bağlanmam gerekiyorsa ilgili kurumdaki sistem yöneticisini ikna etmek için kırk takla atmam gerekiyor.

Benzer kısıtlamalardan bunalan Yves Rütschle oturmuş sslh‘ı yazmış. sslh, tek bir portu (isterseniz birden fazla ayarlamak da mümkün) kullanarak bu port üzerinden birden fazla hizmete erişebilmenizi sağlayan, katman görevinde bir yazılım. SSL ve SSH’in karışımından türetilmiş bir isim.

Genelde erişimi engelleyen yerlerde https (443) başta olmak üzere bazı portlar serbest bırakılır. Dolayısıyla bir porttan dışarı çıkabiliyorsanız, sslh yardımıyla SSH, HTTP(S), OpenVPN, XMPP hizmetlerine bağlanmanız mümkün oluyor. sslh’ı belirli bir portta -tercihen 443- dinlemeye (listening) alıp, bahsettiğim protokollere aktarmasını sağlayabiliyorsunuz.

Çoğu dağıtım için sslh’ın paketleri bulunuyor. Ben Arch Linux üzerinde nasıl yaptığımı anlatacağım. Öncelikle sslh’ı sürekli kullanacaksanız için bir ayar dosyası oluşturmanızda fayda var. Öteki türlü parametreleri kullanmak isterseniz nerden baksanız 1 paragraf bir komut girmek zorunda kalabilirsiniz.

Gelelim kuruluma, Arch Linux üzerinde kurmak için pacman kullanmanız yeterli, sslh’ın paketi Arch Linux depolarında (community) yer alıyor:

pacman -S sslh

Paket kurulduktan sonra /etc/sslh.conf dosyasını dilediğiniz gibi yapılandırabilirsiniz. Ben SSH, SSL, OpenVPN için aşağıdaki yapılandırmayı kullanıyorum.


verbose: true;
foreground: true;
inetd: false;
numeric: false;
timeout: 2;
user: "nobody";
pidfile: "/var/run/sslh.pid";

listen:
(
{ host: "0.0.0.0"; port: "443"; }
);

protocols:
(
{ name: "ssh"; service: "ssh"; host: "localhost"; port: "22"; probe: "builtin"; },
{ name: "openvpn"; host: "localhost"; port: "1194"; probe: "builtin"; },
{ name: "http"; host: "localhost"; port: "80"; probe: "builtin"; },
{ name: "ssl"; host: "localhost"; port: "8443"; probe: [ "" ]; }
);

on-timeout: "timeout";

Yapılandırma dosyasındaki ilk 6 satır öntanımlı sunucu ayarları. Ne oldukları zaten anlaşılıyor. Listen bloğundaki değer, sslh’ı hangi interface’lerde hangi portta çalıştıracağınızı belirtmek için kullanılıyor. Ben 443 portunu kullanmayı tercih ediyorum.

Daha önemlisi ise protocols kısmı. Burada 443′ten gelen taleplerin arka taraftaki hangi servise/porta gideceğini belirttiğiniz kısım. probe kısımları önemli, zira “protocol mismatch” dediğimiz protokol çakışması durumunda ne olacağına burası karar veriyor. Kaba bir tabirle, 443 numaralı porta gelen talebin hangi servise gideceğine “prober” karar veriyor. (web sunucuda https için 8443 kullanıyorum, 443′ü sslh kullanıyor çünkü)

Ben bu hizmetlerin tamamını TCP protokolünde çalıştırıyorum, UDP denemedim. OpenVPN’i eğer udp kullanıyorsanız, tcp’ye çekin veya tcp’de çalışan bir instance çalıştırın.

Gelelim çalıştırma kısmına, sslh yapılandırmasını kaydettikten sonra Arch Linux kullanıcılarının vermesi gereken tek komut şu:

systemctl start sslh-fork.service

Elle çalıştıracaklar için ise verilecek komut şu:

/usr/bin/sslh-fork -f -F /etc/sslh.conf

Bu şekilde tek bir portu kullanarak birden fazla servise ulaşmanız mümkün oluyor.