Ограничить доступ SSH для определенных клиентов по IP-адресу

22

Как мы разрешаем определенному набору частных IP-адресов входить через Linux SSH (пара ключей RSA) в Linux Server?

Ранджан Кумар
источник
3
Правила брандмауэра - это нормальный курс действий
Raman Sailopal
2
firewall или /etc/hosts.allow, если ssh компилирует с оболочками TCP / или / etc / ssh / sshd_config правила файла.
Руи Ф Рибейро
более чем один способ сделать, обратитесь к linux.die.net/man/5/sshd_config , который объясняет все в/etc/ssh/sshd_config
рон

Ответы:

42

Вы можете ограничить количество подключаемых хостов, настроив оболочки TCP  или отфильтровав сетевой трафик (межсетевой экран) с помощью iptables . Если вы хотите использовать разные методы аутентификации в зависимости от IP-адреса клиента, настройте демон SSH (вариант 3).

Вариант 1: фильтрация с помощью IPTABLES

Правила Iptables оцениваются по порядку, до первого совпадения.

Например, чтобы разрешить трафик из сети 192.168.0.0/24 и в противном случае отбросить трафик (на порт 22). DROPПравила не требуется , если ваша политика Iptables по умолчанию настроена на DROP.

iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

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

Iptables не сохраняется при перезагрузке. Вам нужно настроить механизм восстановления iptables при загрузке.

iptablesприменять только к трафику IPv4. Системы, в которых ssh прослушивает IPv6-адрес, могут быть выполнены с необходимой конфигурацией ip6tables.

Вариант 2. Использование TCP-оболочек

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

По умолчанию запрещены все хосты.

/etc/hosts.deny:

sshd : ALL

Затем список разрешенных хостов в hosts.allow. Например, чтобы разрешить сеть 192.168.0.0/24 и localhost .

/etc/hosts.allow:

sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]

Вариант 3: настройка демона SSH

Вы можете настроить демон ssh в sshd_config для использования другого метода аутентификации в зависимости от адреса клиента / имени хоста. Если вы хотите заблокировать подключение только других хостов, вам следует использовать оболочки iptables или TCP.

Сначала удалите методы аутентификации по умолчанию:

PasswordAuthentication no
PubkeyAuthentication no

Затем добавьте нужные методы аутентификации после a Match Addressв конце файла. Размещение Matchв конце файла важно, так как все строки конфигурации после него помещаются в условный блок до следующей Matchстроки. Например:

Match Address 127.0.0.*
    PubkeyAuthentication yes

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

Аргументы соответствия и допустимые параметры условной конфигурации описаны в справочной странице sshd_config . Шаблоны соответствия описаны в справочной странице ssh_config .

sebasth
источник
Как насчет добавления директивы ListenAddress в / etc / ssh / sshd_config?
Джером
Это возможно в определенных ситуациях (например, прослушивание адреса частной сети), в зависимости от конфигурации сети и хостов, которые вы хотите разрешить.
Себастьян
2
Кроме того, sshd_config может устанавливать фильтрацию с помощью директивы AlowUsers, а для параметра authorized_keys также может быть задано значение «из IP или подсети» для фильтрации
tonioc
@tonioc Отличное решение для моего варианта использования. Пожалуйста, разверните это предложение в ответ.
simlev
если у вас есть сетевой адаптер с 4 - мя портами каждый будет другой сети, то по умолчанию #ListenAddress ::в /etc/ssh/sshd_configсообщит серверу SSH принять входящий любой из этих сетей. В противном случае сделайте, ListenAddress <ip address>где <ip address>находится тот из портов NIC, который вы хотите разрешить. Таким образом, my eth0is приводит к тому, что SSH работает только в сети 192.168.3.4, которая находится на eth0; и eth1 eth2 eth3 отказано. 192.168.3.4ListenAddress 192.168.3.4
Рон
5

Вот некоторые дополнительные настройки для демона SSH для расширения предыдущего ответа:

  • Добавьте пользовательскую фильтрацию с AllowUsersопцией в sshd_configфайле:

    AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
    

    Это позволяет johndoe и admin2 только с 192.168.1.*адресов и otherid1 , otherid2 из любого места.

  • Ограничьте ключ ssh или ключ на основе ca набором адресов в .ssh/authorized_keysфайле домашнего каталога данного пользователя:

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    В этом примере открытый ключ для useralias будет действовать только с заданных адресов.

tonioc
источник