Menu

/home/burak

günlük şeysi…

HTTPS Yönlendirme

GitHub Education paketi ile ilgili bir nevi başlangıç sayılabilecek yazımı daha önce yazmıştım. Paketi alır almaz DigitalOcean kodunu oluşturup DigitalOcean ile aramızdaki borç alacak hesabını -bayağı birikmiş- sıfırladım. Pakette başka neler var diye bakarken Namecheap‘ten bir yıllık .me alan adı ile yine bir yıllık SSL sertifikası olduğunu gördüm. Zaten bir alan adına sahip olduğumdan bir yıllık SSL sertifikası daha çok ilgimi çekti. Hemen aktifleştirip sunucuma gerekli ayarlamaları yaptım ve şu anda da görebileceğiniz üzere sizinle sunucum arasındaki bütün trafik şifreli bir şekilde gerçekleşiyor.

SSL sertifikasını düzgün bir şekilde çalıştırdıktan sonra http protokolü üzerinden günlüğe bağlanan kullanıcıların https protokolüne yönlenmesini ayarlamak gerekiyordu yoksa sertifikanın bir espirisi -havası- kalmıyor haliyle. Apache kullanarak bunun yapmanın iki yolu var:

  1. .htaccess dosyasına rewrite kuralı yazmak -ki google’layınca çoğunlukla bahsedilen karmaşık yöntem-
  2. yine .htaccess dosyasına veya sanal sunucu dosyasına Apache’nin Redirect özelliğini kullanarak kural yazmak.

Daha basit -tek satır, temiz ve anlaşılabilir komut- ve daha önerilen bir yöntem olduğu için ben ikinci yöntemi kullanıyorum.

Sunucunuzda sadece sizin web siteniz barınıyorsa veya herhangi bir sanal sunucu ayarlaması yapmadıysanız bahsedeceğim değişiklikleri varsayılan yapılandırma dosyasında -/etc/apache2/sites-available/000-default.conf (eski ubuntu sürümlerinde default.conf isimli dosyadır.)- yapmalısınız. Eğer siteniz için bir sanal sunucu ayarlaması yaptıysanız da -örnek vermek gerekirse ben bu site için varsayılan yapılandırma dosyası yerine ayrıca bir yapılandırma dosyası (burakuzun.com.tr.conf) kullanıyorum- bu değişiklikleri kendi yapılandırma dosyanızda yapmalısınız.

Apache normal bağlantı ayarlamalarını ayrı yapılandırma dosyasında -80 portunu dinleyen 000-default.conf dosyası-, SSL bağlantı ayarlamalarını ayrı yapılandırma dosyalasında -443 portunu dinleyen default-ssl.conf dosyası- tutuyor.

 Aslında ikisini tek bir dosyada ayarlayıp daha pratik bir şekilde tek yerden her iki bağlantı protokolüyle ilgili ayarlamaları yapabilirsiniz ki biz birazdan öyle yapacağız.

Basit olarak yapmak istediğimiz, http protokolüne -80 portu oluyor- gelen istekleri, https protokolüne -443 portu oluyor- yönlendirmek. İlk olarak sitenizi 443 portundan çalışacak şekilde ayarlamalısınız. Gerekli ayarlamaları tamamlayıp test ettikten sonra yapılandırma dosyanızdaki <VirtualHost *:443> satırının üstüne eklemeniz gereken kodlar ve açıklamaları aşağıda görebilirsiniz.

Tek yapılandırma dosyasını kullanarak 80 portundan web sitemizi çalıştırıyoruz. Daha sonra Redirect permanent / https://burakuzun.com.tr/ komutu ile gelen bütün bağlantıları https://burakuzun.com.tr adresine yönlendirdik.

Redirect komutu ile ilgili detaylı bilgiyi ve permanent komutunun yerine yazabileceğiniz alternatif komutları görmek için http://httpd.apache.org/docs/trunk/mod/mod_alias.html#redirect adresini incelebilirsiniz.

GitHub Education – Namecheap SSL Kullanımı

GitHub Education paketinden haberdarsınızdır sanırım. Paket bizim gibi öğrenci arkadaşlara, ücretli bir çok servisi ve hizmeti belirli bir süre için ücretsiz olarak kullanma hakkı veriyor. -örnek vereyim; bu sitenin barındığı sunucuyu aldığım firma olan DigitalOcean (referans linkidir, size de bana da faydası dokunur)‘da kullanabileceğimiz 100$ kredi alabiliyorsunuz. sitedeki en düşük paket olan 5$’lık droplet (droplet nedir derseniz) ile siteniz 20 ay ücretsiz barınabilir.-

