Digital Ocean’da Ubuntu üzerinde VPN sunucusu kurma

Bu yazı güncelliğini yitirmiştir. Yazıda anlatılan pptp protokolü macOS ve iOS cihazlarda desteklenmemektedir. Yazı, arşiv amaçlı silinmemiştir. Yazıdaki yönergeleri kullanmanız önerilmez.

Digital Ocean‘da bir sanal sunucunuz var, hem de Ubuntu yüklü ve VPN sunucusu kurmak istiyorsunuz ya da henüz sunucunuz yok ama bir sunucu oluşturup VPN sunucusu kurmak istiyorsunuz (Nasıl bir sunucu sahibi olacağınızı bilmiyorsanız sizi böyle alalım). Bu makale ile bu sorularınıza cevap vermeye çalışacağım.

Digital Ocean’a verdiğim bağlantılarda kendi referans kodum yer alıyor. Bu referans ile bir hesap açtığınızda hesabınıza 60 günlük deneme süresi için 100$ otomatik olarak yükleniyor. Eğer bu 100$’ın haricinde 25$’lık harcama yaparsanız, bana da 25$ yükleniyor. Yani hem siz, hem ben kazanıyorum. :) Kullananlara şimdiden teşekkürler!

Bu makale ile temel olarak iki şey yapacağız;

  • pptp kurulumu ve ayarları (Point-to-Point Tunneling Protocol – Noktadan noktaya tünel protokolü)
  • ufw kurulumu ve ayarları (The Uncomplicated Firewall, iptables da kullanılabilir fakat basit olması için ufw kullanacağız)

İlk olarak sunucunuzun yönetim ekranına girin. Aşağıdaki ekran görüntüsündeki gibi, sunucu isminizin hemen yanında yer alan “Console Access” tuşuna tıklayın.

Konsol Erişimi

Açılacak ekranda bir süre bekleyin. Orta kısımda siyah bir dikdörtgen belirecektir. Eğer bir süre beklediniz ve siyah dikdörtgen içinde hiç bir yazı karşınıza çıkmazsa, dikdörtgenin içine tıklayıp herhangi bir tuşa basın. Giriş bilgilerinizi soran bir ekran karşınıza çıkacaktır. Hesabınızla giriş yapın.

Giriş yaptıktan sonra ilk iş eğer yüklü değilse pptp ve ufw yüklemek olacak. Bunun için komut satırına aşağıdaki komutu yazın ve enter tuşuna basın.

sudo apt-get -y install pptpd ufw

Firewall kurduğumuz için ihtiyacımız olan portlara izin vermemiz gerekecek. Eğer sunucusunu başka işler için de kullanıyorsanız (örneğin web sunucusu, genelde port 80. MySQL sunucusu, genelde port 3306 gibi) bu portları da açmanız gerekcektir. Port açmak için kullanacağımız komut ufw allow komutudur. Biz 22 ve 1723 numaralı portları açacağız. 22 SSH portudur, bu portu açmazsak sunucumuza tekrar konsol erişimi sağlayamayabilriiz. 1723 ise ppt protokolünün kullandığı porttur. Portlara izin verdikten sonra ufw enable komutu ile Firewall’u etkin hale getiriyoruz.

sudo ufw allow 22
sudo ufw allow 1723
sudo ufw enable

Sırada pptpd ayarları var. VPN sunucunuza erişecek işletim sistemleri ile ilgili ufak bir ayar yapmamız gerekiyor. Bunun için /etc/ppp/pptpd-options dosyasını düzenleyeceğiz. Favori metin editörünüz ile dosyayı açın. (Benimki nano, dosyayı açmak için sudo nano /etc/ppp/pptpd-options yazıp enter’a basıyorum.) İşletim sistemi gözetmeksizin bağlantı sağlayabilmek için bir kaç satırı geçersiz kılmamız gerekiyor. Bunun için satırları silebilirsiniz ama daha iyisi, satırların başında # işareti koyarak o satırın işlenmemesini sağlayabilirsiniz. Aşağıdaki satırları bulup başlarına # işareti koyun.

refuse-pap
refuse-chap
refuse-mschap

Hazır pptpd ayarlarıyla oynuyorken VPN’e bağlıyken kullanabileceğimiz DNS sunucularını da tanımlayalım. ms-dns ile başlayan satırları bulun, varsa başlarındaki # işaretlerini kaldırın ve DNS adreslerini girin. Google DNS’leri için örnek aşağıdaki gibi olmalıdır;

ms-dns 8.8.8.8
ms-dns 8.8.4.4

