Muszę skonfigurować mój komputer tak, aby zezwalał na ruch HTTP tylko do / z serverfault.com. Wszystkie inne strony internetowe, porty usługowe są niedostępne. Wymyśliłem te zasady iptables:
#drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP
#Now, allow connection to website serverfault.com on port 80
iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#allow loopback
iptables -I INPUT 1 -i lo -j ACCEPT
Nie działa całkiem dobrze:
Po upuszczeniu wszystkiego i przejściu do reguły 3:
iptables -A WYJŚCIE -p tcp -d serverfault.com --port 80 -j AKCEPTUJ
Otrzymuję ten błąd:
iptables v1.4.4: host/network `serverfault.com' not found
Try `iptables -h' or 'iptables --help' for more information.
Czy uważasz, że ma to związek z DNS? Czy powinienem na to pozwolić? Czy powinienem po prostu wpisać adresy IP do reguł? Czy uważasz, że to, co próbuję zrobić, można osiągnąć za pomocą prostszych zasad? W jaki sposób?
Byłbym wdzięczny za wszelką pomoc lub wskazówki w tym zakresie. Wielkie dzięki!
Odpowiedzi:
W przypadku reguł IPTables kolejność ma znaczenie. Reguły są dodawane i stosowane w kolejności. Ponadto podczas ręcznego dodawania reguł są one natychmiast stosowane. Tak więc w twoim przykładzie wszelkie pakiety przechodzące przez łańcuch INPUT i OUTPUT zaczynają być upuszczane, gdy tylko zostaną ustawione domyślne zasady. Nawiasem mówiąc, właśnie dlatego otrzymałeś komunikat o błędzie. To się dzieje:
Chociaż opcje źródła / miejsca docelowego akceptują nazwy hostów, jest to zdecydowanie odradzane. Aby zacytować stronę podręcznika,
Slillibri uderzył w gwoździe w głowę, na co w swojej odpowiedzi przegapiłeś zasadę AKCEPTACJI DNS. W twoim przypadku nie będzie to miało znaczenia, ale ogólnie ustawię domyślne zasady później. Ostatnią rzeczą, jakiej chcesz, jest praca zdalna i zezwolenie SSH po włączeniu domyślnej odmowy.
Ponadto, w zależności od dystrybucji, powinieneś być w stanie zapisać reguły zapory, tak aby były one automatycznie stosowane w momencie rozpoczęcia.
Wiedząc o tym i zmieniając skrypt, oto co poleciłbym.
źródło
iptables -P
instrukcje w dowolnym miejscu skryptu, ponieważ zasady łańcucha są stosowane tylko wtedy, gdy pakiety „wypadają” z końca łańcucha. Zazwyczaj umieszczam instrukcje polityki (zwykleDROP
polityki) na górze moich skryptów iptables.sudo iptables -I OUTPUT 1 -o lo -j ACCEPT
. Czy nie należy tego dodawać?Dodaj
aby umożliwić wyszukiwanie DNS.
źródło
Tego rodzaju wymagania można lepiej obsłużyć za pomocą internetowego serwera proxy i / lub filtra. W tym celu można skonfigurować Dansgaurdian. Musisz użyć reguł NAT, aby wymusić ruch przez filtr.
Użycie iptables do filtrowania pozwoli na dostęp do stron dostępnych z odpowiednich adresów IP. Jest to zwykle niewielki podzbiór całej sieci.
źródło
iptables
jest prawdopodobnie niewłaściwym narzędziem do użycia tutaj, ponieważ nie radzi sobie szczególnie dobrze z nazwami DNS. Serwer proxy sieci Web z odpowiednimi ustawieniami filtrów jest znacznie lepiej dopasowany.Obawiam się, że iptables nie działa na tym poziomie, zależy tylko na adresie IP, a nie na nazwie hosta. Jeśli chcesz zablokować dostęp do innych nazw wirtualnych hostów na tym samym IP, musisz spojrzeć na umieszczanie plików .htaccess.
źródło
Musisz to skonfigurować na swoim serwerze internetowym. iptables to filtr pakietów. Transakcje HTTP wysyłają nazwę strony (tj. Przepełnienie stosu) jako część ładunku TCP (tj. Nie jako część nagłówka TCP, który łatwo odczytuje iptables).
Biorąc to pod uwagę i fakt, że transakcje HTTP prawie na pewno zostaną rozłożone na wiele pakietów (tj. Nie można po prostu dopasować ciągu w nagłówku HTTP), jest to znacznie lepiej obsługiwane przez konfigurację serwera WWW lub serwera proxy z przodu z tego.
Przydałoby się znać uzasadnienie tego, istnieje kilka innych alternatyw:
źródło