Możesz ograniczyć, które hosty mogą się łączyć, konfigurując opakowania TCP lub filtrując ruch sieciowy (firewall) za pomocą iptables . Jeśli chcesz używać różnych metod uwierzytelniania w zależności od adresu IP klienta, zamiast tego skonfiguruj demona SSH (opcja 3).
Opcja 1: Filtrowanie za pomocą IPTABLES
Reguły Iptables są oceniane w kolejności, aż do pierwszego dopasowania.
Na przykład, aby zezwolić na ruch z sieci 192.168.0.0/24 i w inny sposób ograniczyć ruch (do portu 22). TheDROPZasada nie jest wymagane, jeśli iptables polityka domyślna jest skonfigurowany DROP.
iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
Możesz dodać więcej reguł przed regułą upuszczania, aby dopasować więcej sieci / hostów. Jeśli masz wiele sieci lub adresów hostów, powinieneś użyć modułu ipset . Jest równieżmoduł iprange , który pozwala na użycie dowolnego zakresu adresów IP.
Iptables nie są trwałe podczas ponownego uruchamiania. Musisz skonfigurować jakiś mechanizm, aby przywracał iptables podczas uruchamiania.
iptablesdotyczą tylko ruchu IPv4. W systemach, w których ssh nasłuchuje adresu IPv6, można wykonać niezbędną konfiguracjęip6tables .
Opcja 2: Korzystanie z opakowań TCP
Możesz także skonfigurować, które hosty mogą się łączyć za pomocą opakowań TCP. W przypadku opakowań TCP oprócz adresów IP można także używać nazw hostów w regułach.
Domyślnie odmawiaj wszystkim hostom.
/etc/hosts.deny:
sshd : ALL
Następnie wyświetl listę dozwolonych hostów w pliku hosts.allow. Na przykład, aby zezwolić sieci 192.168.0.0/24 i localhost .
Możesz skonfigurować demona ssh w sshd_config, aby używał innej metody uwierzytelniania w zależności od adresu klienta / nazwy hosta. Jeśli chcesz tylko blokować łączenie się innych hostów, powinieneś zamiast tego użyć iptables lub TCP.
Najpierw usuń domyślne metody uwierzytelniania:
PasswordAuthentication no
PubkeyAuthentication no
Następnie dodaj żądane metody uwierzytelniania po Match Addresskońcu pliku. Umieszczenie Matchna końcu pliku jest ważne, ponieważ wszystkie wiersze konfiguracji po nim są umieszczane wewnątrz bloku warunkowego do następnego Matchwiersza. Na przykład:
Match Address 127.0.0.*
PubkeyAuthentication yes
Inni klienci nadal mogą się łączyć, ale logowanie się nie powiedzie, ponieważ nie ma dostępnych metod uwierzytelniania.
Co powiesz na dodanie dyrektywy ListenAddress w / etc / ssh / sshd_config?
jerome
Jest to możliwe w określonych sytuacjach (na przykład słuchanie prywatnego adresu sieciowego), w zależności od konfiguracji sieci i hostów, na które chcesz zezwolić.
sebasth
2
Dodatkowo, sshd_config może ustawiać filtrowanie za pomocą dyrektywy AlowUsers, a także klucze autoryzowane można ustawić za pomocą opcji „z adresu IP lub podsieci”, aby również filtrować.
tonioc
@tonioc Świetne rozwiązanie dla mojego przypadku użycia. Rozwiń tę sugestię na odpowiedź.
simlev
jeśli masz NIC 4 porty każdy idzie do innej sieci, to domyślnie #ListenAddress ::w /etc/ssh/sshd_configpowie serwer SSH, aby zaakceptować przychodzące z jednego z tych sieci. W przeciwnym razie wykonaj, ListenAddress <ip address>gdzie <ip address>są te porty karty sieciowej, które mają być dozwolone. Mój eth0jest 192.168.3.4zatem ListenAddress 192.168.3.4skutkuje SSH tylko pracujące w sieci 192.168.3.4, który jest na eth0; i eth1 eth2 eth3 jest odrzucany.
ron
5
Oto kilka dodatkowych konfiguracji demona SSH w celu rozszerzenia poprzedniej odpowiedzi:
Dodaj filtrowanie użytkowników z AllowUsersopcją w sshd_configpliku:
/etc/ssh/sshd_config
Odpowiedzi:
Możesz ograniczyć, które hosty mogą się łączyć, konfigurując opakowania TCP lub filtrując ruch sieciowy (firewall) za pomocą iptables . Jeśli chcesz używać różnych metod uwierzytelniania w zależności od adresu IP klienta, zamiast tego skonfiguruj demona SSH (opcja 3).
Opcja 1: Filtrowanie za pomocą IPTABLES
Reguły Iptables są oceniane w kolejności, aż do pierwszego dopasowania.
Na przykład, aby zezwolić na ruch z sieci 192.168.0.0/24 i w inny sposób ograniczyć ruch (do portu 22). The
DROP
Zasada nie jest wymagane, jeśli iptables polityka domyślna jest skonfigurowanyDROP
.Możesz dodać więcej reguł przed regułą upuszczania, aby dopasować więcej sieci / hostów. Jeśli masz wiele sieci lub adresów hostów, powinieneś użyć modułu ipset . Jest równieżmoduł iprange , który pozwala na użycie dowolnego zakresu adresów IP.
Iptables nie są trwałe podczas ponownego uruchamiania. Musisz skonfigurować jakiś mechanizm, aby przywracał iptables podczas uruchamiania.
iptables
dotyczą tylko ruchu IPv4. W systemach, w których ssh nasłuchuje adresu IPv6, można wykonać niezbędną konfiguracjęip6tables
.Opcja 2: Korzystanie z opakowań TCP
Możesz także skonfigurować, które hosty mogą się łączyć za pomocą opakowań TCP. W przypadku opakowań TCP oprócz adresów IP można także używać nazw hostów w regułach.
Domyślnie odmawiaj wszystkim hostom.
/etc/hosts.deny
:Następnie wyświetl listę dozwolonych hostów w pliku hosts.allow. Na przykład, aby zezwolić sieci 192.168.0.0/24 i localhost .
/etc/hosts.allow
:Opcja 3: Konfiguracja demona SSH
Możesz skonfigurować demona ssh w sshd_config, aby używał innej metody uwierzytelniania w zależności od adresu klienta / nazwy hosta. Jeśli chcesz tylko blokować łączenie się innych hostów, powinieneś zamiast tego użyć iptables lub TCP.
Najpierw usuń domyślne metody uwierzytelniania:
Następnie dodaj żądane metody uwierzytelniania po
Match Address
końcu pliku. UmieszczenieMatch
na końcu pliku jest ważne, ponieważ wszystkie wiersze konfiguracji po nim są umieszczane wewnątrz bloku warunkowego do następnegoMatch
wiersza. Na przykład:Inni klienci nadal mogą się łączyć, ale logowanie się nie powiedzie, ponieważ nie ma dostępnych metod uwierzytelniania.
Dopasuj argumenty i dozwolone opcje konfiguracji warunkowej są udokumentowane na stronie podręcznika sshd_config . Wzorce dopasowania są udokumentowane na stronie podręcznika ssh_config .
źródło
#ListenAddress ::
w/etc/ssh/sshd_config
powie serwer SSH, aby zaakceptować przychodzące z jednego z tych sieci. W przeciwnym razie wykonaj,ListenAddress <ip address>
gdzie<ip address>
są te porty karty sieciowej, które mają być dozwolone. Mójeth0
jest192.168.3.4
zatemListenAddress 192.168.3.4
skutkuje SSH tylko pracujące w sieci 192.168.3.4, który jest na eth0; i eth1 eth2 eth3 jest odrzucany.Oto kilka dodatkowych konfiguracji demona SSH w celu rozszerzenia poprzedniej odpowiedzi:
Dodaj filtrowanie użytkowników z
AllowUsers
opcją wsshd_config
pliku:To pozwala johndoe i admin2 tylko z
192.168.1.*
adresów i otherid1 , otherid2 z dowolnego miejsca.Ogranicz klucz ssh lub klucz oparty na ca do zestawu adresów w
.ssh/authorized_keys
pliku katalogu domowego danego użytkownika:W tym przykładzie klucz publiczny dla useralias będzie skuteczny tylko z podanych adresów.
źródło