Nowe posty

Autor Wątek: Ocena zapory.  (Przeczytany 5771 razy)

kemsai

  • Gość
Ocena zapory.
« dnia: 2013-12-31, 16:02:05 »
Witam.
Na serwerze dedykowanym chciałbym mieć tylko pare portów odblokowanych. (Pomijając te które są odblokowane by się do serwera łączyć typu : 22)
Chciałbym ograniczyć prawie wszystko z zewnątrz poza portami dla admina i ograniczoną ilością połączeń na minute dla paru innych portów.
To co mi się udało znaleźć póki co.

#!/bin/sh 
iptables -F
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 120 --hitcount 20 -j DROP
iptables -I INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --update --seconds 120 --hitcount 20 -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m length --length 128:0xffff -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 20/minute -j ACCEPT
iptables -A INPUT  -p icmp -m limit --limit 10/second -j ACCEPT
iptables -A INPUT  -p icmp -j DROP
iptables -I INPUT -p tcp -s (IP bez limitu) --dport 80 -j ACCEPT
Proszę o pomoc bo nie chcę sobie zablokować maszyny. Ewentualnie prosiłbym o link jakiegoś innego sprawdzonego skryptu.

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil
Ocena zapory.
« Odpowiedź #1 dnia: 2013-12-31, 17:36:50 »
Jak chcesz blokować wszystko z zewnątrz, to ustaw polityke bezpieczeństwa na DROP, bo pakiety nie pasujące do reguł będą w domyślnej polityce akceptowane. Możesz zacząć od takich wyjsciowych reguł i dołożyć swoje.

#!/bin/sh

# Czyszczenie reguł

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Polityka bezpieczeństwa

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Reguły pętli zwrotnej

iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Reguły zezwalające na inicjowanie połączeń, połaczeń nawiązanych

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Do tego możesz dodać własne reguły dla połączeń przychodzących.

Po tej linijce

Cytuj
# Reguły zezwalające na inicjowanie połączeń, połaczeń nawiązanych
możesz dodawać własne reguły zapory, głównie te, które chcesz akceptować, bo reguły, które podałem, domyślnie blokują cały ruch sieciowy (szczególnie ruch przychodzący). Poniżej przykładowy skrypt.

#!/bin/sh

# Czyszczenie reguł

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Polityka bezpieczeństwa

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Reguły pętli zwrotnej

iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Reguły zezwalające na inicjowanie połączeń, połaczeń nawiązanych i przychodzących.

iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 120 --hitcount 20 -j DROP
iptables -A INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --update --seconds 120 --hitcount 20 -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m length --length 128:0xffff -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 20/minute -j ACCEPT
iptables -A INPUT  -p icmp -m limit --limit 10/second -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Cytuj
iptables -I INPUT -p tcp -s (IP bez limitu) --dport 80 -j ACCEPT
Jeśli ruch przychodzący ma być akceptowany z dowolnego IP, to nie musisz podawać źródła, iptables bez podanego źródła przyjmuje domyślnie -s 0/0.

Dodaj sobie jeszcze reguły dla SSH. Jeśli nie chcesz zablokować sobie dostępu do maszyny, przetestuj skrypt zanim dodasz go do skryptów startowych, po restarcie systemu reguły przestaną działać, w przeciwnym razie będziesz musiał się logować do panelu odzyskiwania/KVM, co u wielu dostawców może wiązać się z dodatkową opłatą. Ewentualnie przetestuj to na jakiejś testowej maszynie czy na VM.

kemsai

  • Gość
Ocena zapory.
« Odpowiedź #2 dnia: 2014-01-01, 17:04:09 »
Niestety uczyć się na swoich błędach nie mam czasu bo sobie już 4 razy zablokowałem maszynę i czekałem dosć długo na reboot, więc nie miałbym ktoś ochotę zrobić mi prostej zapory według moich wytycznych za trochę pieniążków? (nie jestem firmą, nie będzie to duża kwota, ale zapora też ma być prosta)
Jak by ktoś był zainteresowany to można  do mnie na gg napisać: 5627129

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil
Ocena zapory.
« Odpowiedź #3 dnia: 2014-01-01, 22:10:42 »
Chodzi o to, żebyś dodał sobie regułę dla SSH, abyś właśnie nie utracił dostępu do serwera. Cały skrypt wyglądałby tak.

#!/bin/sh

# Czyszczenie reguł

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Polityka bezpieczeństwa

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Reguły pętli zwrotnej

iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Reguły zezwalające na inicjowanie połączeń, połaczeń nawiązanych i przychodzących.

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 120 --hitcount 20 -j DROP
iptables -A INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --update --seconds 120 --hitcount 20 -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m length --length 128:0xffff -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 20/minute -j ACCEPT
iptables -A INPUT  -p icmp -m limit --limit 10/second -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

kemsai

  • Gość
Ocena zapory.
« Odpowiedź #4 dnia: 2014-01-02, 10:40:59 »
Ale tak ogólnie to czy blokada na porcie 7171 jest dobrze zrobiona? (w zamyśle ma ograniczać możliwość połączeń do paru razy na minute).