Bu paketi kullanabilmek için GitHub hesabınız ve hesabınızda üniversitenizden aldığınız e-posta adresiniz -dolmuşların aksine açıköğretim de geçerli- birincil e-posta adresi olarak ayarlanmış olmalı. Başvurunuzun onaylanması bir iki günü bulabilir.

Heabınızın onaylandıktan sonra https://education.github.com/pack/offers adresinden kullanabileceğiniz servislerin listesine ulaşabilirsiniz.

Namecheap SSL Aktivasyonu

Listede Namecheap‘i bulduktan sonra ‘Request your offer code to get access’ yazısındaki linke tıklayarak size özel kupon kodunu oluşturun ve verilen kupon koduyla Namecheap’ten alışverişinizi tamamlayın. Hesabınıza giriş yaptıktan sonra https://manage.www.namecheap.com/myaccount/ssl-list.asp adresinden satın aldığınız sertifikaları yönetebileceğiniz ekranı açın. SSL sertifikanızın yanındaki ‘Activate Now’ linkine tıklayın.

csr-kodu-girisYan taraftaki ekranda ‘Select web server’ kutucuğundan ‘Apache + MOD SSL’ seçeneğini -ya da siz hangi sunucu yazılımını kullanıyorsanız onu- seçin. Aşağıda ‘Enter csr’ kutucuğuna girmeniz gereken bilgiyi sunucunuzda oluşturmanız gerekli. Sunucunuza terminal ile burada terminal kullanımı ile ilgili bir kaç güzel ipucu var, mutlaka bakın- bağlandıktan sonra mkdir ssl komutu ile ssl isimli yeni bir klasör -oluşturacağınız sertifikalara daha sonra kolaylıkla ulaşabilmek için- oluşturun cd ssl konutu ile klasöre giriş yapın. openssl req -new -newkey rsa:2048 -nodes -keyout alanadiniz.com.tr.key -out alanadiniz.com.tr.csr komutunu yazın ve sizden siteniz ile ilgili bir kaç bilgi girmeniz -Türkçe karakter kullanmadan- istenecek.

Diğer soruları boş bırakıp geçebilirsiniz. Komut tamamlandığında daha önce oluşturduğunuz ssl klasöründe iki adet dosya -alanadiniz.com.tr.csr ve alanadiniz.com.tr.key- göreceksiniz. nano alanadiniz.com.tr.csr komutuyla alanadiniz.com.tr.csr dosyasını açın. Bütün içeriği seçip kopyalayın.

Nano kullanırken normal ctrl + c komutu işinize yaramaz, onun yerine kopyalamak için alt + 6 tuş kombinasyonunu kullanabilirsiniz.

ssl-onay-e-postaKopyaladığınız içeriği ‘Enter csr’ kutucuğuna yapıştırın. Sonraki ekranda sizden alan adınızın size ait olduğunu doğrulamanız istenecek. İsterseniz ‘Domain Related’ listesinde belirtilen e-posta adreslerine -VPS kullanırken kendinize alan adınıza ait e-posta adresleri alabileceğiniz konusu yazılacaklar listesinde-, isterseniz de ‘Whois Record Type’ kısmında belirtilen, alan adınızı alırken kayıt ettirdiğiniz e-posta adresini seçebilirsiniz. Seçtiğiniz e-posta adresinize onay kodunuzun olduğu bir posta gelecek. ‘Next’ dedikten sonra benim gibi hemen e-posta adresinizi kontrol etmeyin, sonraki ekranda gerekli bilgileri girip -sertifikanız için size gönderilecek dosyalar ‘Administrator Email Address’ kısmına yazdığınız e-posta adresinize geliyor. önceki ekranda seçtiğiniz e-posta adresiniz sadece onaylama için.- ‘Submit order’ butonuna tıkladığınızda onaylama postanız seçtiğiniz e-posta adresinize gönderilecek. Onaylama işlemini tamamlandıktan sonra ‘Administrator Email Address’ kısmında belirttiğiniz e-posta adresinize sunucunuza yüklemeniz gereken dosyalar gönderilecek.

Sunucu Yapılandırması

