iptables blokuje dostęp do portu 8000 z wyjątkiem adresu IP

80

Nigdy nie używałem iptables, a dokumentacja online wydaje się nieco niejasna.

Chciałbym zablokować wszystkie żądania do portu 8000 na moim serwerze z wyjątkiem tych pochodzących z określonego adresu IP. Jak to zrobić używając iptables?

Wola
źródło
2
//, Czy byłbyś tak uprzejmy, aby udostępnić link do niejasnej dokumentacji?
Nathan Basanese

Odpowiedzi:

149

To pytanie powinno dotyczyć błędu serwera . Niemniej jednak poniższe czynności powinny załatwić sprawę, zakładając, że mówisz o TCP, a adres IP, na który chcesz zezwolić, to 1.2.3.4:

iptables -A INPUT -p tcp --dport 8000 -s 1.2.3.4 -j ACCEPT
iptables -A INPUT -p tcp --dport 8000 -j DROP
Jon Bright
źródło
3
Jak zabrałbyś się do cofnięcia tego ograniczenia IP / portu, które tutaj ustawiłeś? (w przypadku, gdy chcę to cofnąć w przyszłości)
tester
4
tester, aby usunąć rzeczy, zapoznaj się z tym - stackoverflow.com/questions/10197405/…
Quest Monger
2
Wiem, że to jest stosunkowo stare i to całkowicie przybite, czego potrzebowałem. A skoro i tak odpowiedź została zaakceptowana, jak zrobić to samo z określonym zakresem adresów IP? Dzięki! :)
jagc
1
@JiegoCordoviz Możesz dodać maskę do adresu źródłowego: „-s 1.2.3.0/24” będzie akceptować wszystko, co zaczyna się od „1.2.3.”. Wyszukaj „kalkulator maski sieci”, jeśli masz zakres i chcesz obliczyć maskę sieci.
Jon Bright,
17

Inną alternatywą jest;

sudo iptables -A INPUT -p tcp --dport 8000 -s ! 1.2.3.4 -j DROP

Miałem podobny problem, że wirtualna maszyna z mostkiem 3 po prostu potrzebuje dostępu do siebie z inną kombinacją, więc przetestowałem to polecenie i działa dobrze.

Edytować**

Zgodnie z komentarzem Fernando i ten link wykrzyknik ( !) zostanie umieszczony przed -sparametrem niż :

sudo iptables -A INPUT -p tcp --dport 8000 ! -s 1.2.3.4 -j DROP
HRgiger
źródło
1
Wykrzyknik ( !) musi teraz zostać umieszczony przed -sparametrem: sudo iptables -A INPUT -p tcp --dport 8000 -s ! 1.2.3.4 -j DROP.
Fernando Silveira
Nie jestem pewien, co robi tutaj wykrzyknik. Czy to lepsze niż zaakceptowana odpowiedź?
aexl
@aexl prawie to samo, z wyjątkiem pojedynczej linii
HRgiger
5

Zawsze możesz użyć iptables, aby usunąć reguły. Jeśli masz wiele reguł, po prostu wyślij je za pomocą następującego polecenia.

iptables-save > myfile

viedytować je z wiersza komend. Po prostu użyj „dd”, aby usunąć linie, których już nie potrzebujesz.

iptables-restore < myfile and you're good to go.  

PAMIĘTAJ, ŻE JEŚLI NIE SKONFIGURUJESZ SWOJEGO SYSTEMU OPERACYJNEGO, ABY ZAPISAĆ REGULAMIN W PLIKU, A NASTĘPNIE ZAŁADUJ PLIK PODCZAS URUCHAMIANIA, TWOJE REGUŁY ZOSTANĄ UTRACONE.

RecentCoin
źródło
3
W Debianie nie ma iptables-load, ale iptables-restore iptables-restore < myfile// wiki.debian.org/iptables
Fedir RYKHTIK