Tuesday, January 26, 2010

Stunnel ve socks proxy ile firewall gecme

Artik ayda 5$ a bir linux vps sahibi olunabildigine gore, firma firewall u ve bloke etme mekanizmalarini gecmek cok kolay bir hale gelmis oluyor. Anlatilan Ubuntu linux icindir ama diger linuxlar icin sadece stunnel ve dante kurulumu degismekte.

Burda anlatilan ssl tunel yonteminin calisma sekli su sekilde:

1) Client da calisan bir stunnel kuruyoruz, port 1080 da socks dinleyip server daki stunnel in 443 portuna ssl tunnelling yapacak.

2) Server a stunnel kuruyoruz, bu stunnel 443 a gelen baglantiyi server port 1080 deki socks proxy e yonlendiriyor.

3) Server a bir Socks proxy kuruyoruz, isminden anlasilacagi gibi bu baglantiyi proxy liyor.

Bu durumda client tarafinda calisan Firefox gibi socks proxy ile konusabilen uygulamalar firewall a takilmadan calisabilir.


Server tarafi Stunnel kurulumu:

aptitude install stunnel

veya
apt-get install stunnel
ile stunnel i kuruyoruz.

Bu asamada stunnel bulunamamasi gibi bir problem cikarsa bunun sebebi vps in ubuntu repository lerini /etc/apt/sources.list dosyasina yazmamis olmasindan olabilir, bu durumda dosyaya alttaki iki satiri ekleyin, intrepid yazan yeri kullandiginiz ubuntu version unun ismi ile degistirmeyi unutmayin.

deb http://us.archive.ubuntu.com/ubuntu/ intrepid main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ intrepid main restricted

tabi bunlari yaptiktan sonra apt-get update ile repository listelerini refresh etmeniz gerek.

Stunnel i kendiniz build edecekseniz libssl-dev e de ihtiyaciniz var

apt-get install libssl-dev


Sertifikalari yaratmak:

Stunnel calistirmak icin server ve client sertifikalarina ihtiyac var. Bunlari verisign, thawte gibi bir CA den alabileceginiz gibi kendiniz bir CA olup bu sertifikalari kendiniz yaratip yarattiginiz CA ile imzalayabilirsiniz. Burda bu yontemi uygulayacagiz.

CA yaratmak icin bu satirlari teker teker girin:

openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

Son satirdaki komut sertifikanin detaylarini soracak, bu asamada Common Name alani onemli, daha sonra server in certifikasi yaratilirken de bu alanin girilmesi gerekecek ve bu alanin ondan farkli olmasi lazim. Buraya ornek olsun diye server in ip si CA dedim, yani "xxx.xxx.xxx.xxx CA" gibi bir satir girdim.
Diger alanlari doldurabilir veya gecebilirsiniz.

Server sertifikalarini ve csr yaratmak icin:

openssl genrsa -des3 -out server.key 4096
openssl req -new -key server.key -out server.csr

Common name server in ip si olarak girdim.

Simdiki satirda Csr ile server in sertifikasini alip CA ya gidip bunu imzala demis olacagiz.
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

Server da calisan stunnel baslatilirken sertifikadan gelen password ΓΌ sormasin istiyorsaniz assagidaki adimi yapin
openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure
mv server.key.insecure server.key

Client sertifalarinida benzer sekilde yaratip imzaliyoruz.
openssl genrsa -des3 -out client.key 4096
openssl req -new -key client.key -out client.csr
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt


Server tarafi icin Stunnel.conf

/etc/stunnel/stunnel.conf
da sertifika yollarini yani dizinleri kendinize gore duzenleyin

cert = /root/certs/server.crt
key = /root/certs/server.key

sslVersion = SSLv3

chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4
pid = /stunnel4.pid

socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

verify = 2
CApath = /certs
CAfile = /root/certs/ca.crt

debug = 7
output = /var/log/stunnel4/stunnel.log

[https]
accept  = 443
connect = 1080
TIMEOUTclose = 0

; vim:ft=dosini

Burda [https] alani ile port 443 de baglanti beklemesini ve 1080 e yoneltmesini soylemis oluyoruz. 1080 de socks proxy dinliyor olacak.

Bundan sonra /etc/default/stunnel4 dosyasini acip ENABLE=0 olan kismi ENABLE=1 yapiyoruz.

ve Stunnel i server da assagidaki gibi baslatiyoruz.
sudo /etc/init.d/stunnel4 start


Server a Socks proxy ( Dante ) kurulumu ve calistirilmasi

Bunu http://www.inet.no/dante/ adresinden indirip kendiniz derleyebileceginiz gibi apt ile de kurabilirsiniz.
apt-get install dante-server

Benim kullandigim dante konfigurasyon dosyasi /etc/danted.conf su sekilde
logoutput: stderr
internal: 127.0.0.1 port = 1080
external: eth0
clientmethod: none
method: none username
user.privileged: proxy
user.notprivileged: nobody
user.libwrap: nobody
extension: bind

client pass {
from: 127.0.0.1/8 port 1-65535 to: 127.0.0.1/8
method: none
}

client block {
from: 0.0.0.0/0 to: 0.0.0.0/0
method: none
}
pass {
from: 127.0.0.1/8 to: 0.0.0.0/0
command: bind connect udpassociate
method: none
}

pass {
from: 0.0.0.0/0 to: 127.0.0.1/8
command: bindreply udpreply
method: none
}
block {
from: 0.0.0.0/0 to: 0.0.0.0/0
}

Dante yi sudo /etc/init.d/danted start ile baslatiyoruz.


Client da Stunnel

Client icin config dosyasi su sekilde. Burdada sertifika yollarini ve stunnel-server-ip yi kendinize gore ayarlayin.
cert = client.crt
key = client.key
sslVersion = SSLv3

socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

client = yes

[socks]
accept  = 127.0.0.1:1080
connect = stunnel-server-ip:443
TIMEOUTclose = 0

; vim:ft=dosini

Stunnel i client olarak ubuntu da calistirabilirsiniz.
sudo /etc/init.d/stunnel start

veya

client olacak stunnel i sertifika yollarini ve .conf dosyasini duzenleyip windows da da calistirabilirsiniz.

Bu konfigurasyon ile calistirildiginda local de 1080 port da socks server olarak baglanti bekler durumda basliyor.

Yasasin ozgurluk!!! ;)


Referanslar:
http://www.tc.umn.edu/~brams006/selfsign.html
http://www.bock.nu/blog/secure-firewall-bypass-danted-stunnel