Dosyayı kaydedin ve metin editöründen çıkın. (Nano kullanıyorsanız dosyayı kaydetmek için CTRL-O (windows) ya da kntrl-O (mac) yapıp, üzerine yazayım mı sorusuna Evet/Yes cevabı verin. Çıkmak için de CTRL-X / kntrl-X tuş kombinasyonunu kullanabilirsiniz.)

Sırada /etc/pptpd.conf dosyasında yapacağımız ufak bir değişiklik var. Dosyayı metin editörünüz ile açın (Örn: sudo nano /etc/pptpd.conf) ve localip, remoteip değerlerinin yanındaki IP adreslerini silip, sunucunuzun IP adresini yazın. remoteip değerinde direkt sunucuzun IP adresi yerine IP adresinizin son hanesi için bir aralık verebilirsiniz. Sunucunuz her zaman kendi IP adresi ile internete çıkmıyor olabilir. Bu aralığı tanımlamanız zayesinde daha güvenli sularda yüzüyor olursunuz. Dosyayı kaydedin ve editörden çıkın.

localip 36.23.123.149
remoteip 36.23.123.99-199

Sıra geldi VPN sunucumuzda kullanmak üzere hesap tanımlamaya. /etc/ppp/chap-secrets dosyasını editörünüzde açın. (sudo nano /etc/ppp/chap-secrets) Hesap tanımlama biçimi aşağıdaki gibidir;

[Kullanıcı adı] [Servis] [Parola] [İzin verilen IP adresi]

Her bir satıra bir hesap denk gelecek şekilde birden çok hesap açabilirsiniz. Bir hesap ile aynı anda bir bağlantı kurulabileceğinden evinizdeki çeşitli cihazlar için birden çok hesap oluşturabilirsiniz. Örneğin;

telefon pptpd parola *
tablet pptpd parola *

Dosyayı kaydedip çıkın ve pptpd servisini yeniden başlatın (sudo service pptpd restart)

IPv4 için IP yönlendirmesini etkinleştirmemiz gerekiyor. Bunun için /etc/sysctl.conf dosyasını düzenlemeliyiz. Dosyayı metin editöründe açıp (sudo nano /etc/sysctl.conf) aşağıdaki satırın başındaki # işaretini kaldırın.

net.ipv4.ip_forward=1

Dosyayı kaydedip çıktıktan sonra sudo sysctl -p komutu ile ayar dosyasını yeniden yükleyin.

ufw için de bir kaç ayar yapmamız gerekiyor. /etc/default/ufw dosyasında yer alan DEFAULT_FORWARD_POLICY ayarını DROP yerine ACCEPT olarak değiştirin.

/etc/ufw/before.rules dosyasını açın, *filter satırınden hemen öncesine aşağıdaki satırları kopyalayıp yapıştırın (elbette kendi ip adresiniz ile. IP adresinizin son bölümünü 0 olarak değiştirin)

# NAT table rules
*nat

:POSTROUTING ACCEPT [0:0]
# Allow forward traffic to eth0
-A POSTROUTING -s 36.23.123.0/24 -o eth0 -j MASQUERADE

# Process the NAT table rules
COMMIT

Dosyayı kaydedip çıktıktan sonra sudo ufw disable && sudo ufw enable yaparak firewall’ı baştan başlatın.

Tebrikler! VPN sunucunuz kullanıma hazır. Cihazınızda VPN ayarlarını yapmak için;

Beş dakikada “özel sanal sunucu” sahibi olun!

Uzun süredir yazmıyorum, vakit bulamamak ve biraz da tembellikten. Fakat ülkenin içinde bulunduğu şu anki durumda planladığım yazı dizisinin sıralamasını biraz değiştirip hemen hazırlamaya karar verdim.

Digital Ocean’a verdiğim bağlantılarda kendi referans kodum yer alıyor. Bu referans ile bir hesap açtığınızda hesabınıza 60 günlük deneme süresi için 100$ otomatik olarak yükleniyor. Eğer bu 100$’ın haricinde 25$’lık harcama yaparsanız, bana da 25$ yükleniyor. Yani hem siz, hem ben kazanıyorum. :) Kullananlara şimdiden teşekkürler!

Bir süredir iş yerinde ve kendi kişisel projelerimde Digital Ocean kullanıyorum. Digital Ocean VPS (Virtual Private Server – Sanal Özel Sunucu) hizmeti veriyor. Kısacası, internetler üzerinde bulut üzerinde size ait bir sunucunuz oluyor. Bu sunucu üzerinde bir çok iş yapabilirsiniz. (Web sunucusu olarak kullanmak, veritabanı sunucusu olarak kullanmak, VPN sunucusu olarak kullanmak vb) Kullanım amacını size bırakıyorum, bu yazıda görseller ile adım adım Digital Ocean üzerinde hesap açmayı anlatacağım.

