Вопрос: Ограничить ssh в локальной сети, за исключением пользователя git


У меня есть сервер Ubuntu 12.04, настроенный с Gitlab и OpenVPN, чтобы служить сервером git и vpn для нас.

В настоящее время я открыл порт 1194 в брандмауэре, чтобы открыть OpenVPN, и позволить пользователям пройти аутентификацию с помощью сертификата rsa и ключа auth google.

Я еще не открыл брандмауэр для SSH-трафика, так как я не хочу, чтобы SSH полностью отображался в WAN. Однако мы должны иметь возможность нажимать и тянуть, не подключаясь к vpn.

Как открыть доступ ssh к WAN только для ограниченного пользователя git, разрешая администраторам получать доступ к серверу из локальной сети?

Я подозреваю, что я должен искать что-то в направлении использования групп соответствия в файле sshd_config. Как видно из этого вопроса: "Как настроить методы аутентификации OpenSSH для каждого пользователя?«У кого-нибудь есть опыт с этим?


Редактировать:

Первоначально я принял ответ на использование access.conf, чтобы ограничить доступ для входа в систему. Но более поздние ответы указывают, что то же самое можно достичь в sshd.conf либо директивой соответствия, либо использованием синтаксиса username @ hostaddress.

Сначала мне показалось, что более интуитивно понятно, как это сделать в sshd, и, вероятно, будет легче поддерживать и понимать других администраторов. Есть ли сильные преимущества при использовании access.conf над sshd.conf?

Если бы я мог варьировать варианты, упомянутые здесь, о том, насколько они интуитивно понятны, я бы сказал: 1. sshd.conf 2. access.conf 3. IpTables

Вы согласны?


5
2017-12-08 16:39


Источник




Ответы:


Вы можете контролировать, где пользователям разрешено входить с AllowGroups, AllowUsers, DenyGroups, а также DenyUsers директив в sshd_config, Они обрабатываются в порядке DenyUsers, AllowUsers, DenyGroups, AllowGroups, AllowUsers может включать хост, а также имя пользователя; Я думаю, что другие просто разрешают имена.

Допустим,

  • LAN - 192.168.1.0/24
  • Пользователь git назван git
  • Пользователей админов называют alice и bob

В sshd_config вы сказали бы:

AllowUsers alice@192.168.1.0/24 bob@192.168.1.0/24 git

В качестве альтернативы вы можете сделать это с помощью Совпадение директивы. Директива match позволяет вам изменять поведение sshd на основе условий, таких как адрес, с которого подключается пользователь.

В глобальной части sshd_config вам придется

AllowUsers git

в конце файла вы бы переопределили это для своей локальной сети с помощью

Match Address 192.168.1.0/24
    AllowUsers alice bob git

4
2017-12-09 00:06





Ты ищешь pam_access, с помощью которого вы можете настроить sshd для принятия аутентификации для всех пользователей из локальной сети и для пользователя git из любого места.

Что-то вроде:

+ : ALL : 10. crond :0 tty1 tty2 tty3 tty4 tty5 tty6
+ : git : ALL
- : ALL : ALL

в вашем access.conf должен сделать трюк


5
2017-12-08 17:12



Привет, это моя первая встреча с pam_access. Не могли бы вы мне немного объяснить строки? + : ALL : 10. crond :0 tty1 tty2 tty3 tty4 tty5 tty6 Эти строки позволяют всем пользователям подключаться из: LAN ip: 10. *. *. *, А также выполнять cron-задания и подключаться через последовательные порты. Но что такое: 0? + : git : ALL Позволяет пользователю git из любого места - : ALL : ALL Отказывает доступ кому-либо еще. Я прав? - Trygve
Прочтите access.conf страница руководства, это все объясняет. - Dennis Kaarsemaker


Вы можете использовать файл sshd_config для управления доступом для каждого пользователя / хоста и сети, кроме того, что вы можете использовать iptables, а также tcpwrappers. Я бы рекомендовал вам использовать tcpwrappers для управления доступом в этом случае в дополнение к iptables. Использование iptables:

