Wstępna konfiguracja serwera Debian 10 (2021)

Zaraz po instalacji serwera powinniśmy go zabezpieczyć, oto czynności, które należy/powinno się zrobić tuż po instalacji, jeżeli serwer jest dostępny z zewnątrz

  1. Logujemy się na konto root lub na konto z nadanymi uprawnienia do wykonywania czynności jako root np. debian, za pomocą konsoli lub ssh (w przypadki VPSa)
  2. Zmieniamy hasło
passwd

3. Jeżeli korzystamy z z konta nie będącego root, należy wydać komendę

sudo su
# w przypadku braku zainstalowanego i skonfigurowanego sudo
su

4. Aktualizacja systemu

apt-get update
apt-get upgrade
apt-get dist-upgrade

5. Instalacja najważniejszy i niezbędnych pakietów

apt-get install sudo openssl openssh-server fail2ban

6. Z przyzwycajenia osobiście lubię zainstalować jeszcze takie pakiety, które ułatwiają mi znacząco pracę

apt-get install mc htop

7. Dodanie użytkownika

adduser nazwa_użytkownika

8. Tworzymy plik, w którym znajdzie się nowa polityka fail2ban

touch /etc/fail2ban/jail.d/ssh-ddos.conf

9. Dodajemy nową politykę fail2ban

nano /etc/fail2ban/jail.d/ssh-ddos.conf
## należy wpisać ##
[ssh-ddos]
enabled = true

10. Restartujemy usługę fail2ban

systemctl restart fail2ban

11. Wyłączymy możliwość zalogowania się przez ssh dla konta root, oraz zmieniamy domyślny port z 22 na np. 1234


sed -i -e "s/^[#\t ]*PermitRootLogin[\t ]*.*\$/PermitRootLogin no/" '/etc/ssh/sshd_config'
sed -i -e "s/^[#\t ]*Port[\t ]*.*\$/Port 1234/" '/etc/ssh/sshd_config'

12. Tworzymy i przypisujemy użytkowników do grupy, która pozwala na łączenie się przez ssh, w ten sposób nie każde konto będzie mogło logować się poprzez ssh.

addgroup --system "ssh-users"
echo 'AllowGroups ssh-users' >> /etc/ssh/sshd_config
adduser nazwa_konta_które_może_używać_ssh ssh-users

13. Generujemy klucze tak aby móc logować się za pomocą kluczy, a nie hasła

# na komputerze, z którego będziesz się łączyć do serwera
# Linux
ssh-keygen -t rsa -f /home/twój_lokalny_użytkownik/.ssh/id_rsa
ssh-copy-id -i "/home/twój_użytkownik_na_serwerze/.ssh/id_rsa.pub" -p port (np. 1234) nazwa_użytkownika_na_serwerze@ip_serwera
# Windows
Uruchom PuTTYgen, RSA 2048 -> Generate, Wpisz hasło dla klucza prywatnego w "Key passphrase" i ponownie w "Confirm passphrase" najlepiej inne niż do konta. Następnie "Save public key" i "Save private key" -> Skopiuj zawartość "Public key for pasting into OpenSSH..."
# na serwerz
Tworzymy katalog użytkownika na serwerze: /home/twój_użytkownik/.ssh/
Wklej skopiowaną zawartość do pliku na serwerze: 
nano /home/twój_użytkownik/.ssh/authorized_keys
chmod 600 /home/twój_użytkownik/.ssh/authorized_keys
chmod 700 /home/twój_użytkownik/.ssh
chown nazwa_użytkownika:nazwa_użytkownika -R /home/nazwa_użytkownika/.ssh

14. Na serwerze konfigurujemy ssh, żeby zezwalało na łączenie się tylko za pomocą kluczy (Uwaga, jeżeli nie masz dostępu fizycznego do serwera lub wirtualnego KVM-a (w przypadku VPS-a) musisz bardzo dobrze zabezpieczyć klucze, które wygenerowałeś w przeciwnym razie możesz w późniejszym czasie odciąć sobie dostęp od serwera)