Makaledekileri uygulamak yaklaşık 5 dakika sürecektir. İhtiyacınız olan aktif bir e-posta adresi, kredi kartı ya da paypal hesabı.

Digital Ocean ana sayfa

Yukarda gördüğünüz ekran Digital Ocean‘ın giriş sayfası. Kayıt işlemi bu ekrandaki e-posta ve parola alanlarını doldurup “Create Account” tuşuna basmaktan ibaret. :)

Karşılama ekranı

“Create Account” tuşuna bastığınızda sizi yukarda görebileceğiniz karşılama ekranı karşılayacak ve bu sırada e-posta adresinize bir merhaba e-postası gönderilecek. Bu e-postanın içinde e-posta adresinizi doğrulamak için bir bağlantı olacak. Bu bağlantıya tıklayarak e-posta adresinizi doğrulamalısınız.

Başlamak için ekrandaki yeşil renkteki “Get Started” tuşuna basın.

Kredi kartı tanımlama ekranı

Koyu gri renkteki bu ekran kredi kartı bilgilerinizi kaydedebileceğiniz bir form içeriyor. Formu geçerli bilgiler ile doldurup “ADD CREDIT CARD” tuşuna basın. Bu aşamada kartınızdan para çekilmeyecektir. Kredi kartı yerine paypal kullanmak isterseniz sayfayı biraz aşağı kaydırın.

Paypal ekranı

Paypal tercih ederseniz, aşağı açılır menüden yüklemek istediğiniz kredi tutarını seçip “Pay Now” tuşuna basın. Açacağımız sunucunun aylık maliyeti 5$’dır. Eğer ilk etapta denemek istiyorsanız 5$ kredi yüklemeniz yeterli olacaktır. “Pay Now” tuşuna bastığınızda PayPal sayfalarına yönlendirileceksiniz. Kredi yükleme işleminiz bittiğinde tekrar Digital Ocean’a yönlendirileceksiniz. PayPal kredi yükleme adımlarını burada işlemeyeceğim.

Ödeme bilgileri tanımlandı ekranı

Kredi kartınızı başarıyla tanımladığınızda ya da PayPal üzerinden kredi yüklediğinizde yukarda görmüş olduğunuz ekrana ulaşacaksınız. Bu ekranda yer alan “Create Droplet” tuşuna basarak sunucumuzu oluşturmaya başlayabiliriz.

Bu noktada bazen Digital Ocean hesabınızı doğrulamak için ekstra bir adım çıkartabiliyor. Bu problemle karşılaşma ihtimalinize karşı ilgili adımları da aşağıya ekliyorum.

Hesap doğrulama

“Create Droplet” tuşuna bastığınızda yukardaki ekranla karşılaşırsanız Digital Ocean hesabınızı doğrulamak için ekstra bir işlem yapmanızı istiyor demektir. Ekranda gördüğünüz “Fill out the form” tuşuna basın. Aşağıya doğru bir form açılacaktır.

Hesap doğrulama formu

Bu formda sırasıyla tam adınız, konumunuz (ülke), telefon numaranız, sunucunuzu hangi amaçla kullanacağınız ve web siteniz ya da sosyal medya hesaplarınıza bağlantı soruluyor. Sunucunuzu hani amaçla kullanacağınız sorusuna “I’ll use my droplet for VPN” yazıp, diğer alanları da doldurup formu gönderebilirsiniz. Formun iletildiğine dair bir ekran karşınıza çıkacak ve e-posta adresinize destek masasına konunun iletildiğine dair bir e-posta gönderilecek. Bir süre sonra bir yetkili bu bilgiler ışığında hesabınızı onaylayacaktır.

Hesabınız onaylanmadan kurulum için gerekli sonraki adıma geçemeyeceksiniz.

Temel sunucu ayarları

Bir terslik olmazsa “Create Droplet” tuşu sizi yukardaki ekrana taşıyacaktır. Burada Hostname bölümüne sunucusa vermek istediğiniz ismi yazın. Select Size kısmında ilk seçenek olan 512 MB / 1 CPU … seçeneğini seçin. (Büyük ihtimal bu seçenek zaten seçili olarak gelecektir.)

Sunucu konumu seçme

Bu ekran sunucusunun hangi veri merkezinde kurulmasını istediğinizi soran ekrandır. Burada New York, San Francisco, Amsterdam ve Singapur seçeneklerinden birini seçebilirsiniz. Türkiye’ye daha yakın olmasından dolayı Amsterdam 1 ya da Amsterdam 2 tercih etmenizi önerebilirim.

Kurulum dosyası seçme

