Firewall dla stanowiska ko

Masz problemy z siecią bądź internetem? Zapytaj tu
dhapollo
Beginner
Posty: 168
Rejestracja: 12 czerwca 2010, 14:10
Lokalizacja: Warszawa

Firewall dla stanowiska końcowego

Post autor: dhapollo »

Witam.
Potrzebuję napisać zaporę dla stanowiska końcowego, tak, aby działał tylko internet i abym miał dostęp do niego przez ssh.

Wymyśliłem sobie taki skrypt:

Kod: Zaznacz cały

#!/bin/sh

#firewall dla [b]użytkownika[/b]


###### Kasujemy wcześniejsze wpisy
iptables -F
iptables -X
###### Blokujemy wszystko
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

###### Pozwalamy na wszystko dla localhost
iptables -A INPUT -i lo -j ACCEPT

###### Akceptujemy połączenia już ustanowione w obu łańcucha[B]ch[/B]  OUTPUT i INPUT:.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT

##### Otwieramy porty przychodzące
##      SSH
iptables -A INPUT -p tcp -s 192.168.125.101 --dport 22 -j ACCEPT

##### Otwieramy porty wychodzące


##### blokujemy sygnały ping

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP 


Moje pytania to:
  1. Czy skrypt spełni moje oczekiwania?
  2. Dałem:

    Kod: Zaznacz cały

    iptables -P OUTPUT DROP
    to jak otworzyć porty do www, ponieważ wpis:

    Kod: Zaznacz cały

    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
    nie za bardzo mi się podoba, ponieważ, akceptuje wszystkie nowe, co za tym idzie pierwsza reguła przestaje mieć sens. Czy dobrze rozumiem?
woitek.d
Posty: 23
Rejestracja: 08 sierpnia 2010, 14:49

Post autor: woitek.d »

Nie jestem specjalistą ale ja bym to zrobił tak:
  1. Odblokuj port 80, 53, 68 ustawiając opcję OUTPUT.
  2. Odnośnie Twojego ostatniego pytania to, tak, dobrze.
  3. To z wysyłaniem sygnału ping, to chyba można usunąć bo i tak wszystko blokujesz domyślnie.
  4. Na localhost jeszcze chyba musisz ustawić opcję OUTPUT jako accept.
Awatar użytkownika
Yampress
Administrator
Posty: 6422
Rejestracja: 09 sierpnia 2007, 21:41
Lokalizacja: PL

Post autor: Yampress »

Kod: Zaznacz cały

iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
do tego dodaj wpuszczanie na wejście (ang. input) portu 22 i powinno działać.
dhapollo
Beginner
Posty: 168
Rejestracja: 12 czerwca 2010, 14:10
Lokalizacja: Warszawa

Post autor: dhapollo »

Yampress chodzi mi o zablokowanie wyjścia i otwarcie tylko wymaganych portów.

Jakie porty otworzyć aby działały tylko strony www?
Awatar użytkownika
Yampress
Administrator
Posty: 6422
Rejestracja: 09 sierpnia 2007, 21:41
Lokalizacja: PL

Post autor: Yampress »

http https.
Ale czemu chcesz zablokować wyjście?

Kod: Zaznacz cały

iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -i lo -j ACCEPT
Swoje porty wpuszczasz jako INPUT (sshd, http ,https).
dhapollo
Beginner
Posty: 168
Rejestracja: 12 czerwca 2010, 14:10
Lokalizacja: Warszawa

Post autor: dhapollo »

A dlaczego wyjcie ma być otwarte?

Jak otworze porty 53, 80, 433, 22 to nie mam internetu (nie otwierają się strony www) jaki port/protokół należy otworzyć?
Awatar użytkownika
Unit
Beginner
Posty: 356
Rejestracja: 27 marca 2007, 09:39

Post autor: Unit »

dhapollo pisze: A dlaczego wyjcie ma być otwarte?
Ponieważ jak się łączysz --dportem 80 to --sport na OUTPUT ustawia się losowo coś między 1024-65536, więc albo musisz mieć OUTPUT na ACCEPT, albo musisz puścić dla OUTPUT --dport, który tam chcesz (22,53,80,443):

Kod: Zaznacz cały

-A INPUT  -p tcp -s 0/0 --sport 22 -j ACCEPT
-A OUTPUT -p tcp -d 0/0 --dport 22 -j ACCEPT
Awatar użytkownika
Yampress
Administrator
Posty: 6422
Rejestracja: 09 sierpnia 2007, 21:41
Lokalizacja: PL

Post autor: Yampress »

No właśnie. Tak jak napisał Unit, dlaczego?


Wykonaj sobie polecenie na stacji roboczej:

Kod: Zaznacz cały

netstat -atn

A 43 w jakim celu otwierasz i 53? Na 53 pracuje serwer DNS? Którego nie masz uruchomionego.

Kontynuując, aby wykonać zapytania, robisz to co napisał Unit i korzystasz z pcji OUTPUT i wpuszcza już nawiązane połączenia na wejście (INPUT)

Kod: Zaznacz cały

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Bo te trzy wpisy są ze sobą powiązane.

Kod: Zaznacz cały

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
przeanalizuj dlaczego. Co dokładnie robi stan ESTABLISHED,RELATED?

Dodatkowo nauczyłbym się jaka usługa działa na jakim porcie: x<1000?
dhapollo
Beginner
Posty: 168
Rejestracja: 12 czerwca 2010, 14:10
Lokalizacja: Warszawa

Post autor: dhapollo »

Yampress tak zgadza się port 53 to obsługa DNS, ja nie mam takiej usługi ale przecież korzystam z DNS wpisując http://www.wp.pl zapytanie wędruje do serwra DNS który to zamienia na IP przez co cieszymy się wczytana stroną www. Zablokowanie portu 53 powinno uniemożliwić rozpoznanie nazwy domenowej. Czy dobrze rozumiem?

Z 43 to pomyłka w "druku" miało być 433 chodziło mi o https i już to poprawiam.
Awatar użytkownika
Yampress
Administrator
Posty: 6422
Rejestracja: 09 sierpnia 2007, 21:41
Lokalizacja: PL

Post autor: Yampress »

Dalej nie rozumiesz jak to działa.

Za o co napisałeś odpowiada to:

Kod: Zaznacz cały

iptables -P OUTPUT ACCEPT
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Czyli, wypuszcza swobodnie na wyjście (OUTPUT) i wpuszcza wszystkie połączenia na wejście (INPUT) wracające (wychodzące/nawiązane) z wyjścia.

Zamknij ten port 53 i zobaczysz, że nadal to będzie działać (mając te 2 linijki powyżej cytowane). Port 53 otwieramy tylko jeśli mamy uruchomioną usługę DNS.

Podstawy działania sieci tcp/ip też by się przydało poznać.
ODPOWIEDZ