Sunucunuzda yapılması gereken ayarlamaları sırasıyla anlatmak gerekirse, önce web sitenizin yapılandırma dosyasında SSL ayarlamalarını yapacaksınız, daha sonra web sitenizin SSL portundan -443 numaralı port oluyor- çalışmasını sağlayacaksınız. Sitenizin yapılandırma dosyasını -/etc/apache2/sites-available/000-default.conf ya da eğer sanal sunucu ayarlaması yaptıysanız kendi yapılandırma dosyanız- açın. Yapılandırma dosyanızın en altındaki </VirtualHost> satırının üstüne eklemeniz gereken satırları, aşağıda açıklamaları ile birlikte görebilir ve benim kullanıcı adımı kendi sistem kullanıcı adınız ve dosya adınız ile değiştirerek direk olarak yapılandırma dosyanıza kopyalayabilirsiniz.

Yapılandırma dosyanızın en üst satırındaki <VirtualHost *:80> satırını <VirtualHost *:443> şeklinde değiştirerek yapılandırma dosyanızı kaydedip kapatın. Son olarak apache’nin ssl modülünü sudo a2enmod ssl komutuyla etkinleştirin. sudo service apache2 restart komutuyla apache’yi yeniden başlatın. Web sitenize https://www.alanadiniz.com.tr yazarak bağlandığınızda hiç bir uyarı ile karşılaşmadan şifreli bir şekilde bağlanmalısınız.

Güncelleme: Web sitenize http protokolünü kullanarak bağlanan -yani sizden başka herkes- kullanıcılarınızın https protokolüne yönlendirilmesi ile ilgili bir yazı da yazdım, buraya tıklayarak okuyabilirsiniz.

VPS Başlangıç İpuçları – Güvenlik

Günlüğün ilk yazılarından birisinde web sitem için barındırma çözümü olarak DigitalOcean (referans linkidir, size de bana da faydası dokunur)‘dan aldığım VPS’leri kullandığımdan bahsetmiştim. Aynı yazıda yeni sunucuda ilk yapılacaklar ile ilgili kısa kısa ipuçları da vardı. Hem o ipuçlarını bir yazıda -biraz daha detaylı bir şekilde- toplamak, hem de aradan geçen zamanda sunucuyu kullanırken karşılaştığım sorunlar ile ilgili çözümleri yazmak için böyle bir yazı hazırladım.

SSH.

Sunucunuz oluşturulduktan sonra e-posta adresinize root (linux işletim sistemlerinde bütün haklara sahip olan kullanıcı) kullanıcınız, şifreniz ve sunucunuzun ip adresinin yazılı olduğu bir e-posta gelecek. Sunucuya bağlanmak için SSH (Secure Shell) ağ protokolünü kullanıyorsunuz.

Ubuntu veya herhangi bir Linux dağıtımı ya da OS X kullanıyorsanız terminalden (Ubuntu ve diğer Linux dağıtımlarını kullanırken Ctrl + Alt + T kısayolu ile terminali açabilirsiniz, OS X için kısayolu bulamadım.) direk olarak ssh root@sunucuIpAdresiniz komutu ile sunucunuza bağlanabilirsiniz. Windows kullanıyorsanız da Putty işinizi görecektir. Size gelen e-postadaki şifreyi terminal ya da putty ekranında klasik kopyala (Ctrl + C) – yapıştır (Ctrl + V) şeklinde kullanamıyorsunuz. Bu yüzden gelen e-postadan şifrenizi seçip kopyalayın, terminal ya da putty ekranında, size şifre sorulduğunda shift + insert tuşu ile şifrenizi yapıştırabilirsiniz.

küçük bir öneri: sunucunuza bağlanırken sürekli ip adresinizi girmek zorunda değilsiniz. eğer şimdilik bir alan adı tanımlamayı düşünmüyorsanız hosts dosyanızda yapacağınız küçük bir değişiklikle ip adresi yerine bir isim ya da adres (vps ya da vps.io gibi) kullanabilirsiniz. -bu arada terminale bir kez sunucunuzun ip adresini yazdıktan sonra terminal geçmişinden de hızlı bir şekilde sunucunuza bağlantı sağlayabilirsiniz.- terminal ekranınıza sudo nano /etc/hosts komutunu yazın. root hakları ile dosyayı açmanız gerektiği için kişisel bilgisayarınızın şifresini yazın. açılan ekranda boş bir satıra sunucunuzun ip adresini ve bir boşluk bırakarak kullanmak istediğiniz isim ya da adresi –örnek– yazın. Ctrl + X tuşuna basın, e tuşuyla (ingilizce kullanıyorsanız y tuşu) dosyada yapılan değişkikleri kaydedilmesi için onay verin.