Select Image bölümünde seçebileceğiniz bir çok Linux dağıtımı karşınıza çıkacaktır. Benim tavsiyem Ubuntu 14.04 x64‘ü seçmeniz yönünde olacaktır. Özellikle Digital Ocean’da Ubuntu üzerinde VPN sunucusu kurma makalem ile kendi VPN sunucunuzu kurmak isterseniz yine Ubuntu altyapılı bir sunucuya ihtiyacınız olacak.

Sunucuyu oluşturma

Sunucunuzu oluşturmak için yeşil renkteki “Create Droplet” tuşuna basın ve arkanıza yaslanın. Fakat çok da kendinizi bırakmayın çünkü takribi 55 sn sürecek bir işlemi bekleyeceksiniz.

Sunucu oluştururken bekleme ekranı

Çoğu zaman veri merkezinin yoğunluğuna bağlı olarak bu işlem 55 saniyeden de kısa sürüyor.

Gelen e-posta

Sunucunuzun oluşturma işlemi bittiğinde e-posta adresinize sunucunuza erişebilmeniz için IP adresi, kullanıcı adı (root) ve parolası gönderilecektir. (Yukardakileri denemeyin, bu makale için açtığım bir sunucuydu, çok uzun ömürlü olmadı)

Sonuç ekranı

Bu ekrana ulaştıysanız sunucunuzu başarıyla kurdunuz demektir. Sağ üstte yer alan “Console Access” tuşu ile sunucunuzun konsoluna tarayıcınız üzerinden bağlantı sağlayabilirsiniz.

Tebrikler! Artık size özel bir sanal sunucu sahibisiniz. Sunucunuz ile yapabilecekleriniz;

String Extensions

Daha önce burada bir kısmını paylaştığım metin uzantılarını daha da geliştirdim ve String Extensions ismi ile Github’da paylaştım. Uzantıların listesi şu şekilde;

Github’da metodların nasıl kullanılabileceklerine dair küçük örnekler de bulunuyor.

PHP söz dizimi kontrolü

Dün yayında olan bir PHP projesinde çeşitli değişiklikler yapmak durumunda kaldım. Test etme şansım olmadığından dosyanın bir kopyasını sunucuya atarak sunucu üzerinde test etmeye çalıştım. Gönderdiğim dosyayı çalıştırmayı denediğimde bomboş bir ekranla karşılaştım. Güvenlik nedeniyle sunucu, hata mesajlarını ekrana basmayacak şekilde ayarlanmıştı. Hata kayıtları da benim yetkim olmayan bir yerde duruyordu. Bir şekilde hatanın nerede olduğunu bulmam gerekiyordu. Çok fazla değişiklik yaptığım için eski dosya ve yeni dosya arasında bir karşılaştırma yapmak uzun sürecekti. Bir kaç kontrol yapmaya karar verdim.

İlk olarak söz dizimi kontrolü yaparak dosyanın PHP tarafından işlenebildiğinden emin olmak istedim. Bunun için PHP’yi komut satırından “-l” parametresi ile çalıştırıp ikinci parametre olarak dosyanın ismini verebilirsiniz. Eğer PHP klasörünüz PATH değişkeninde tanımlandıysa dosyanızın olduğu klasörde komut satırı açarak php -l dosyaismi.php şeklinde söz dizimi kontrolü gerçekleştirebilirsiniz. PATH değişkeninde tanımlı değilse php.exe’nin tam yolunu girmeniz gerekebilir (Örneğin: c:\php\php.exe -l dosyaismi.php)

Bu komut PHP dosyanızı kontrol edecek, bir hata bulamazsa sonlanacak ya da bulduğu ilk hatada hatanın olduğu satır numarasını ekrana basarak sonlanacaktır. İlgili hatayı düzelttikten sonra komutu tekrar çalıştırarak, dosyayı tekrar kontrol edebilirsiniz. Bu şekilde hiç söz dizimi hatası kalmayana kadar kodu tekrar tekrar çalıştırarak dosyanızı hatalardan arındırabilirsiniz.

Bu şekilde problemimi giderip dosyayı sunucuya tekrar yükledim. Problemim giderilmişti.

WordPress Bakım Modu’nu İptal Etme

WordPress kendisini güncellerken ya da bir eklenti güncellerken, dosyaların güncellenmesi sırasında kısa bir süreliğine bakım moduna girer. Bazen işler yolunda gitmeyebilir ve bakım modunda takılıp kalabilirsiniz. Kimi zaman güncelleme sırasında başka bir sayfaya geçmek, kimi zaman da güncellenen öğenin kendisinde var olan bir problem, sitenizin bakım modundan çıkamamasına sebep olabilir. Bu tip bir durumda sitenizi bakım modundan çıkartmak için sitenizin kök dizininde yer alan .maintenance dosyasını silmeniz yeterli. Siteniz bakım modundan çıkacaktır. İşlerinize kaldığınız yerden devam edebilirsiniz.