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.

Dyskoteka
źródło

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.

Khaled
źródło
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
Mikel
źródło
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