FirewallD i niestandardowy port SSH

in #polish5 years ago (edited)

Zabawa z firewallem potrafi być fajna jednak jeden nieostrożny ruch i możemy utracić dostęp do naszej zdalnej maszyny. W tym wpisie przedstawię jak można trochę się wycwanić jeśli usługodawca oferuje nam maszynę ze zmienionym portem SSH i chcemy na niej uruchomić usługę firewalld.

1.jpg

Źródło

Dla niewtajemniczonych SSH to usługa umożliwiająca zdalne podłączenie się do komputera z Linuksem, a firewalld to usługa ściany przeciwogniowej. Jedziemy!

Wszystkie czynności należy wykonywać jako root.

Załóżmy że dostaliśmy serwer, który domyślnie posiada zainstalowane SSH jednak działa ono na porcie np 5721. Niby nic strasznego, wystarczy podać ten port podczas połączenia i komunikacja z naszym serwerem zostanie zestawiona. Problem pojawia się jeśli chcemy zainstalować na tym serwerze usługę firewalld. Dlaczego? Zakładamy, że nasz system to CentOS zatem wykonujemy następujące operacje:

yum install firewalld
systemctl start firewalld

...i w tym momencie tracimy dostęp do maszyny. Dlaczego? Ponieważ firewalld nie wie że mamy usługę ssh, w dodatku na zmienionym porcie. W momencie utraty połączenia z naszą maszyną musimy ją albo zrestartować albo w drastycznych sytuacjach przeinstalować. Jak zatem zmienić port na wyłączonej usłudze i w jaki sposób zabezpieczyć się przed utratą dostępu do maszyny kiedy popełnimy błąd?

Na samym początku wykonujemy polecenie:

cd /etc/firewalld/zones/
ls

Naszym oczom powinien pojawić się taki wynik:

public.xml  public.xml.old

Jeśli w tym katalogu znajdują się jeszcze jakieś inne pliki to usuwamy je. Teraz musimy się dowiedzieć jak nazywa się karta sieciowa dzięki której mamy internet. Wpisujemy:

ip a

U mnie karta sieciowa nazywa się ens32. Wyposażeni w tę wiedzę bierzemy się za edycję pliku public.xml. Uruchamiamy zatem edytor tekstu np. nano, usuwamy wszystko co jest w tym pliku w taki sposób, aby zawartość public.xml wyglądała następująco:

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted</description>
</zone>

Gdy nasz plik wygląda dokładnie tak jak wyżej to możemy się zabrać za dodanie naszej karty sieciowej do strefy public oraz naszego portu, który chcemy otworzyć. Po edycji plik powinien wyglądać tak:

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are a$
  <interface name="ens32"/>
  <port protocol="tcp" port="5721"/>
</zone>

<interface name="ens32"/> - dodaje naszą kartę sieciową do strefy public
<port protocol="tcp" port="5721"/> - otwiera port w strefie public

Zapisujemy zmiany. Teraz musimy napisać bardzo prosty skrypt, który w przypadku błędnej konfiguracji firewalla może uratować nam skrórę. Przechodzimy do domowego katalogu użytkownika root...

cd ~

...tworzymy plik i nadajemy mu uprawnienia do wykonywania:

touch ratunek.sh
chmod +x ./ratunek.sh

Otwieramy edytor i wklejamy do tego pliku następującą zawartość:

#!/bin/bash

systemctl start firewalld

sleep 50

systemctl stop firewalld

Co ten skrypt robi? Uruchamia usługę firewalld, następnie czeka 50 sekund i ją wyłącza. Po co? Jeśli coś zepsuliśmy podczas konfiguracji firewalla to albo usługa nam nie "wstanie" albo wstanie i utracimy dostęp do naszej maszyny... ale odzyskamy ją w momencie kiedy powyższy skrypt wyłączy firewalla. Dzięki temu z powrotem będziemy mogli zalogować się do maszyny. Oczywiście wartość 50 możemy zmienić na dowolnie inną.

Do uruchomienia tego skryptu potrzebujemy jeszcze aplikacji screen. Screen to program który potrafi coś uruchomić i sprawić, że będzie to działać nie jako "w tle". Instalujemy zatem:

yum install screen

I teraz odpalamy nasz skrypt:

screen -S ratunek -md <ścieżka do pliku>

Po wciśnięciu przycisku Enter jeśli dalej mamy dostęp do maszyny to wpisujemy polecenie:

systemctl status firewalld

Gdy otrzymamy taki komunikat:

firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-03-15 13:25:19 CET; 48s ago

To znaczy, że usługa wstała i działa. Jeśli usługa się nie uruchomi to znaczy, że coś zepsuliśmy podczas konfiguracji. Gdy jednak po uruchomieniu firewalla utracimy dostęp do naszej maszyny to musimy poczekać aż firewall zostanie wyłączony przez skrypt i ponownie otrzymamy władzę nad serwerem.

Źródła

Doświadczenia własne.

Wsparcie

Podobało się? Obserwuj i wspieraj!

Sort:  

Nic nie rozumiem, ale i tak lubię to 👍

Posted using Partiko Android

!tipuvote hide

Posted using Partiko Android

Spoko.

Ja na niektórych swoich maszynach, w szczególności takich na których często się bawię firewallem, mam w cronie zadanie, które sprawdza czy na pewno mój niestandardowy port SSH jest otwarty. Jeśli nie, to odpala się konkretne polecenie iptable, które ten port otwiera.

Czyli jakby na odwrót, niż u Ciebie, ale lepsze dla mojej paranoi, bo nie wyłączam firewalla ani na chwilę.

Congratulations @docbox! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You published more than 60 posts. Your next target is to reach 70 posts.

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Do not miss the last post from @steemitboard:

Are you a DrugWars early adopter? Benvenuto in famiglia!
Vote for @Steemitboard as a witness to get one more award and increased upvotes!

Sprytne rozwiązanie z tym skryptem. Co do odcięcia się tak ogólnie, to wtedy docenia się IPMI w serwerze, jeśli istnieje. :)

Coin Marketplace

STEEM 0.25
TRX 0.11
JST 0.032
BTC 63478.09
ETH 3067.28
USDT 1.00
SBD 3.81