SSH, herkese açık her sunucuda en çok saldırı alan hizmettir; aynı zamanda düzgünce kapatılması en kolay olanıdır. Riskin neredeyse tamamı tek bir şeyden gelir: parolalar. Onları kaldırın; denemeler sürer ama artık bir anlam taşımaz.

Yapılandırma

# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers sara deploy

sudo sshd -t && sudo systemctl reload ssh
Yeniden yüklemeden önce: çalışan bir anahtarınız ve halihazırda oturum açmış ikinci bir uçbiriminiz olsun. Anahtar kurulu değilken PasswordAuthentication no yazarsanız kendi sunucunuzun kapısını yüzünüze kapatmış olursunuz — geri dönüşün tek yolu sağlayıcının konsolu kalır.

Satır satır

  • PermitRootLogin no — sudo ile, adı olan bir kullanıcı olarak çalışın. Bkz. Kullanıcılar, sudo ve asla root olarak çalışmamak.
  • PasswordAuthentication no — buradaki en değerli tek satır.
  • KbdInteractiveAuthentication no — insanların unuttuğu ve parolaları sessizce çalışır tutan ikinci parola yolunu kapatır.
  • AllowUsers — açıkça yazılmış bir liste. Bir paketin oluşturduğu yeni bir sistem hesabı oturum açamaz.

Nereden yanıt vereceğini kısıtlayın

sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp
sudo ufw deny 22/tcp

Sabit bir ofis adresi mümkün değilse, yedek çözüm Fail2ban'dır — bkz. Fail2ban neyi durdurur. Bağlantı noktasını taşımak yalnızca göstermeliktir; bkz. SSH bağlantı noktasını değiştirmek.

Sonuçta neyle kaldığınızı denetleyin

sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication|allowusers'
sshd -T, aşağıda bir Include dosyasında ayarlanmış her şey dâhil, yürürlükteki yapılandırmayı yazdırır. Bir dağıtımın sshd_config.d içine bir dosya bırakıp sizi geçersiz kılmasını hesaba katan tek okuma budur.