W jaki sposób pozwalamy niektórym zestawom prywatnych adresów IP na logowanie przez SSH (parę kluczy RSA) do Linux Server?
/etc/ssh/sshd_config
W jaki sposób pozwalamy niektórym zestawom prywatnych adresów IP na logowanie przez SSH (parę kluczy RSA) do Linux Server?
/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).
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). TheDROP
Zasada 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.
iptables
dotyczą tylko ruchu IPv4. W systemach, w których ssh nasłuchuje adresu IPv6, można wykonać niezbędną konfiguracjęip6tables
.
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 .
/etc/hosts.allow
:
sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]
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 Address
końcu pliku. Umieszczenie Match
na końcu pliku jest ważne, ponieważ wszystkie wiersze konfiguracji po nim są umieszczane wewnątrz bloku warunkowego do następnego Match
wiersza. 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.
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 .
#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ój eth0
jest 192.168.3.4
zatem ListenAddress 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ą w sshd_config
pliku:
AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
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:
from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
W tym przykładzie klucz publiczny dla useralias będzie skuteczny tylko z podanych adresów.