Вибір інтерфейсу для пересилання SSH портів


24

У мене є сервер, який ми будемо називати hub-server.tld з трьома IP-адресами 100.200.130.121, 100.200.130.122 та 100.200.130.123. У мене є три різні машини, які стоять за брандмауером, але я хочу використовувати SSH для пересилання однієї машини на кожну IP-адресу. Наприклад: machine-one повинен слухати SSH на порту 22 100.200.130.121, тоді як machine-two повинен робити те саме на 100.200.130.122 і так далі для різних служб на портах, які можуть бути однаковими для всіх машин.

Сторінка SSH man -R [bind_address:]port:host:hostportперерахувала, що у мене включені порти шлюзу, але при використанні -Rз певною IP-адресою сервер все ще слухає порт через усі інтерфейси:

машина-один:

# ssh -NR 100.200.130.121:22:localhost:22 root@hub-server.tld

hub-server.tld (слухає SSH на порт 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

Чи є спосіб зробити SSH передавати лише з'єднання з певної IP-адреси на машинну, щоб я міг одночасно прослуховувати порт 22 на інших IP-адресах, або мені доведеться щось робити з iptables? Ось усі рядки в моєму конфігурації ssh, які не є коментарями / за замовчуванням:

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

Відповіді:


37

Від sshd_config(5):

Порти шлюзу

  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”.

Ви хочете встановити це clientspecifiedзамість yes.


Дивовижне, дякую! Я дуже бажаю, щоб сторінка man для ssh (1) заявила, що clientspecifiedпотрібно замість того, щоб просто сказати "увімкнено": "Визначення віддаленої bind_address буде успішним лише в тому випадку, якщо параметр GatewayPorts сервера включений (див. Sshd_config (5))". З цього я подумав, що це просто потрібно налаштувати yes.
Ерік Прутт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.