Как разрешить только определенным пользователям входить на 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
страница).
Но если вы уверены, что хотите выполнить ограничение пользователя по интерфейсу - что, по вашим вопросам, вы делаете, - вы можете запустить два sshd
s, у каждого свой 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 для всех остальных.
Например:
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-адрес они получают - важно, откуда пользователи подключаются, и это должно вас беспокоить.
Короткий ответ: вы не можете.
Длинный ответ: не будешь.
Это всего лишь псевдоприбыль с точки зрения безопасности. Вы должны сначала продумать свою концепцию безопасности.
Но, в интересах профессионального обсуждения, вы можете с помощью уродливых хаков: