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

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

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

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

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

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

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


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

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

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

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

Вы согласны?

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

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

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

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

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

Скажем ваш

  • LAN - 192.168.1.0/24
  • пользователя git зовут git
  • пользователей-администраторов зовут Алиса и Боб

В 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

Вы можете использовать файл 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.

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

Для ssh вам подойдет следующая строка конфигурации:

AllowUsers git *@localhost

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

iptables -F
iptables -A INPUT -P tcp -p 22 -s [ваш-ip-адрес] / 32 -j ПРИНЯТЬ
iptables -A INPUT -P tcp -p 80 -s [ваш-адрес-локальной-сети] / [ваша-локальная-сетевая маска] -j ПРИНЯТЬ
iptables -A INPUT -j DROP

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

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