Jak zablokować wszystkie porty oprócz 80.443 za pomocą iptables? [duplikować]


13

To pytanie ma już odpowiedź tutaj:

Blokowanie wszystkich portów (wejściowych i wyjściowych) jest łatwe, ale jest trudne ze słowem „oprócz”. Nie znam żadnych reguł, które spełniają ten warunek.

PS: Wiem, że to pytanie nie jest niczym nowym. Ale tak naprawdę nie znalazłem nic, co mogłoby pomóc. Więc pomóżcie mi proszę!


Nie możesz zamknąć WSZYSTKICH portów, a następnie OTWORZYĆ pojedynczy port w następnej linii?
sinni800

Robię to: iptables -P KROK WEJŚCIA iptables -P KROK WYJŚCIA iptables -P KROK DO PRZODU iptables -I WEJŚCIE -p tcp --port 80 -j AKCEPTUJ ------ To nie działa!
user71169,

Odpowiedzi:


24

Po pierwsze ! jest symbolem NOT.

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

Po drugie, reguły, które napisałeś, mogą nie przynieść oczekiwanych rezultatów. Upuszczasz wszystko, łącznie z odpowiedzią na połączenie na porcie 80. Dlatego nie będziesz w stanie połączyć się z nim na potrzeby serwera WWW.

Reguły te zezwalają na POWIĄZANE i USTANOWIONE połączenia, więc serwer sieciowy powinien działać, jeśli tak naprawdę próbujesz to zrobić.

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT  --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP

2
Nie powinno !się tak uciekać \!, jeśli używana jest powłoka Bash?
Cristian Ciupitu,

@CristianCiupitu Nie, nie powinno być konieczne ucieczka. Być może dzieje się coś dziwnego, ale po mojej uderzeniu nie muszę przed tym uciekać.
cybernard

Sprawdziłem wyjście „iptables -nvL”, aby zobaczyć pakiety w połączeniu. Wydaje się, że działa, twoje zasady. Ale nie mogę sprawdzić, czy to naprawdę działa, czy nie, z wyjątkiem korzystania z niektórych aplikacji korzystających z tych portów. Aplikacja korzystająca z portu nie oznacza, że ​​używa tylko tego portu. Czy ktoś sugeruje sprawdzenie?
user71169,

1
@cybernard, tak, masz rację. !Nie trzeba uciekać z równiny . Przepraszam za fałszywy alarm.
Cristian Ciupitu

3
@MohammadShahid Reguły nie są automatycznie trwale uruchomione, zrestartują się i znikną, możesz się zalogować. Jeśli chcesz zachować połączenie ssh, musisz dodać 22 do listy portów.
cybernard

5
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

To powinno dać ci to, czego potrzebujesz


3
Pamiętaj, że jeśli jesteś podłączony przez SSH, powinieneś otworzyć port TCP 22
Maximilian Ast

Tak, nie zapomnij o swoim porcie SSH, prawdopodobnie powinieneś dodać swój port SSH, zanim ustawisz domyślną zasadę na usunięcie. ;)
James Little

3

Możesz ustawić domyślną akcję na DROP, a następnie utworzyć reguły wyjątków, aby zezwolić na 80 i 443, na przykład:

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT       # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT      # HTTPS

iptables będzie przeglądać listę „wyjątków”, dopóki nie znajdzie pasującego. Następnie wykona akcję określoną przez -jparametr (w tym przypadku AKCEPTUJ). Jeśli nie znajdzie dopasowania, wróci do domyślnych zasad i upuści pakiet.

Pamiętaj, że dzięki temu obejściu wszystkie subdomeny zostaną zablokowane. Na przykład dzięki tej metodzie będzie działać poprawnie na www.mydomain.com, ale twoja subdomena powiedzmy, że www.sub.mydomain.com nie otworzy się na błędy DNS.


To powinna być praca, ale nie jest. Jestem taki zdezorientowany.
user71169,

Co nie działa? Czy dopuszcza wszystkie przychodzące pakiety, czy nie? Czy możesz zaktualizować swoje pytanie o wynik działania iptables -nvL?
mtak

Dlaczego głosowanie w dół? Mam to uruchomione w produkcji, więc jestem w 100% pewien, że to działa.
mtak

Przepraszam! To nie ja, ktoś to zrobił :)) Tak, na pewno tak jak ja, ale to nie działa. Dlatego muszę zadać pytanie.
user71169,

2
Nie rób tego więcej ssh.
Ashesh
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.