Czy lepiej ustawić -j REJECT lub -j DROP w iptables?

33

Istnieje przykład reguł iptables na archlinux wiki:

# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sun Mar 17 14:21:12 2013

Kilka dni temu mój przyjaciel zapytał mnie, dlaczego istnieją REJECTtrzy ostatnie zasady. Powiedział mi, że DROPzamiast tego powinno być , i wspomniał coś o lepszym bezpieczeństwie w przypadku DROP.

Mam więc dwa pytania:

  1. Co robią te trzy zasady?

  2. Czy robi to jakąkolwiek różnicę, kiedy tam DROPwprowadzam REJECT --reject-with? Jeśli tak, jaka jest różnica?

Michaił Morfikow
źródło
3
Podobne pytanie dotyczące bezpieczeństwa informacji : Odrzucić pakiety IP z błędem ICMP, czy po prostu je upuścić?
Gilles „SO- przestań być zły”

Odpowiedzi:

33

Co robią te trzy zasady?

Te 3 zasady wydają się dość oczywiste:

  1. Odrzucaj przychodzące pakiety UDP za pomocą komunikatu ICMP „port nieosiągalny”
  2. Odrzucaj przychodzące pakiety TCP za pomocą „tcp reset”
  3. Odrzuć przychodzące pakiety (dowolnego innego protokołu) z komunikatem ICMP „protokół nieosiągalny”

Jeśli szukasz więcej szczegółów (na temat pakietów UDP / TCP, ICMP), musisz zagłębić się w dokumenty sieciowe i być może man iptablesrównież.

Czy robi to jakąkolwiek różnicę, kiedy umieszczam tam DROP na miejscu REJECT --reject-with? Jeśli tak, czy ktoś mógłby mi wyjaśnić różnicę, naprawdę to docenię.

To robi różnicę. I wbrew powszechnemu przekonaniu, DROPnie daje większego bezpieczeństwa niż REJECT. Utrudnia to legalnym użytkownikom i nie zapewnia żadnej ochrony przed złośliwymi. Ten post szczegółowo wyjaśnia uzasadnienie:

http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject

Częstym powodem używania DROP zamiast REJECT jest unikanie przekazywania informacji o tym, które porty są otwarte, jednak odrzucanie pakietów daje dokładnie tyle samo informacji, co odrzucenie.

Dzięki REJECT wykonujesz skanowanie i dzielisz wyniki na „połączenie nawiązane” i „połączenie odrzucone”.

W DROP dzielisz wyniki na „połączenie ustanowione” i „limit czasu połączenia”.

Najbardziej trywialny skaner użyje połączenia „połącz” systemu operacyjnego i poczeka, aż jedna próba połączenia zostanie zakończona, przed rozpoczęciem kolejnej. Ten typ skanera zostanie znacznie spowolniony przez upuszczanie pakietów. Jeśli jednak atak ustawia limit czasu 5 sekund na próbę połączenia, możliwe jest przeskanowanie każdego zarezerwowanego portu (1..1023) na komputerze w zaledwie 1,5 godziny. Skany są zawsze zautomatyzowane, a atakujący nie dba o to, aby wynik nie był natychmiastowy.

Bardziej wyrafinowany skaner sam wysyła pakiety, zamiast polegać na implementacji TCP systemu operacyjnego. Takie skanery są szybkie, wydajne i obojętne na wybór REJECT lub DROP.

WNIOSEK

DROP nie stanowi skutecznej bariery dla wrogich sił, ale może znacznie spowolnić aplikacje uruchamiane przez legalnych użytkowników. DROP zwykle nie powinien być używany.

Przestań krzywdzić Monikę
źródło
@janos - czy mógłbyś napisać nieco więcej o tym, co faktycznie dzieje się, gdy pakiet osiąga każdą z trzech reguł?
Michaił Morfikow
3
@Kiwy - Przeczytaj link i spróbuj sam. DROP nie daje większego bezpieczeństwa niż REJECT. Utrudnia to legalnym użytkownikom i nie zapewnia żadnej ochrony przed złośliwymi. Wynika to z faktu, że prawowici użytkownicy cierpią z powodu wolnego połączenia podczas oczekiwania na przekroczenie limitu czasu połączenia, a crackerzy konfigurują swoje narzędzia tak, aby nie czekały na przekroczenie limitu czasu. fakt, że połączenie jest powolne (z powodu oczekiwania na przerwę) pokazuje, że twój serwer jest tam i jest zapory ogniowej.
Panther
2
Nie zgadzam się z tym wnioskiem. Reject generuje odpowiedź ICMP, którą można analizować. Na podstawie tej analizy dobre silniki ataku mogą wyprowadzić używany system operacyjny. Tak więc w systemie, w którym wszystkie porty są znane, drop może być lepszy. Dotyczy to serwerów w środowisku produkcyjnym.
Nils,
1
Firewall, który przekazuje tylko niektóre porty, jest jeszcze lepszy. DROP a REJECT to nie to samo, co absolutnie brak usługi prowadzącej na pierwszym miejscu. Wiele skanerów portów oznacza hosta jako potencjalny cel przyszłych skanowań w nadziei na złapanie zapory sieciowej, jeśli znajdą tam ODRZUCENIA lub UPADKI, ponieważ oba można wykryć z zewnątrz. chiark.greenend.org.uk/~peterb/network/drop-vs-reject
Dagelf
1
Zauważ, że cytowany tekst ma jeszcze jeden akapit, aktualizację, która mówi, że DROP jest lepszy, jeśli masz atak DDoS, co jest stosunkowo rzadkie, ale kiedy tak się dzieje, prawdopodobnie dobrze jest go mieć ... co myślisz?
Alexis Wilke,