Sunucuya bağlandığınızda yapacağınız ilk iş şifrenizi değiştirmek. Terminal ekranına sudo passwd root komutunu yazın. (Şifrenizi yazarken ekranda birşey görmemeniz normal, şifrenizi yazıp enter’a basın, şifrenizi tekrar yazıp tekrar enter’a basın.)

SSH Güvenliği.

SSH ağ protokolünü güvenlik açısından root kullanıcısı ile kullanmamanız daha mantıklı. Sizin oluşturacağınız kullanıcı, root kullanıcısına göre daha zor tahmin edilebilir olduğundan olası bir saldırı durumunda kullanıcı adınızın tahmin edilebilmesinin önüne geçmiş olursunuz.

Yeni bir kullanıcı oluşturmak için adduser kullanıcıAdınız komutunu kullanın. Daha sonra bu kullanıcıya root hakları vermelisiniz. Bunun için terminal ekranına visudo komutunu yazın. Açılan ekranda ‘# User privilege specification’ satırını bulun. Bu satırın altında root haklarına sahip olan kullanıcılar listelenir. Az önce oluşturduğunuz kullanıcı adınızı bu satırın altına eklediğinizde sizin kullanıcınız da root haklarına sahip olur. Kendi kullanıcınızı kullanıcıAdınız ALL=(ALL:ALL) ALL kodu ile root kullanıcısının alt satırına ekleyin ve dosyayı Ctrl + X komutu ile kaydedip kapatın.

terminal-root-login-portRoot haklarına sahip kullanıcı adınızı oluşturduğunuza göre artık root kullanıcısının ssh komutu ile sunucunuza bağlanmasını engelleyebilirsiniz. nano /etc/ssh/sshd_config komutu ile ssh bağlantı ayarlarının saklandığı dosyayı açın. 4. satırdaki port numarası varsayılan SSH portu olan 22’dir. Bu da tahmin edilebilir olduğundan varsayılan port numarasını değiştirmek size ekstra güvenlik sağlar. Örnek olarak ben 1905 olarak ayarladım, siz 1025 ile 65536 arasından istediğiniz bir port numarasını kullanabilirsiniz.

ipucu: terminalden kullanıcıAdınız@sunucuIpAdresiniz komutuyla sunucunuza bağlanırken port bilgisi olarak varsayılan port numarası olan 22 kullanılır. yukarıdaki gibi port numarasında değişiklik yaptığınız zaman sunucunuza bağlanırken kullandığınız komutta port bilgisi de vermeniz gerekiyor. komutu ssh -p portNumaranız kullanıcıAdınız@sunucuIpAdresiniz şeklinde yazmalısınız.

Teminal ekranındaki ‘# Authentication’  başlığında sizin ekleyeceğiniz PermitRootLogin no kodu root kullanıcısının sunucunuza bağlantısını kapatır, AllowUsers burak1 kodu ise sadece orada adı yazan kullanıcıların -örnek burak1 kullanıcısı- bağlanabilmesine izin verir. Bütün işlemlerden sonra Ctrl + X komutu ile dosyayı kaydedip kapatın. Daha sonra terminale reload ssh komutu vererek yeni ayarlarınız ile ssh’i yeniden yükleyin.

Fail2Ban.

Fail2Ban, sunucunuzun hatalı giriş kayıtlarını tarayarak fazlaca hatalı giriş denemesi yapan ip adreslerini, sunucunuzun güvenlik duvarında otomatik olarak oluşturduğu kurallar ile engeleyen oldukça faydalı bir yazılım. Bu şekilde sunucunuza yapılacak olası ‘brute force’ denilen, rastgele ya da bir listede tutulan şifreler denenerek sunucunuza bağlanmaya çalışan saldırganların önüne geçmiş olursunuz.

yukarıdaki ayarları kullanarak yeni kullanıcı oluşturduğunuz zaman, daha önce root kullanıcınız ile yazdığınız komutları yeni kullanıcınız ile yazarken ufak bir değişiklik gerekiyor. yönetici hakları gerektiren komutlar için yazacağınız komutlara sudo komutunu eklemelisiniz. bu şekilde hem istemeden sisteme zarar verecek bir işlem yapmanın önüne geçmiş olursunuz, hem de sudo komutu ile yazılan bütün komutlar loglandığı için daha sonra ‘ne yazmıştım ben?’ sorunuza kolaylıkla cevap bulabilirsiniz.