sed -i -e "s/^[#\t ]*PubkeyAuthentication[\t ]*.*\$/PubkeyAuthentication yes/" '/etc/ssh/sshd_config'
sed -i -e "s/^[#\t ]*PasswordAuthentication [\t ]*.*\$/PasswordAuthentication no/" '/etc/ssh/sshd_config'

15. Przed zrestartowaniem ssh dodajmy naszego użytkownika do grupy sudo, aby móc korzystać z dobrodziejstw sudo

usermod -aG sudo nasz_użytkownik

16. Restartujemy usługę serwera ssh

systemctl restart ssh

# teraz nowy terminalem można sprawdzić poprawność konfiguracji, zostawiając stare połączenie aktywne na wypadek gdybyśmy popełnili błąd i nie mogli zalogować się na użytkownika za pomocą klucza prywatnego.

17. Dodanie ssh do filtracji w usłudze fail2ban

nano /etc/fail2ban/jail.d/ssh.conf
## należy wpisać ##
[ssh]
port = 1234 # lub inny port, który został wskazany w konfiguracji ssh

18. Restartujemy usługę fail2ban

systemctl restart fail2ban

19. (Zdecydowanie opcjonalne) Wyłączenie auto-konfiguracji i anonsowania routera

nano /etc/sysctl.d/tweak-ipv6.conf
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.all.accept_ra=0

20. (Zdecydowanie opcjonalne) Ustawienie statycznego adresu IPv6 jeżeli takowy posiadamy

nano /etc/networks/interfaces
# zaraz po definicji eth0
ifcase eth0 inet6 static
address adres::ipv6::serwera
netmask wartość_maski (np. 64)
gateway adres:ipv6::bramy
# jeżeli pomimo wpisania dobrych wartości połączenie ipv6 nie działa można zamienić linijkę z gateway na poniższe:
post-up /sbin/ip -f inet6 route add adres:ipv6::bramy dev eth0 
post-up /sbin/ip -f inet6 route add default via adres:ipv6::bramy 
pre-down /sbin/ip -f inet6 route del adres:ipv6::bramy dev eth0
pre-down /sbin/ip -f inet6 route del default via adres:ipv6::bramy

21. Ustawiamy nazwę serwera oraz ustawmy poprawną strefę czasową

hostnamectl set-hostname nasza_nazwa_serwera
# dodajemy adres ip wersji 4 (IPv4)
echo 'adres_ipv4_serwera nasza_nazwa_serwera.nasza_domena nasza_nazwa_serwera' >> /etc/hosts
# jeżeli posiadamy adres ip wersji 6 (IPv6)
echo 'adres_ipv6_serwera nasza_nazwa_serwera.nasza_domena nasza_nazwa_serwera' >> /etc/hosts

# sprawdźmy czy zegar się zgadza
timedatectl
# jeżeli nie sprawdźmy jakie dostępne są strefy czasowe
timedatectl list-timezones
# ustawmy naszą strefę czasową (np. Europe/Warsaw)
timedatectl set-timezone Europe/Warsaw
# potwierdźmy, że czas jest teraz poprawny
timedatectl

22. Instalacja prostego w obsłudze firewall-a

apt-get install ufw

23. Konfiguracja naszego firewall-a

ufw allow PORT_SSH_KTÓRY_USTAWILIŚMY/tcp

# jeżeli wpisaliśmy poprawny port ssh możemy uruchomić nasz firewall
ufw enable
ufw status

24. Zrestartujmy serwer „na szczęscie”, jeżeli wyszstkie czynności zostały wykonane poprawnie nie powinno być problemu z jego uruchomieniem. Dzięki temu będziemy mieli pewność, że wszystkie wprowadzone ustawienia nas obowiązują.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*