Edit. No ta zapora już działała ale port 80 i tak się wydawał zablokowany ( czyli w tych moich bazgrołach jest błąd)
I czy to normalne że jak później dałem iptables -F to serwer się zawiesił? o.O

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil
Ocena zapory.
« Odpowiedź #5 dnia: 2014-01-02, 12:18:49 »
Cytat: kemsai
I czy to normalne że jak później dałem iptables -F to serwer się zawiesił? o.O
Serwer nie, ale używając iptables -F wyczyściłeś sobie reguły, które zezwlały na ruch sieciowy, a dlatego że polityka bezpieczeństwa jest na DROP, to blokuje cały ruch sieciowy, o czym Cię informowałem, jednym słowem w taki sposób zablokowałeś sobie dostęp do serwera, dlatego uprzedzałem Cię, abyś nie zapomniał o regule dla SSH. Mogłeś zmienić regułkę w skrypcie i po prostu go przeładować, bo skrypt wyczyściłby stare reguły i ustawił nowe. Jjeśli nie dodałeś skrytpu do skryptów startowych, to wystarczy tylko uruchomić ponownie serwer.

kemsai

  • Gość
Ocena zapory.
« Odpowiedź #6 dnia: 2014-01-02, 13:40:48 »
Dziękuję bardzo za pomoc ogólnie. Już zaczynam czaić o co chodzi, ale jedna rzecz mnie zastanawia jeszcze czy to:
iptables -A INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --set 
iptables -A INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --update --seconds 120 --hitcount 20 -j DROP
Powinno być przed otworzeniem portu 7171 czy po?
Oraz czy interfesj eth0 powinien być podany czy raczej powinno być to zrobione ogólnie?

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil
Ocena zapory.
« Odpowiedź #7 dnia: 2014-01-03, 07:41:12 »
Cytat: kemsai
Już zaczynam czaić o co chodzi, ale jedna rzecz mnie zastanawia jeszcze czy to:
iptables -A INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --set 
iptables -A INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --update --seconds 120 --hitcount 20 -j DROP
Powinno być przed otworzeniem portu 7171 czy po?
Zamiast dodawać dwie reguły, możesz jedną regułą otwierać port i jednocześnie odrzucać niechciane połączenie. Na rzykład tak.

#!/bin/sh

# Czyszczenie reguł

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Polityka bezpieczeństwa

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Reguły pętli zwrotnej

iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Reguły zezwalające na inicjowanie połączeń, połaczeń nawiązanych i przychodzących.

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set --name WWW
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update ! --seconds 120 ! --hitcount 20 --name WWW -j ACCEPT
iptables -A INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --set --name DRM
iptables -A INPUT -p tcp --dport 7171 -i eth0 -m state --state NEW -m recent --update ! --seconds 120 ! --hitcount 20 --name DRM -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m length ! --length 160 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 20/minute -j ACCEPT
iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #Ta reguła jest zbędna, bo wyżej masz regułę zezwalającą na ruch na porcie 80

# Wszelkie reguły zezwalające na ruch przychodzący, należy podawać powyżej poniższych reguł.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Zaporę najlepiej testuj sobie na wirtualnej maszynie, a jak będziesz testował na serwerze, to nie zablokuj sobie dostępu poprzez ponowne wyczyszczenie reguł poleceniem iptables -F. Wszelkie zmiany wprowadzaj najlepiej w skrypcie i po wprowadzeniu zmian, przeładuj skrypt, on wyczyści wszystkie stare reguły i ustawi nowe, w ten sposób unikniesz zablokowania sobie dostępu do serwera.

Cytuj
Oraz czy interfesj eth0 powinien być podany czy raczej powinno być to zrobione ogólnie?
To jak już uważasz, jeśli chcesz aż tak szczegółowo filtrować, to możesz. Jeśli masz na serwerze tylko jeden interfejs, no to raczej przez inny pakiet nie wejdzie. Jak masz jakieś łącza alternatywne i rozkładasz obciążenie na dwie trasy, no to część pakietów może być odrzucana.

kemsai

  • Gość
Ocena zapory.
« Odpowiedź #8 dnia: 2014-01-03, 13:25:26 »
Dzięki wielkie za pomoc! Już działa tak jak chciałem, a przy okazji trochę już ogarniam podstawy.

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil
Ocena zapory.
« Odpowiedź #9 dnia: 2014-01-03, 18:20:32 »
Nie ma sprawy ;)

kemsai

  • Gość
Ocena zapory.
« Odpowiedź #10 dnia: 2014-01-06, 10:25:26 »
A jednak mam jeszcze w ty temacie 1 pytanie. Mianowicie na porcie 7171 w szczególności, niektórzy ludzie mają problem z połączeniem się. Czasami im pomaga restart komputera podobno, lecz tak nie może raczej być.. Używam w sumie tego skryptu co powyżej, z otwartymi jeszcze portami dla ssh i pulpitu zdalnego. Co może być przyczyną?

P.S Pomyślałem sobie że jak zrobię to w 1 lini to może pomoże, niestety Twój pomysł nie może być zrealizowany, gdyż iptables wypluwa że --seconds i --hitcount nie mogą być odwrócone.

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil
Ocena zapory.
« Odpowiedź #11 dnia: 2014-01-06, 14:29:50 »
Ograniczenia na tym porcie czy 80 mogą skutkować właśnie takimi sytuacjami, może zamiast odrzucać połączenie z danego IP przekraczające ustalone wartości. Spróbuj po prostu chwilowo zablokować i zresetuj licznik, czyli zamiast -m rcenet --update, użyj -m recent --rcheck. Gdy połączenie z danego IP będzie przekraczało ustalone limity, połączenie zostanie zablokowane, a po upływie 120s licznik zostanie wyzerowany. Myślę, że powinno to rozwiązać problem z resetowanie komputerów użytkowników w celu uzyskania połączenia.