sudo apt-get install fail2ban komutu ile fail2ban’ı sunucunuza indirip kurun. Fail2Ban sunucunuza kurulduktan sonra cd /etc/fail2ban/ komutu ile programın ayarların saklandığı klasöre girin. Programın bütün ayarları jail.conf dosyasında saklanır ancak sunucunuzda yapacağınız güncellemeler sırasında bu dosya da güncelleneceği ve yapılan değişikliklerin kaybolmaması için jail.conf dosyası yerine jail.local dosyası kullanılır. jail.local dosyasını sudo copy jail.conf jail.local oluşturun. Yazdığımız komut jail.conf dosyasının kopyasını jail.local olarak oluşturur ve bütün ayarlamalar bu dosya üzerinden yapılır. sudo nano jail.local komutu ile dosyanızı açın.

ignoreip = 127.0.0.1/8 satırı yoksayılacak ip adreslerini ayarlamanızı sağlar, bu şekilde -eğer sabit ip kullanıyorsanız- ip adresinizi bir boşluk bırakarak satırın sonune eklerseniz kendinizi banlama gibi bir durumdan kurtulursunuz.

bantime = 600 satırı engellenecek süreyi belirlemenize yardımcı olur, varsayılan süre 600 saniye olarak ayarlı, siz istediğiniz şekilde değiştirin.

findtime = 600 ve maxretry = 3 satırları ise kaç dakika içerisinde kaç deneme yapıldığında kullanıcının engelleneceğini ayarlamak için kullanılır. Varsayılan ayarlarda 10 dakika içerisinde 3 başarısız deneme yapıldığında kullanıcı engellenir.

action = $(action_)s satırı kullanıcı engellendiği zaman ne yapılacağını ayarlamak için kullanılır. Varsayılan ayarda sadece /var/log/fail2ban.log dosyasına engellenen ip adresleri yazılır. Kullanılabilecek aksiyonlar ise bu satırın üstünde ayarlanmıştır.

destemail = root@localhost, sendername = Fail2Ban ve mta = sendmail satırları kullanıcı engellendiği zaman e-posta gönderilecek şekilde ayarlanmışsa kime nasıl e-posta gönderileceğini ayarlamak için kullanılır. Bu ayarlarda sadece destemail = e-posta@adresiniz.com şeklinde kendi e-posta adresiniz ile değiştirmeniz yeterli.

e-posta gönderme işlemi sunucunuzda MTA (Mail Transfer Agent) kurulu ise çalışır. kurulum hakkında bilgilere buradan ve şuradan ulaşabilirsiniz.

Son olarak, fail2ban tarafından hangi servislerin çalışacağının ayarlandığı bölüm var. Bizim amacımız ssh tarafından gelenleri engellemek olduğu için [ssh] başlığının altındaki ayarları (diğer servislerin yapılandırmaları ve ayarlamaları için fail2ban dökümantasyonuna bakabilirsiniz) değiştireceğiz. Varsayılan ayarlardan sadece değiştirmeniz gereken, üstteki ayarlar sırasında değiştirdiğiniz ssh port numarası ve eğer enabled = true değilse enabled değeri. Kaç deneme sonrası kullanıcının engelleneceğini yukarıda ayarlamıştık ancak ssh servisine özel bir deneme sayısı ayarlamak istiyorsanız maxretry = 3 değerini değiştirin.

burada bahsedildiği üzere sistem loglamaları sırasında benzer hata mesajların “last message repeated n times” şeklinde log dosyalarına yazılmasından dolayı fail2ban hata satırlarını düzgün şekilde sayamayabiliyor. bunun önüne geçmek için sudo nano /etc/rsyslog.conf komutu ile rsyslog.conf dosyasını açın. $RepeatedMsgReduction On değerini $RepeatedMsgReduction Off şeklinde değiştirin. sudo service rsyslog restart komutu ile rsyslog hizmetini yeniden başlatın.

Son.

Şimdilik başlangıç için yapabilecekleriniz bunlar ancak daha fazla kaynak için DigitalOcean (referans linkidir, size de bana da faydası dokunur)‘da muazzam makaleler (tabii ingilizce ve özellikle güvenlik ile ilgili makaleler için security etiketini takip edebilirsiniz) var.