Вы можете ограничить количество подключаемых хостов, настроив оболочки 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 .
Вы можете настроить демон ssh в sshd_config для использования другого метода аутентификации в зависимости от адреса клиента / имени хоста. Если вы хотите заблокировать подключение только других хостов, вам следует использовать оболочки iptables или TCP.
Сначала удалите методы аутентификации по умолчанию:
PasswordAuthentication no
PubkeyAuthentication no
Затем добавьте нужные методы аутентификации после a Match Addressв конце файла. Размещение Matchв конце файла важно, так как все строки конфигурации после него помещаются в условный блок до следующей Matchстроки. Например:
Match Address 127.0.0.*
PubkeyAuthentication yes
Другие клиенты по-прежнему могут подключаться, но вход в систему не удастся, потому что нет доступных методов проверки подлинности.
Как насчет добавления директивы 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файле:
/etc/ssh/sshd_config
Ответы:
Вы можете ограничить количество подключаемых хостов, настроив оболочки TCP или отфильтровав сетевой трафик (межсетевой экран) с помощью iptables . Если вы хотите использовать разные методы аутентификации в зависимости от IP-адреса клиента, настройте демон SSH (вариант 3).
Вариант 1: фильтрация с помощью IPTABLES
Правила Iptables оцениваются по порядку, до первого совпадения.
Например, чтобы разрешить трафик из сети 192.168.0.0/24 и в противном случае отбросить трафик (на порт 22).
DROP
Правила не требуется , если ваша политика Iptables по умолчанию настроена наDROP
.Вы можете добавить больше правил перед правилом удаления, чтобы соответствовать большему количеству сетей / хостов. Если у вас много сетей или адресов хостов, вы должны использовать модуль ipset . Также есть модуль iprange, который позволяет использовать любой произвольный диапазон IP-адресов.
Iptables не сохраняется при перезагрузке. Вам нужно настроить механизм восстановления iptables при загрузке.
iptables
применять только к трафику IPv4. Системы, в которых ssh прослушивает IPv6-адрес, могут быть выполнены с необходимой конфигурациейip6tables
.Вариант 2. Использование TCP-оболочек
Вы также можете настроить, какие хосты могут подключаться, используя TCP-оболочки. С оболочками TCP, помимо IP-адресов, вы также можете использовать имена хостов в правилах.
По умолчанию запрещены все хосты.
/etc/hosts.deny
:Затем список разрешенных хостов в hosts.allow. Например, чтобы разрешить сеть 192.168.0.0/24 и localhost .
/etc/hosts.allow
:Вариант 3: настройка демона SSH
Вы можете настроить демон ssh в sshd_config для использования другого метода аутентификации в зависимости от адреса клиента / имени хоста. Если вы хотите заблокировать подключение только других хостов, вам следует использовать оболочки iptables или TCP.
Сначала удалите методы аутентификации по умолчанию:
Затем добавьте нужные методы аутентификации после a
Match Address
в конце файла. РазмещениеMatch
в конце файла важно, так как все строки конфигурации после него помещаются в условный блок до следующейMatch
строки. Например:Другие клиенты по-прежнему могут подключаться, но вход в систему не удастся, потому что нет доступных методов проверки подлинности.
Аргументы соответствия и допустимые параметры условной конфигурации описаны в справочной странице sshd_config . Шаблоны соответствия описаны в справочной странице ssh_config .
источник
#ListenAddress ::
в/etc/ssh/sshd_config
сообщит серверу SSH принять входящий любой из этих сетей. В противном случае сделайте,ListenAddress <ip address>
где<ip address>
находится тот из портов NIC, который вы хотите разрешить. Таким образом, myeth0
is приводит к тому, что SSH работает только в сети 192.168.3.4, которая находится на eth0; и eth1 eth2 eth3 отказано.192.168.3.4
ListenAddress 192.168.3.4
Вот некоторые дополнительные настройки для демона SSH для расширения предыдущего ответа:
Добавьте пользовательскую фильтрацию с
AllowUsers
опцией вsshd_config
файле:Это позволяет johndoe и admin2 только с
192.168.1.*
адресов и otherid1 , otherid2 из любого места.Ограничьте ключ ssh или ключ на основе ca набором адресов в
.ssh/authorized_keys
файле домашнего каталога данного пользователя:В этом примере открытый ключ для useralias будет действовать только с заданных адресов.
источник