Wybór interfejsu dla przekierowania portów SSH

24

Mam serwer, który nazwiemy hub-server.tld z trzema adresami IP 100.200.130.121, 100.200.130.122 i 100.200.130.123. Mam trzy różne maszyny, które są za zaporą ogniową, ale chcę użyć SSH, aby przekierować jedną maszynę na każdy adres IP. Na przykład: komputer-jeden powinien nasłuchiwać SSH na porcie 22 na 100.200.130.121, podczas gdy komputer-dwa powinien robić to samo na 100.200.130.122 i tak dalej dla różnych usług na portach, które mogą być takie same na wszystkich komputerach.

Na stronie podręcznika SSH -R [bind_address:]port:host:hostportwymieniono, że mam włączone porty bramy, ale w przypadku korzystania -Rz określonego adresu IP serwer nadal nasłuchuje na porcie we wszystkich interfejsach:

maszyna pierwsza:

# ssh -NR 100.200.130.121:22:localhost:22 [email protected]

hub-server.tld (nasłuchuje SSH na porcie 2222):

# netstat -tan | grep LISTEN
tcp        0      0 100.200.130.121:2222        0.0.0.0:*                   LISTEN
tcp        0      0 :::22                       :::*                        LISTEN
tcp        0      0 :::80                       :::*                        LISTEN

Czy istnieje sposób, aby SSH przekierowywał tylko połączenia o określonym adresie IP z maszyną pierwszą, aby móc jednocześnie słuchać portu 22 na innych adresach IP, czy też muszę coś zrobić z iptables? Oto wszystkie wiersze w mojej konfiguracji ssh, które nie są komentarzami / wartościami domyślnymi:

Port 2222
Protocol 2
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL
AllowTcpForwarding yes
GatewayPorts yes
X11Forwarding yes
ClientAliveInterval 30
ClientAliveCountMax 1000000
UseDNS no
Subsystem       sftp    /usr/libexec/openssh/sftp-server
Eric Pruitt
źródło

Odpowiedzi:

37

Od sshd_config(5):

GatewayPorts

  Specifies whether remote hosts are allowed to connect to ports forwarded 
  for the client.  By default, sshd(8) binds remote port forwardings to the
  loopback address. This prevents other remote hosts from connecting to 
  forwarded ports.  GatewayPorts can be used to specify that sshd should 
  allow remote port forwardings to bind to non-loopback addresses, thus 
  allowing other hosts to connect.  The argument may be “no” to force remote 
  port forwardings to be available to the local host only, “yes” to force 
  remote port forwardings to bind to the wildcard address, or 
  “clientspecified” to allow the client to select the address to which the 
  forwarding is bound.  The default is “no”.

Chcesz ustawić to na clientspecifiedzamiast yes.

mgorven
źródło
Wspaniale! Dziękuję! Naprawdę chciałbym, aby strona podręcznika dla ssh (1) stwierdziła, że clientspecifiedjest potrzebna zamiast po prostu powiedzieć „włączone”: „Określenie zdalnego adresu bind_dress się powiedzie tylko wtedy, gdy włączona jest opcja GatewayPorts serwera (patrz sshd_config (5))”. Po tym pomyślałem, że po prostu trzeba to ustawić yes.
Eric Pruitt,