Tabele IP: zezwalaj tylko na dostęp SSH, nic więcej do środka


11

Jak skonfigurować IPTables, aby zezwalało tylko na SSH i nie pozwalało na żaden inny ruch przychodzący ani wychodzący ?

Jakieś środki ostrożności, które ktoś może polecić?

Mam serwer, który moim zdaniem został pomyślnie migrowany z GoDaddy i uważam, że nie jest już używany.

Ale chcę się upewnić tylko dlatego, że ... nigdy nie wiadomo. :)

Pamiętaj, że jest to wirtualny serwer dedykowany od GoDaddy ... To oznacza brak kopii zapasowej i praktycznie brak wsparcia.

Odpowiedzi:


13

Musisz tylko ustawić domyślną zasadę na DROP w łańcuchach INPUT i OUTPUT.

Aby zezwolić na SSH, potrzebujesz następujących poleceń:

$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Dwa ostatnie polecenia zezwalają na ruch zwrotny, ponieważ jest to wymagane przez niektóre aplikacje do poprawnego działania. Możesz ograniczyć dostęp SSH z określonego adresu IP za pomocą -s source_ipopcji.

Wykonywanie poleceń w kolejności pokazanej powyżej spowoduje zawieszenie bieżącej sesji SSH. Wynika to z tego, że polecenia iptables zaczynają obowiązywać natychmiast. Musisz je wykonać w skrypcie powłoki, aby uniknąć utraty możliwości połączenia się z komputerem podczas ich zdalnego uruchamiania.


4
--state RELATEDzgodnie z ostatnią regułą jest niepotrzebny; --state ESTABLISHEDwystarczy. Możesz także zezwolić na ruch DNS i prawdopodobnie powinieneś zezwolić na wszystko w interfejsie sprzężenia zwrotnego, w przeciwnym razie różne rzeczy mogą zachowywać się bardzo dziwnie.
— MadHatter,

@MadHatter: Tak, masz rację, szczególnie jeśli chodzi o sprzężenie zwrotne :)
— Khaled

Dzięki, czy można uzyskać od ciebie cały plik? tzn. coś, co mogę skopiować i wkleić bezpośrednio do / etc / sysconfig / iptables? Nie mam na to wystarczającego doświadczenia, aby zaufać mojej intuicji, aby dokonać odpowiednich zmian.
— Dyskoteka

2
ps. nawiązanie połączenia zostanie wymuszone po pierwszym poleceniu
— 956584

3
Naprawdę powinieneś zmienić kolejność tych poleceń. Linie polityki powinny pojawić się jako ostatnie. Każdy, kto skopiuje to na sesję ssh, zostanie HUPed i natychmiast wyłączony
— AndreasT

4

Coś takiego:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT  # or iptables -P INPUT DROP

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT # or iptables -P OUTPUT DROP

1
Myślę, że masz na myśli -i lonie -s lo; znowu, ESTABLISHEDjest to potrzebne tylko w przepisach państwowych i prawdopodobnie powinno --sport 22tam też być. Dlaczego wszyscy tak chętnie pozwalają RELATED?
— MadHatter

@MadHatter: About RELATED: Jest to przydatne do dopasowywania rzeczy, które nie są TCP, takich jak odpowiedzi ping i odpowiedzi DNS. Przynajmniej tak zawsze zakładałem.
— Steven poniedziałek

2
Wierzę, że nie będzie pasować do żadnego z nich. Byłoby to zgodne na przykład z odpowiedzią zabronioną administracyjnie przez hosta ICMP, ale jest to tak pomocne, jak to możliwe; a jeśli nie zostanie zakwalifikowany, będzie pasował do każdego powiązanego ruchu, nie tylko ruchu związanego z poprzednią linią.
— MadHatter

@MadHatter: Chyba będę musiał przeprowadzić kilka testów, aby sprawdzić, czy masz rację. Dziękuję za podważenie mojego założenia.
— Steven poniedziałek

Tak, stan ESTABLISHED jest wszystkim, co jest potrzebne do dopasowania odpowiedzi DNS UDP i odpowiedzi echa ICMP.
— Steven poniedziałek
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.