Назад | Перейти на главную страницу

Разрешить SSH Пользователи из определенной сети

Как разрешить только определенным пользователям входить на SSH-сервер с определенного сетевого интерфейса?

например

Не могу использовать AllowUsers user1@eth0 потому что AllowUsers принимает имя хоста, а не имя интерфейса.

Другие ответы на этом сайте предлагают что-то вроде:

Match address 1.2.3.4/16 # eth0's network
   AllowUsers user1
Match address 2.3.4.5/16 # eth1's network
   AllowUsers user1,user2
Match address 0.0.0.0/0  # Match's equivalent of a closing brace?

Однако, если eth0 использует DHCP-сервер для получения своего адреса, он заранее не знает, что адрес 1.2.3.4 - это правильный адрес для ввода sshd_config.

(OpenSSH в Ubuntu 12.04, если это имеет значение)

Я не знаю, как это сделать в Match блок, и ваш комментарий выше предполагает, что это невозможно (как и, как вы заметили, man страница).

Но если вы уверены, что хотите выполнить ограничение пользователя по интерфейсу - что, по вашим вопросам, вы делаете, - вы можете запустить два sshds, у каждого свой sshd_config который предписывает ему прослушивать только один интерфейс, управляемый ListenAddress директива.

В sshd прослушивание внутреннего интерфейса может в его конфигурации иметь AllowUsers user1 user2, в то время как прослушивание внешнего интерфейса могло иметь AllowUsers user1. Я бы, наверное, сделал это по членству в группе и AllowGroups internal / AllowGroups internal external вместо этого, но это только я.

редактировать: imo, правильный способ сделать это - запустить /usr/sbin/sshd -f /etc/ssh/sshd_config_inside и /usr/sbin/sshd -f /etc/ssh/sshd_config_outside. Организация того, как это работает во время загрузки, и обеспечение того, чтобы ваши файлы запуска / завершения работы выполняли правильные действия, действительно важны, но это также совершенно нормальная вещь для системного администратора, которую необходимо сделать и сделать. это определенно Для этого не обязательно иметь два двоичных файла или даже один и тот же двоичный файл с двумя разными именами.

Я знаю, что это старый вопрос, но я искал решение без необходимости запускать 2 экземпляра sshd.

Что касается вашего конкретного вопроса и подсети 1.2.3.4/16 и подсети 2.3.4.5/16, вы можете использовать следующее:

AllowUsers user1@1.2.* user1@2.3.* user2@2.3.*

Ссылка: http://www.unixlore.net/articles/five-minutes-to-even-more-secure-ssh.html

Для моей сети я использую следующее, чтобы разрешить пользователю chris использовать ssh из любого места, но разрешить только user1, user2 и user3 использовать ssh в моей внутренней сети (192.168.0.0/24):

AllowUsers chris user1@192.168.0.* user2@192.168.0.* user3@192.168.0.*

Версия: SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3 в Ubuntu 14.04.3 LTS

Match address 1.2.3.4/16 недействительно, должно быть Match address 1.2.0.0/16. Сетевые адреса интерфейсов не меняются? Так что не имеет значения, какой IP вы получите.

Другим вариантом может быть (у меня нет личного опыта) создать два виртуальных интерфейса со статическим адресом, иметь два экземпляра sshd, каждый из которых привязан только к одному из этих адресов, и сделать DNAT с интерфейса DHCP на виртуальный.

Может быть, вы могли бы написать небольшой скрипт, чтобы получить текущий адрес eth0 (из ifconfig?) И установить его в sshd_config (используя sed); если я правильно помню, также можно писать сценарии ловушек, которые будут выполняться каждый раз, когда интерфейс Ethernet выходит из строя / повышается (это может решить необходимость обновления вручную или через crontab файл sshd_config).

Match Adress и Match User должен работать и через пару месяцев, начиная с OpenSSH 7.7, по крайней мере, если вы верите сообщениям об ошибках Вот вы также можете иметь отрицательные совпадения.

Если вы хотите заблокировать свой SSH с помощью sshd_config, предостережение в том, что вы должны отключить логины на основе пароля и pubkey для всех остальных.


Например:

  • разрешить root-доступ только изнутри (192.168.1.0/24, диапазон pivate "office")
  • разрешить доступ специального пользователя из VPN (10.10.10.0/24, частный диапазон "VPN")
  • разрешить доступ другим непривилегированным пользователям только по паб-ключу из любого места, независимо от того, внутри или снаружи, или в VPN

sshd_config

[...]
PasswordAuthentication no   #
PubkeyAuthentication no     # to disable access for all other users
[...]
Match Address 192.168.1.0/24
        PermitRootLogin yes
        PasswordAuthentication yes
        PubkeyAuthentication yes

Match User vpnuser Address 10.10.10.0/24
        PasswordAuthentication yes
        PubkeyAuthentication yes


Match User sarah peter robert Address *
        PasswordAuthentication no
        PubkeyAuthentication yes

Таким образом, не имеет значения, сколько интерфейсов у вашего сервера и какой DHCP-адрес они получают - важно, откуда пользователи подключаются, и это должно вас беспокоить.

Короткий ответ: вы не можете.

Длинный ответ: не будешь.

Это всего лишь псевдоприбыль с точки зрения безопасности. Вы должны сначала продумать свою концепцию безопасности.

Но, в интересах профессионального обсуждения, вы можете с помощью уродливых хаков:

  1. Подождите, пока вы не получите свои IP-адреса DHCP (Ура! Я бы не стал нестатическим на сервере)
  2. Настройте два разных sshd с соответствующими ListenAddress, назначив каждому из них также другой набор разрешенных пользователей. (изменить: был описан в других ответах здесь)
  3. Запустите два отдельных демона.