Node'unuzu Güvence Altına Alma
Bu kılavuzun amacı, node'unuzu kötü niyetli aktörlere karşı korumak için atabileceğiniz adımları size göstermektir. İster evde yerel bir sunucu, ister bulutta bir VPS sunucusu / sanal makine çalıştırıyor olun, buradaki ipuçları node'unuzu dış saldırılara karşı sağlamlaştırmanıza ve ömrü boyunca korumanıza yardımcı olacaktır.
Bu bölüm, yapmanız gereken temel eylemleri ve yararlı ancak zorunlu olmayan isteğe bağlı eylemleri açıklayacaktır.
Bu kılavuz, node makinenizi sağlamlaştırmak için yapabileceğiniz bazı şeylere giriş niteliğindedir. Komut satırı terminali konusunda rahatsanız ve node'unuzu korumada daha ileri gitmek istiyorsanız, popüler imthenachoman/How-To-Secure-A-Linux-Server kılavuzuna göz atın.
Bu Kılavuzdaki Varsayımlar
Bu kılavuz, node'unuzun Ubuntu 20.04 LTS çalıştırdığını varsayar.
Kavramlar diğer sistemlere de taşınacaktır ancak örnek komutlar taşınmayabilir.
Bu kılavuzdaki tüm komutlarda olduğu gibi, ssh kullanarak node'unuzun komut terminaline uzaktan bağlandığınızı varsayıyoruz.
ssh kullanımı konusunda tazelemeye ihtiyacınız varsa, önce Secure Shell'e Giriş kılavuzuna göz atın.
TEMEL: İstemci Makinenizi Güvende Tutun
Smartnode'unuzu yerel olarak kullanıyorsanız (doğrudan bağlı bir klavye ve monitör ile fiziksel olarak giriş yaparak), bu bölüm sizinle ilgili değildir - atlayabilirsiniz.
Çoğu Smartnode operatörü, ssh kullanarak başka bir bilgisayardan terminaline bağlanarak node'larıyla uzaktan etkileşime girer:
- Bağlandığınız makine (bu durumda, node makineniz) sunucu olarak adlandırılır.
- Bağlandığınız makine (dizüstü bilgisayarınız, masaüstünüz veya hatta telefonunuz gibi) istemci olarak adlandırılır.
Smartnode'unuzu güvence altına almak için yapabileceğiniz en önemli şeylerden biri istemci makinenizi güvende tutmaktır. İstemci makineniz tehlikeye girerse ve node'unuza giriş yapmak için kullanırsanız, node'a uyguladığınız güvenlik ayarlarının çoğu atlanabilir.
Örneğin: SSH istemcisi olarak bir dizüstü bilgisayar kullanıyorsanız ve üzerinde bir keylogger yüklüyse, SSH üzerinden bağlandığınızda node'da yazdığınız gizli şeyler (şifreniz veya kurtarma anımsatıcınız gibi) çalınır.
İstemci makinenizi güvende tutmak için kesin bir kılavuz yoktur, ancak bunun güvenliğinizde bir faktör olduğunun farkında olmak iyi bir ilk adımdır. İstemci makinenizin olabildiğince güvenli olduğundan emin olun.
İşte birkaç ipucu:
- İstemci makinenizi riskli faaliyetler için kullanmayın (güvenilmeyen web sitelerini ziyaret etmek veya gereksiz programlar yüklemek gibi)
- İstemci makinenizi en son güvenlik yamaları ile güncel tutun
- Mümkünse, İşletim Sisteminiz için bir kötü amaçlı yazılım ve antivirüs koruma programı kullanın
Maksimum güvenlik için, SSH istemciniz olarak özel bir makine kullanmak isteyebilirsiniz, ancak bu sizin için pratik olmayabilir.
TEMEL: SSH Erişiminizi Güvence Altına Alın
Smartnode'unuzu yerel olarak kullanıyorsanız (doğrudan bağlı bir klavye ve monitör ile fiziksel olarak giriş yaparak), bu bölüm sizinle ilgili değildir - atlayabilirsiniz.
Smartnode'unuzu evde çalıştırıyor olsanız da uzak bir veri merkezinde VPS kullanıyor olsanız da, muhtemelen SSH üzerinden erişiyorsunuz veya SSH'yi kullanmasanız bile etkinleştirilmiştir.
SSH bağlantıları güvenli kriptografiye dayanır, ancak herhangi bir güvenli sistemde olduğu gibi, gerçek güvenlik onu doğru kullanmaktan gelir. SSH ayarlarınız için yapmanız gereken iki ana şey vardır:
- Uzaktan giriş için kullanıcı adı ve şifre yerine bir SSH anahtarı kullanın
- Şifre tabanlı kimlik doğrulamayı tamamen devre dışı bırakın, böylece SSH anahtarları tek uzaktan giriş seçeneği olur
Muhtemelen şimdi aşina olduğunuz gibi, SSH üzerinden node'unuza giriş yapmanın varsayılan yolu bir kullanıcı adı ve şifredir. Bunun dezavantajı, şifrenizin genellikle oldukça "kısa" bir şey olması ve kaba kuvvet saldırılarına karşı hassas olmasıdır.
Neyse ki, SSH üzerinden giriş yapmanın alternatif bir yolu vardır: bir SSH anahtar çifti.
SSH anahtar çiftleri blockchain cüzdanlarına benzer şekilde çalışır; genel bir kısım (cüzdan adresiniz gibi) ve özel bir kısımla gelirler (cüzdan adresinizin özel anahtarı gibi):
- Genel kısmı node'unuza sağlarsınız. Bu şekilde, node bağlanmanıza izin verildiğini bilir ve gerçekten sizin bağlanmaya çalıştığınızı bilir.
- Özel kısmı istemci makinenizde kendinize saklarsınız. Bu şekilde, siz (ve yalnızca siz) node'unuza bağlanabilirsiniz.
- Özel kısmı bir şifre ile koruyabilir (ve korumalısınız!), böylece anahtarınızı çalan biri onu kullanamaz.
- Bilgisayar perspektifinden bakıldığında, özel anahtar bir şifreden katlanarak daha zordur kırılması. Bu, node'unuza karşı kaba kuvvet saldırısı riskini azaltır.
Kendinizinkini oluşturmadan önce SSH anahtar çiftleri hakkında daha fazla bilgi edinmek isterseniz, bu bağlantılara göz atın:
SSH Anahtar Çifti Oluşturma
İstemci makinenizde yeni bir SSH anahtar çifti oluşturarak başlayalım. Dışarıda birçok anahtar çeşidi var, ancak mükemmel güvenlik sağlayan ed25519 adlı bir anahtar türü kullanacağız.
İstemci makinenizde aşağıdaki komutu çalıştırın (yani node makinenize SSH yaparken bunu çalıştırmamalısınız - yapıyorsanız, önce SSH'den çıkın):
Aşağıdakileri göreceksiniz:
Bu, özel anahtar dosyanızı nereye kaydetmek istediğinizi sorar. SSH, sağlanan varsayılanla uyumludur ve bunu seçerseniz sizin için otomatik olarak kullanır. Ancak, isterseniz başka bir şeye değiştirme seçeneğiniz vardır.
/home/username/.ssh/id_ed25519 yolu sadece bir örnektir, kullanıcı adınızın username olduğunu varsayar.
Muhtemelen farklı bir kullanıcı adınız var.
Bu kılavuzda yukarıdaki gibi bir yol gördüğünüzde, sisteminizin gerçek kullanıcı adınızla gerçekten yazdırdığı yolla değiştirin.
Varsayılan ayardan memnunsanız, basitçe Enter'a basın.
Aksi takdirde, anahtar için istediğiniz konumu yazın.
Mutlak bir yol olmalıdır (örneğin Linux'ta /home/username/.ssh/rocketpool_key veya OSX'te /Users/username/.ssh/rocketpool_key).
İşiniz bittiğinde Enter'a basın.
Enter'a bastıktan sonra şunu göreceksiniz:
Bu, özel anahtarın kendisi için şifre olacaktır. Node'unuza bağlanmak için anahtarı her kullandığınızda, önce bu şifreyi girmeniz gerekir.
Bunu boş bırakmamalısınız - aksi takdirde, SSH anahtar dosyasına sahip olan herkes onu kullanabilir! Sadece sizin (ve yalnızca sizin) bileceği iyi bir şifre seçin.
Ayrıca, şifrenizi unutmayın - kaybederseniz bu şifreyi kurtarmanın bir yolu yoktur.
Şifreyi yazmayı bitirdikten sonra Enter'a basın.
Onay için yeniden yazmanızı isteyecektir.
Bundan sonra, aşağıdaki gibi bir çıktı göreceksiniz:
İlk satır özel anahtarın konumunu belirtir, varsayılan olarak id_ed25519 olarak adlandırılır (dosya uzantısı olmadığına dikkat edin).
Bu özel anahtar dosyası varsayılan konumdaysa Ubuntu, ssh kullandığınızda bu anahtarı sizin için otomatik olarak yükler.
İkinci satır genel anahtarın konumunu belirtir, varsayılan olarak id_ed25519.pub olarak adlandırılır.
Bir sonraki adım için genel anahtara ihtiyacımız olacak.
Ubuntu bu yeni anahtarı otomatik olarak yüklemelidir. Ancak, bazı sistemler (macOS makineleri gibi) otomatik olarak yüklemeyecektir - bunu aşağıdaki komutla yapmalarını söylemeniz gerekir istemci makinenizde:
Bunun önceki adımda oluşturduğumuz özel anahtarın yolu olduğunu, genel anahtarın değil, unutmayın. Yolu, önceki adımda sisteminizin yazdırdığı yolla değiştirin.
ssh-agent'ın çalışmadığını söyleyen bir hata alırsanız, istemci makinenizde aşağıdaki komutu çalıştırarak başlatın:
Terminali her açtığınızda bu iki komutu yazmak istemiyorsanız, ~/.bashrc dosyanıza bir alias ekleyerek anahtarınızı eklemek için bir kısayol oluşturabilirsiniz.
Metin düzenleyiciyi kullanarak dosyayı açın:
Sonuna bu satırı ekleyin (özel anahtar için varsayılan yolu kullandığınızı varsayarak - gerektiğinde güncelleyin):
Ctrl+O ve Enter, ardından Ctrl+X ile kaydedin ve çıkın.
Ardından, değişikliklerin etkili olması için terminalinizi kapatın ve açın.
Artık anahtarı yüklemek için istemci makinenizde loadkey yazabilirsiniz.
Genel Anahtarı Node'unuza Ekleme
SSH anahtar çiftinizi aldıktan sonra, artık genel anahtarı node'unuza ekleyebilirsiniz.
Bu, az önce oluşturduğunuz özel anahtarı kullanarak kullanıcı adınız ve şifreniz yerine ssh üzerinden bağlanmanıza izin verecektir.
Bunu yapmanın iki yolu vardır - biri işe yaramazsa, diğer yolu deneyin:
Not: istemci makineniz Windows çalıştırıyorsa, ssh-copy-id henüz mevcut değildir.
Lütfen "Anahtarı Manuel Olarak Ekleme" sekmesindeki talimatları izleyin.
İstemci makinenizde aşağıdaki komutu çalıştırın:
Örneğin, node'daki kullanıcı adım staker ve node'umun IP adresi 192.168.1.10 ise, aşağıdaki komutu çalıştırırım:
Aşağıdaki gibi bazı mesajlar göreceksiniz:
Bu, önce zaten orada olmadığından emin olmak için anahtarınızla giriş yapmaya çalıştığını söyler. Giriş başarısız olduğunda, yeni genel anahtarı node makinesine eklemenin uygun olduğunu bilir.
Ardından sizi node makinesindeki kullanıcının şifresi için isteyecektir. (Bunun SSH anahtarının şifresi olmadığını unutmayın!)
Kullanıcınızın şifresini girin ve aşağıdaki çıktıyı göreceksiniz:
Bu işe yaradı anlamına gelir!
Artık normalde yaptığınız gibi node'a ssh yapabilmelisiniz, ancak şimdi kullanıcı hesabının şifresini yazmanız gerekmeyecek.
Bunun yerine, SSH özel anahtarınızın şifresini yazmanız gerekecek. Sistem ayarlarınıza bağlı olarak, bunu yeniden başlatma başına yalnızca bir kez yapmanız gerekebilir veya node'unuza bağlanmak için anahtarı her kullandığınızda yapmanız gerekebilir.
Şifre ile Girişi Devre Dışı Bırakma
Bir SSH anahtar çifti kurmuş olsanız bile, node'unuz hala diğer makinelerin kullanıcı adı ve şifre yöntemini kullanarak giriş yapmaya çalışmasına izin verecektir. Bu, başlangıçta SSH anahtarlarını kullanmanın tüm amacını bozar, bu nedenle bir sonraki adım bunları devre dışı bırakmaktır.
SSH sunucusunun yapılandırmasını değiştirmek üzeresiniz. Tüm mevcut SSH oturumlarınız korunacaktır. Ancak, bir hata yaparsanız, artık yeni SSH oturumları oluşturamayabilir ve kendinizi makineden etkili bir şekilde kilitleyebilirsiniz.
Bunu önlemek için, sonraki adımlar için 2 SSH oturumu oluşturmanızı şiddetle öneririz - biri düzenleme ve test için, biri de herhangi bir bozucu değişikliği geri alabilmeniz için yedek olarak.
Makinenize her zamanki gibi ssh kullanarak giriş yaparak başlayın:
Bir hatırlatma olarak, bunu iki ayrı terminalde iki kez yapmalısınız, böylece her ihtimale karşı yedek bir oturumunuz olur. Şimdilik yedek oturumu görmezden gelebilirsiniz - ne zaman ihtiyacınız olacağını size söyleyeceğiz. Aşağıdaki komutları yalnızca ilk oturumda çalıştırın.
SSH sunucusu için yapılandırma dosyasını açın:
sudo ile başlayan tüm komutlarda olduğu gibi, bu sizi kullanıcı hesabınızın şifresi için isteyecektir.
Bu büyük bir dosyadır, bu nedenle klavyenizdeki ok tuşlarını veya Page Up / Page Down kullanarak içinde gezinmeniz gerekecektir.
Aşağıdaki değişiklikleri yapın:
#AuthorizedKeysFileyorum satırıysa (önünde#varsa) yorum satırını kaldırınKbdInteractiveAuthentication yes'iKbdInteractiveAuthentication no'ya değiştirin ve yorum satırını kaldırın (önündeki#'yi kaldırarak) - SSH'nin eski sürümlerinin bu seçeneğiKbdInteractiveAuthenticationyerineChallengeResponseAuthenticationolarak adlandırdığını unutmayınPasswordAuthentication yes'iPasswordAuthentication no'ya değiştirin ve yorum satırını kaldırın (önündeki#'yi kaldırarak)PermitRootLogin yes'iPermitRootLogin prohibit-password'e değiştirin, zaten buna ayarlanmışsa ve önünde#yoksa değiştirmeyin
İşiniz bittiğinde, Ctrl+O ve Enter ile kaydedin, ardından Ctrl+X ile çıkın.
Son olarak, sudo sshd -T | grep -i passwordauthentication komutunu çalıştırın ve passwordauthentication no yazdırdığından emin olun.
Yazdırmazsa, sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf komutunu çalıştırmanız ve bu dosyada da PasswordAuthentication yes'i PasswordAuthentication no'ya ayarlamanız gerekebilir.
Daha önce olduğu gibi kaydedin ve çıkın, Ctrl+O ve Enter, ardından Ctrl+X.
Ardından, yeni ayarları alması için SSH sunucusunu yeniden başlatın:
Bundan sonra, kullanıcı adı ve şifre ile SSH'ye giriş yapma devre dışı bırakılmalıdır.
Bu noktada, SSH oturumundan çıkmalı ve tekrar SSH yapmalısınız. Bunu başarılı bir şekilde yapabilirseniz, SSH yapılandırmanız hala geçerlidir!
Geri giremezseniz, yapılandırmanızla ilgili bir şeyler yanlış gitmiştir.
Bu bölümün başında oluşturduğunuz yedek SSH oturumunu kullanarak /etc/ssh/sshd_config dosyasını değiştirin.
Hatayı bulmaya çalışın veya değişikliklerinizi geri alın, ardından sudo systemctl restart sshd kullanarak SSH sunucusunu yeniden başlatın.
Yeniden başlatıldıktan sonra, "diğer" terminalinizde SSH ile tekrar bağlanmayı deneyin. Bunu tekrar çalışana ve başarılı bir şekilde bağlanabilene kadar yapmaya devam edin.
(İsteğe Bağlı) İki Faktörlü Kimlik Doğrulamayı Etkinleştirme
İki faktörlü kimlik doğrulama, şifreniz veya SSH anahtarınıza ek olarak, genellikle birincil cihazınızdan ayrı bir cihazda ikinci bir güvenlik önlemi gerektirmeyi içerir.
Örneğin, hem şifre hem de Google Authenticator kodu (veya SMS kodu) kullanarak bir kripto borsası gibi bir web sitesinde oturum açmaya aşina olabilirsiniz. Bu iki adımlı süreç, iki faktörlü kimlik doğrulamanın bir örneğidir.
SSH de bir Google Authenticator kodu gerektirecek şekilde yapılandırılabilir, bu da SSH anahtarınızı ve parolasını bir şekilde tehlikeye atan bir saldırganın hala kimlik doğrulama uygulamasının bulunduğu cihaza ihtiyaç duyacağı anlamına gelir (muhtemelen telefonunuz). Bu, sisteminize ekstra bir güvenlik katmanı ekler.
Bir şeyi yanlış yapılandırmanız durumunda node'unuza ikinci bir terminal ile SSH bağlantısı açmanızı şiddetle öneririz. Bu şekilde, kendinizi kilitlerseniz, hatalarınızı kolayca geri alabilmeniz için hala bağlı olan bir yedeğiniz olur.
Kendinizi kilitlerseniz, yerel monitör ve klavye aracılığıyla node'unuza fiziksel olarak erişmeniz, giriş yapmanız ve yanlış yapılandırmayı onarmanız gerekecektir.
Telefonunuzda henüz yoksa Google Authenticator (veya uyumlu bir eşdeğer) yükleyerek başlayın. Android kullanıcıları için, şifre kilitleme ve kullanışlı yedeklemeleri destekleyen açık kaynaklı bir alternatif olan andOTP'yi düşünün.
Ardından, node'unuza bu komutla Google Authenticator modülünü yükleyin:
Şimdi PAM'a (pluggable authentication modules) bu modülü kullanmasını söyleyin.
Önce yapılandırma dosyasını açın:
@include common-auth bulun (en üstte olmalıdır) ve önüne bir # ekleyerek yorum satırı yapın, böylece şöyle görünsün:
Ardından, dosyanın en üstüne bu satırları ekleyin:
Ardından dosyayı Ctrl+O, Enter ve Ctrl+X ile kaydedin ve çıkın.
Artık PAM Google Authenticator kullanmayı bildiğine göre, bir sonraki adım sshd'ye PAM kullanmasını söylemektir.
sshd yapılandırma dosyasını açın:
Şimdi KbdInteractiveAuthentication no satırını KbdInteractiveAuthentication yes olarak değiştirin, böylece şöyle görünsün:
(SSH'nin eski sürümleri bu seçeneği KbdInteractiveAuthentication yerine ChallengeResponseAuthentication olarak adlandırır.)
Dosyanın en altına aşağıdaki satırı ekleyin, bu sshd'ye hem SSH anahtarına hem de Google Authenticator koduna ihtiyaç duyduğunu gösterir:
Ardından dosyayı Ctrl+O, Enter ve Ctrl+X ile kaydedin ve çıkın.
Artık sshd kurulduğuna göre, 2FA kodlarımızı oluşturmamız gerekiyor.
Terminalinizde şunu çalıştırın:
İlk olarak, zaman tabanlı jetonlar hakkında sizi soracaktır.
Bu soruya y deyin:
Artık ekranınızda büyük bir QR kodu göreceksiniz; eklemek için Google Authenticator uygulamanızla tarayın. Ayrıca, şuna benzer gizli anahtarınızı ve birkaç yedek kodu göreceksiniz:
2FA uygulamanızın elverişli olmadığı durumlarda makineye giriş yapmanız gerektiğinde acil durum karalama kodlarını güvenli bir yere kaydedin. Uygulama olmadan, artık makineye SSH yapamazsınız!
Son olarak, size birkaç parametre daha soracaktır; önerilen varsayılanlar aşağıdaki gibidir:
İşiniz bittiğinde, yeni ayarları alması için sshd'yi yeniden başlatın:
SSH anahtarlarınızla sunucunuza SSH yapmaya çalıştığınızda, artık bir 2FA doğrulama kodu için de sorulmalısınız, ancak şifre için sorulmamalıdır.
TEMEL: Otomatik Güvenlik Güncellemelerini Etkinleştirme
İşletim Sistemi satıcıları düzenli olarak güncellemeler ve güvenlik düzeltmeleri yayınlar, bu nedenle sisteminizi en son yamalarla güncel tutmanız önemlidir. Bunu yapmanın en kolay yolu otomatik güncellemeleri etkinleştirmektir.
Node makinenizde aşağıdaki komutları çalıştırın:
/etc/apt/apt.conf.d/20auto-upgrades dosyasını düzenleyerek otomatik güncelleme ayarlarını değiştirebilirsiniz:
Bu, makul otomatik güncelleme ayarlarının bir örneğidir:
Değişikliklerinizi eklemeyi bitirdiğinizde, Ctrl+O ve Enter ile kaydedin, ardından Ctrl+X ile çıkın.
Sonrasında, yeni ayarları yüklediğinizden emin olun:
TEMEL: Güvenlik Duvarı Etkinleştirme
Genel olarak, makineniz yalnızca Execution istemcinizin, Consensus istemcinizin ve Smartnode yığınınızın kullandığı bağlantı noktalarında ağ trafiğini kabul etmelidir. Bunu uygulamak ve beklenmedik veya istenmeyen trafiği önlemek için node'a bir güvenlik duvarı kurabiliriz.
Rocketpool kurulumu sırasında farklı bir execution/consensus istemci portu seçtiyseniz, ayarlarınızı yansıtacak şekilde aşağıdaki portları düzenlemeniz gerekir.
Ubuntu varsayılan olarak ufw (uncomplicated fire wall) ile birlikte gelir; bu, node'unuzun güvenlik duvarı ayarlarını yönetmek için kullanışlı bir yardımcı programdır.
Aşağıdaki komutlar ufw'yi Smartnode'unuz için iyi bir varsayılan yapılandırmayla kuracaktır.
Bunları node makinenizde çalıştırın.
Sonraki kurallarca açıkça izin verilmedikçe bağlantıları devre dışı bırakın:
SSH'ye izin verin:
Execution istemcisine izin verin (eski adıyla ETH1):
Consensus istemcisine izin verin (eski adıyla ETH2):
Lighthouse istemci v4.5.0+ çalıştırıyorsanız, gecikmeyi azaltmak / bant genişliğini artırmak için quic protokolünü kullanabilirsiniz, quic protokolü varsayılan olarak lighthouse'un --port + 1'ini quic mesajlarını dinlemek için kullanır: https://lighthouse-blog.sigmaprime.io/Quic,%20Networking.html
Son olarak, ufw'yi etkinleştirin:
iptables uzmanları Docker'ın ufw ayarlarını atladığını fark edebilir.
Kesinlikle konuşursak, bu Hybrid modda çalışmıyorsanız Execution ve Consensus istemci kurallarına ihtiyacınız olmadığı anlamına gelir.
Ancak bunları eklemek hiçbir dezavantajı yoktur ve Hybrid moda geçerseniz güvenlik duvarı sorunlarıyla karşılaşmamanızı sağlar.
(İsteğe Bağlı) Kaba Kuvvet ve DDoS Korumasını Etkinleştirme
Sunucunuzu DDoS saldırılarından ve kaba kuvvet bağlantı girişimlerinden korumak için fail2ban kurabilirsiniz.
Bu program gelen bağlantıları izler ve tekrar tekrar hatalı kimlik bilgileriyle giriş yapmaya çalışan IP adreslerini engeller.
Saldırı önleme hakkında daha fazla bilgi için bu kılavuza bakın.
Node makinenizde aşağıdaki komutları çalıştırın:
Hizmeti kurun:
Ardından, /etc/fail2ban/jail.d/ssh.local dosyasını açın:
Aşağıdaki içeriği ekleyin:
maxretry ayarını değiştirebilirsiniz, bu ayar saldırgan adresi kilitlemeden önce izin vereceği deneme sayısıdır.
İşiniz bittiğinde, Ctrl+O ve Enter ile kaydedin ve çıkın, ardından Ctrl+X.
Son olarak, hizmeti yeniden başlatın:
Ve bununla, node'unuzun güvenlik duruşunu büyük ölçüde iyileştirdiniz. Tebrikler!