Используйте опцию -s iptables. Он принимает IP-адрес формы nnn.nnn.nnn.nnn или с маской (nnn.nnn.nnn.nnn / nnn.nnn.nnn.nnn или nnn.nnn.nnn.nnn / nn). Итак, чтобы разрешить, например, соединения из nnn.nnn.nnn. *, Вы можете написать

iptables -A INPUT -s nnn.nnn.nnn.0/255.255.255.0 -i em1 -p tcp --dport XXXXX -m state --state NEW,ESTABLISHED -j ACCEPT

или

iptables -A INPUT -s nnn.nnn.nnn.0/24 -i em1 -p tcp --dport XXXXX -m state --state

Если вы не можете создать сетевую маску, то, боюсь, вам придется дублировать правило для каждого из IP-адресов, которые вы хотите разрешить для подключения к вашему серверу.

Используя tcp wrapers, откройте /etc/hosts.allow, чтобы разрешить доступ:

sshd: 192.168.0.0/255.255.255.0 1.2.3.4

Выше это позволит вашей локальной сети и одному IP-адресу WAN 1.2.3.4 в этом случае. а затем вы можете просто запретить доступ ко всем другим хостам.

Чтобы запретить доступ:

Откройте файл /etc/hosts.deny в текстовом редакторе. Этот список файлов хостов / IP-адресов, которым не разрешен доступ к системе. Отказать ssh для всех:

sshd: ALL

См. Следующие Ссылка TCP Wrapper на веб-сайте RedHat для более подробной информации.

Моя рекомендация заключается в том, что вы должны использовать несколько уровней безопасности, чтобы сделать ваш сервер более безопасным и, конечно же, вы должны использовать аутентификацию на основе ключа с паролем для ssh.


3
2017-12-08 16:48



Могу ли я разрешить доступ ssh для ограниченного пользователя Git со всех адресов при использовании IP-таблиц и tcpwrappes? Наши разработчики могут быть на динамических IP-адресах, и я бы хотел, чтобы они могли подталкивать код. - Trygve
Это зависит от варианта использования ... позволяет сказать, что все разработчики будут получать доступ к нему из сети 192.168.1.0/24, и один пользователь с именем «git» должен получить к нему доступ из 1.2.3.4. В этих сценариях хорошо идти. В противном случае используйте sshd_config и перечислите пользователя git. Используйте rsa-ключи и смените порт 22 на неизвестный порт, прежде чем подвергать его WAN, и не забудьте отключить вход на основе пароля в файл sshd_config. Надеюсь, это поможет - Zeeshan
Хорошо, я работаю над последним случаем, когда у нас есть несколько разработчиков за пределами площадки, которые хотели бы нажать код для пользователя git. Спасибо за хорошую помощь здесь, я думаю, что вариант sshd_config может быть хорошим способом. - Trygve


pam_access может быть вариантом, но я использую его только мне нужно ограничить как ssh, так и консольные обращения

Для ssh для вас должна работать следующая строка конфигурации:

AllowUsers git *@localhost

1
2017-12-09 07:26





его довольно просто заблокировать ящик с iptables ..... если все, что вы хотите, это отбросить трафик, за исключением одного ip для ssh mgmt, а локальный LAN может ударить tcp / 80 (для http)

iptables -F
  iptables -A INPUT -P tcp -p 22 -s [ваш-ip-адрес] / 32 -j ACCEPT
  iptables -A INPUT -P tcp -p 80 -s [ваша-локальная сеть-адр] / [ваша-местная-сетевая маска] -j ACCEPT
  iptables -A INPUT -j DROP

im непонятно, какой внутренний сетевой адрес / внутренняя сетевая маска для вас есть, но если внутренний lan равен / 16, а сетевой адрес - 192.168.0.0, это может позволить доступным частным ip-адресам, не относящимся к rfc, к порту 80 (при условии, что эта конфигурация находится на периметре с прямым входящим IP-трафиком).

вы можете и должны иметь более сложные / конкретные правила iptables, но, как минимум, это должно работать


0
2017-12-08 17:16