<p>
W poprzednim rozdziale dowiedzieliśmy się czym są sieci komputerowe
i jak wygląda ich konfiguracja w dystrybucjach Linuksa. Sieci służą
- do przesyłania danych, a te musimy dostsować za pomocą uzupełnienia
+ do przesyłania danych, a te musimy dostarczyć za pomocą uzupełnienia
formularza na stronie internetowej lub w postaci zwykłego pliku
tekstowego. Za obie te formy odpowiadają różne ustandaryzowane zbiory
programów składające się na jeden konkrent <strong>protokół</strong>.
udostępnionego gdzieś na serwerze.
</p>
<p>
- Aby pomiędzy dwoma <em>stronami</em> mogła zajść komunikacji
+ Aby pomiędzy dwoma <em>stronami</em> mogła zajść komunikacja
potrzebny jest nadawca i odbiorca. Z punktu widzenia sieci
komputerowej, każdy host jest jednocześnie jednym i drugim. Jednak
patrząc na to ze strony obecnie omiawianego tematu, różnica między
Wiele serwerów określa się mianem <strong>usług sieciowych</strong>.
Często mówiąc o jakiś serwerze do słowa <em>serwer</em> dodaje się
protokół, który obsługuje. Jak możemy pamiętać np. z rozdziału 7,
- nie które serwery domyślnie nie są usługami sieciowymi (chociaż mogą,
- wystarczy odpowienio jes skonfigurować).
+ niektóre serwery domyślnie nie są usługami sieciowymi (chociaż mogą,
+ wystarczy odpowienio je skonfigurować).
</p>
<p>
Usługi sieciowe mają za zadanie udostępniać dane poprzez wybrane
protokoły SMTPS oraz POP3S lub IMAPS. Wiele różnych aplikacji
sieciowych może wykorzystywać różne protokoły lub samodzielnie
implementować format danych przesyłanych przez sieć. Nie mniej jednak
- wszystkie te protokoły rezydują w <strong>warstwie aplikacji</strong>
+ wszystkie te protokoły rezydują w <strong>warstwie aplikacji</strong>,
czwartej warstwie modelu TCP/IP.
</p>
<p>
W tym rozdziale nadal pozostaniemy w sieciach. Przeanalizujemy
działanie protokołu HTTP. Omówimy sobie usługę sieciową na podstawie
- SSH. Dowiemy się jak uruchamiane były, nie które specyficzne usługi
+ SSH. Dowiemy się jak uruchamiane były, niektóre specyficzne usługi
i jak są uruchamiane teraz. Sprawdzimy sobie narzędzia diagnostyczne,
które pozwolą nam na sprawdzenie dostępności usługi ale również
monitorowanie przesłanych przez nia i do niej danych. Na koniec
<p>
Na wstępie omówilśmy sobie co tak naprawdę znajduje się w warstwie
aplikacji. Aby była możliwość zapewnienia bezbłędnego działania
- wielu znanych protokołów, które no men omen są podstawą komunikacji
+ wielu znanych protokołów, które są podstawą komunikacji
w internecie, zespoły odpowiedzialne za implementacje tych standardów
- często umieszczają w swoich programach klienckich możliwośc analizy
+ często umieszczają w swoich programach klienckich możliwość analizy
przesyłanych danych. W tym podrozdziale skupimy się głównie na jednym
protokole i jednym narzędziu umożliwiającym śledzenie danych
przesyłanych za pomocą protokołu. Jednak w podrozdziale poświęconym
<p>
Pierwsze dwie linie, są to linie informujące nas o uzyskanym adresie
IP oraz o tym czy połącznie powiodło się. Jeśli tak jest, to wówczas
- wysyłany jest <strong>nagłówek</strong>, - w nagłówkach HTTP
+ wysyłany jest <strong>nagłówek</strong> - w nagłówkach HTTP
przeważnie znajdują się informacje kontrolne dla programów, które
będą zajmować się interpretowaniem treści przesłanej przez serwer.
- No właśnie. Można by na logikę rzecz ująć, że to przeglądarka powinna
+ No właśnie. Logiczne było by to, że przeglądarka powinna
pobrać żądaną stronę WWW. W rzeczywistości to klient przesyła
jedynie nagłówek z żądaniem. Przyglądając się pierwszej linii
nagłówka
<p>
Uwaga! Jeden serwer WWW, może utrzymać kilka jak nie kilkanaście lub
kilkadziesiąt różnych stron internetowych. Wszystko zależy od jego
- ustawień oraz wydajności sprzętowej, która go utrzymuje. Dlatego też
+ ustawień oraz konfiguracji sprzętowej, która go utrzymuje. Dlatego też
wiele stron może kierowanych pod jeden adres IP. Taka funkcjonalność
nazywa się <strong>hostingiem</strong>.
</p>
<p>
- W naszym przypadku również żądamy głównego pliku tego hostingu, w
+ W naszym przypadku również żądamy głównego pliku tego hostingu. W
nagłówku natomiast przekazujemy dane, które pomogą w uzyskaniu
żądanych przez nas danych. Jest to jedna z cech protokołu HTTP. Dane
(głównie do aplikacji, ponieważ statyczne strony rzadko interpretują
powszechny <em>wget</em> pozwalają na zmianę tej wartości, za pomocą
jednej opcji możemy podać się za np. program indeksujący jednej z
wyszukiwarek. Trzecim polem jest rodzaje danych jakie może
- zinterpretować, polecenie to służy głównie pobieraniu treści więc
+ zinterpretować, polecenie <em>curl</em> to służy głównie pobieraniu
+ treści więc
rzadko kiedy je interpretuje. Wyjątkiem może być omawiany przez nas
przykład. Ostatnim pole jest znak nowego wiersza, który kończy
nagłówek żądania. Teraz następuje jego przesłanie i oczekiwnaie na
</p>
<p>
W przypadku odpowiedzi jak możemy zauważyć przesyłanych jest wiele
- nagłówków przedstawiających pojedyńcze pola. Nie będe ich tutaj
+ nagłówków przedstawiających pojedyncze pola. Nie będe ich tutaj
wszystkich opisywał, jednak na uwagę zasługuję jedna informacja,
która została wcześniej pominięta. Otóż, w polu metody żądania lub
w pierwszym naglówku odpowiedzi znajduje się wykorzystywana w
- transmisjii wersja protokołu HTTP. Wersja 1.1 jest obecnie
+ transmisji wersja protokołu HTTP. Wersja 1.1 jest obecnie
standardem, jednak obecnie w stanie proponowanych standardów są
wersje 2 i 3. Seria nagłówków odpowiedzi kończy się w taki sam
sposób jak w przypadku nagłówka żądania, znakiem nowego wiersza.
wykorzystanie zapomnianego już programu <strong>Telnet</strong>.
<em>Telnet</em> kiedyś służył do tego do czego służy teraz
protokół SSH. Do zdalnego połączenia się z powłoką.
- Telnet sam w sobie również jest protokołem. Obecnie telnet rzadko
+ Telnet sam w sobie również jest protokołem, obecnie rzadko
jest spotykany w swojej pierwotnej formie, chyba że w postaci
lokalnej konsoli w systemach wbudowanych.
</p>
<pre class="code-block">
-xf0r3m@immudex:~$ telnet example.org 80 > telnet.log
+xf0r3m@immudex:~$ telnet example.org 80 > telnet.log
Trying 93.184.216.34...
Connected to example.org.
Escape character is '^]'
</pre>
<p>
Po wielokropku występuje już tylko kod HTML strony. Polecenie
- <code class="code-inline">telnet</code> wymaga aby port, pod który
+ <code class="code-inline">telnet</code> wymaga portu, pod który
należy się podłączyć. Aby otrzymać odpowiedź musimy metodę
(<code class="code-inline">GET</code>), ewentualne dane/żądany plik
(<code class="code-inline">/</code>), wersje protokołu
(<code class="code-inline">HTTP/1.1</code>) w drugiej lini nagłówka
należy podać nazwę hosta
(<code class="code-inline">Host: example.org</code>), ze względu na
- to aby serwer WWW wiedział z jakiej witry przesłać odpowiedź.
+ to aby serwer WWW wiedział z jakiej witryny przesłać odpowiedź.
</p>
<p>
Protokół jest może trochę mało interaktwny przy takim połączeniu, ale
</p>
<h2 id="10.2.networkservers">10.2. Serwery sieciowe</h2>
<p>
- W dystrybucjach Linuksa możemy napodkać wiele serwerów, nie które z
+ W dystrybucjach Linuksa możemy napodkać wiele serwerów, niektóre z
nich działają w oparciu o sieć i oczekują zdarzeń pochodzących od
- zdalnych użytkowników. Serwery wewnątrzsystemowe to dość niszowa
- grupa do których zalicza się tylko kilka demonów np. <em>cron</em>.
+ zdalnych użytkowników. Serwery wewnątrz systemów to dość niszowa
+ grupa, do których zalicza się tylko kilka demonów np. <em>cron</em>.
Dlatego w mowie potocznej przyjęło się, że mówiąc o serwerach mamy
na myśli serwery sieciowe. Poniżej znajduje się lista rodzajów
- wraz kilkoma przykładmi oprogramowania.
+ serwerów wraz kilkoma przykładmi oprogramowania.
</p>
<ul>
<li><strong>Serwery WWW:</strong> - <em>Apache</em>, <em>Nginx</em></li>
<li><strong>Serwery pocztowe:</strong> - SMTP: <em>Postfix</em>,
- <em>Sendmail</em>; POP3/IMAP: <em>dovecot</em></li>
+ <em>Exim</em>; POP3/IMAP: <em>dovecot</em></li>
<li><strong>Serwery plików:</strong> - CIFS (udziały Windows):
<em>Samba</em>; FTP: <em>vsftpd</em>;
NFS: <em>nfs-kernel-server</em></li>
<li><strong>Serwery zdalnego dostępu:</strong> - SSH:
<em>openssh</em>; RDP: <em>xrdp</em>.</li>
- <li><strong>Serwery wewnątrzsieciowe:</strong> - DHCP:
+ <li><strong>Serwery sieciowe:</strong> - DHCP:
<em>isc-dhcp-server</em>, <em>dnsmasq</em>; DNS:
<em>bind9</em>, <em>dnsmasq</em></li>
<li><strong>Usługa zdalnego wywołania procedury (RPC)</strong><li>
</ul>
<p>
Aby bardziej zaznajomić się z serwerami sieciowymi, omówimy sobie
- po krótce jeden z znich. Z powyższej listy najciekawszym z nich
- jest implementacja protokołu SSH od twórców innego Unix-a jakim jest
- OpenBSD - <strong>openssh</strong>. Implementacji protokołu SSH jest
+ po krótce jeden z nich. Z powyższej listy najciekawszym z nich
+ jest znana implementacja protokołu SSH - <strong>openssh</strong>.
+ Implementacji protokołu SSH jest
kilka, jednak ta jest w najpowszechniejszym użytku obecna jest nawet
w najnowszych wersjach MS Windows 10.
</p>
podanie nazwy użytkownika następnie adresu zdalnego hosta, z którym
chcemy się połączyć. Obie te wartości połączone są ze sobą za pomocą
<em>małpy</em> (<strong>@</strong>). Po poprawnym znalezieniu hosta
- i połączeniu z jego demon SSH (będzie o nim za chwile), zostaniemy
+ i połączeniu z jego demonem SSH (będzie o nim za chwile), zostaniemy
poproszeni o hasło. Jeśli łączymy się z serwerem po raz pierwszy,
Zostanie nam wyświetlona informacja na temat, że nie można
zweryfikować autentyczności hosta.
</p>
<pre class="code-block">
-1184JS:~$ ssh -p 2022 searx.morketsmerke.org
+xf0r3m@immudex:~$ ssh -p 2022 searx.morketsmerke.org
The authenticity of host '[searx.morketsmerke.org]:2022 ([82.117.231.222]:2022)' can't be established.
ECDSA key fingerprint is SHA256:ghhvjaz6T/qcsX9TiWN4UEV4fuiv6oqHxsD1bGB+40c.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
połączenie z tym serwerem, to na komputerze klienta nie ma jeszcze
danych autentykacji serwera (bez wdawania sie w zawiłe,
kryptograficzne szczegóły) wówczas musimy się upewnić we własnym
- zakresie czy jest rzeczywiście ten serwer z którym chcemy się
+ zakresie czy jest rzeczywiście ten serwer, z którym chcemy się
połączyć, a nie np. próba wyłudzenia hasła. Po wyświetleniu się tego
komunikatu zostaniemy zapytaniu czy chcemy kontynuować, jeśli
odpowiedź jest twierdząca to dane autentykacyjne serwera zostaną
<p>
Na powyższym przykładzie podałem opcję
<code class="code-inline">-p</code>, która pozwala na wkazanie
- nie stanadardowego portu (standardowy port to 22/TCP).
+ nie standardowego portu (standardowy port to 22/TCP).
Na tym przykładzie pominąłem, użytkownika. Jeśli go pominiemy
<em>ssh</em> jako użytkownika przyjmie tego, który wydał polecenie.
</p>
kilka maszyn i wpisywanie do każdej hasła może być męczące. SSH daje
nam możliwość uwierzytelnienia za pomocą kluczy kryptograficznych.
Nie będę zagłębiał się charkterystykę kluczy kryptograficznych, ale
- istnieje możliwość wygenerowania pary plików (klucz publiczne oraz
+ istnieje możliwość wygenerowania pary plików (klucza publicznego oraz
prywatnego), następnie załadowanie jednego z nich do maszyn, którymi
administrujemy. Podczas generowanie pary kluczy, będzie można podać
hasło chroniące klucz prywatny. Najlepiej, aby dodać to hasło.
</p>
<p>
Aby wygenerować klucze wydajemy następujące polecenie. Dodam tylko,
- że obecnie będziemy generować klucz algorytmu kryptograficznego
+ że obecnie będziemy generować klucze algorytmu kryptograficznego
<strong>RSA</strong>, są one domyślne dla SSH. Choć, nie które z
systemów mogą ich nie przyjmować i wymagać innych rozdzajów. Więcej
- na temat znajduje się na stronie podręcznika polecenia
- <strong>ssh-keygen</strong>.
+ na temat generowanie kluczy znajduje się na stronie podręcznika
+ polecenia <strong>ssh-keygen</strong>.
</p>
<pre class="code-block">
xf0r3m@immudex:~$ ssh-keygen
<em>-i</em> możemy skazać plik klucza publicznego
(plik z rozszerzeniem .pub). Natomiast jeśli chcemy się uwierzytelnić
za pomocą klucza to przy opcji <em>-i</em> polecenia <em>ssh</em>
- podajemy plik klucza bez rozszerzenia.
+ podajemy plik klucza prywatnego (bez rozszerzenia).
</p>
<h3 id="10.3.2.sshd">10.3.2. Demon serwera - sshd</h3>
<p>
Jak możemy zdawać sobie z tego sprawę z demona nie korzysta się jak
z aplikacji klienckiej. Nie wydajemy poleceń, żeby go uruchomić.
Oczywiście możemy to zrobić, ale normalnie tego się nie robi. Demony
- uruchamiane są za pomocą plików jednostek. Dlatego, że obsługa demona
+ uruchamiane są za pomocą plików jednostek (<em>systemd</em>). Dlatego,
+ że obsługa demona
różni się od obsługi klienta, w tym podrozdziale skupimy się głównie
zmianie konfiguracji demona <em>openssh</em>, jednak nie będziemy się
skupiać na wszystkich możliwych opcjach poniżej przedstawię tylko
bardzo potrzebny to możemy ustawić wartość tego pola na
<em>no</em>. Ze względu na to, że znana jest jego potoczna nazwa
często jego konto pada ofiarą ataków siłowych, skupionych na
- probach odgadnięcia hasła (Przeciwdziałanie tego typu atakom,
+ próbach odgadnięcia hasła (Przeciwdziałanie tego typu atakom,
zostanie przedstawione w tym rozdziale).</li>
<li><strong>PasswordAuthentication</strong> - zmiana wartości tej
opcji na <em>no</em> zabroni używania haseł do logowania się.
<strong>fail2ban</strong>. Jest to usługa monitorująca próby
uwierzytelnienia się i po przekroczeniu nie udanych prób odcinająca
dostęp do usługi na jakiś czas. Usługa ta opiera swoje działanie na
- dynamicznym tworzeniu i usuwaniu reguł zapory sieciowej.
+ monitorowaniu komunikatów diagnostycznych oraz dynamicznym tworzeniu i
+ usuwaniu reguł zapory sieciowej.
</p>
<p>
Uwaga! Na Debianie fail2ban nie posiada w swoich zależnościach
po nieudanej próbie uwierzytelnienia zrezygnować z dalszych prób,
ale jeśli spróbujemy ponownie przed upłynięciem tego czasu, to
dalej liczba prób pozostanie nie zmieniona (pozostaną 2 próby).</li>
- <li><strong>bantime</strong> - ilość czasu blokady dostępu do usługi.</li>
+ <li><strong>bantime</strong> - ilość czasu blokady dostępu do usługi.</li>
+ <li><strong>backend</strong> - źródło komunikatów logowania. Bez
+ tej wartości sama usługa <em>fail2ban</em> nie wystartuje.
+ <em>Systemd</em> może być dobry źródłem takich informacji.</li>
</ul>
<p>
Tyle informacji wystarczy demonowi <em>fail2ban</em> do monitorowania
</p>
<h3 id="10.3.4.othersshusage">10.3.4. Pozostałe metody użycia SSH</h3>
<p>
- Najpopularniejsza implementacj protokołu bezpiecznej powłoki, to
+ Najpopularniejsza implementacja protokołu bezpiecznej powłoki, to
nie tylko jakby sama nazwa wskazywała dostęp do powłoki systemu w
- bezpieczny sposób, ale także bezpieczne przesyłanie plików takich
- jak plików za pomocą SSH.
+ bezpieczny sposób, ale także bezpieczne przesyłanie plików za pomocą
+ SSH.
</p>
<p>
Pierwszym z nich jest <strong>SCP</strong>, który tak jakby zwykłym
<p>
Wraz z SCP dostępne jest bardziej interaktywne polecenie, które jest
też protokołem - <strong>SFTP</strong>. W informatyce jest wiele jest
- rozwiązań tego skrótu nas będzie interesować wyłącznie
+ rozwiązań tego skrótu, nas będzie interesować wyłącznie
<em>SSH File Transfer Protocol</em>. Połaczenie SFTP realizowane jest
na takiej same zasadzie jak SSH. Podajemy nazwę polecenia użytkownika
oraz host, po jego zgłoszeniu się podajemy hasło. Wówczas zostaniem