Я хочу защитить SSH-доступ к нашему живому веб-серверу со всех IP-адресов, кроме статического IP-адреса нашего офиса.
Некоторые сотрудники подключаются к этому живому серверу со своих динамических IP-адресов. Таким образом, у меня не всегда есть возможность изменить правило iptables на живом сервере при изменении динамического IP-адреса сотрудника.
Я попытался поместить их в офисный VPN и разрешил только SSH-доступ с офисного IP-адреса, но офисное соединение медленное по сравнению с частным интернет-соединением нашего сотрудника, кроме того, это добавляет дополнительные накладные расходы на нашу офисную сеть.
Как я могу решить эту проблему?
Возможно, вы захотите рассмотреть возможность стука порта http://en.wikipedia.org/wiki/Port_knocking и http://www.zeroflux.org/projects/knock чтобы разрешить открытие определенных динамических IP-адресов на ограниченное время и их аннулирование позже.
Я лично не использовал этот метод, но на сайте есть несколько хороших примеров.
Я бы рекомендовал сбросить ограничение IP и потребовать аутентификацию на основе ключей и паролей для входа в систему. Я думаю, что в конечном итоге это повысит вашу безопасность, и тогда вам не придется беспокоиться о динамических IP-адресах.
Сколько сотрудников с динамическими IP? Если их небольшое количество, вы можете просто заплатить за них, чтобы они имели статические IP-адреса, при этом ваша политика безопасности не изменится, а настройка будет простой. Я уверен, что вы уже об этом думали.
Если вы желаете ослабить некоторые политики, теоретически вы могли бы выяснить подсети вашего штатного провайдера и ограничить доступ к ним, что может значительно снизить уязвимость, хотя я думаю, что это был бы необычный подход.
Если вы серьезно относитесь к защите SSH, вам следует обратить внимание на ключевые логины только, с некоторыми требованиями, чтобы ключи были защищены паролем, и, возможно, даже с истечением срока их действия по расписанию.
Не давайте своим пользователям SSH root-доступ. Используйте sudo, чтобы предоставить доступ к командам корневого типа. Используйте logwatch или что-то подобное, чтобы следить за происходящим.
Кроме того, это веб-сервер - ваша конфигурация SSH по умолчанию, вероятно, гораздо более безопасна, чем другие аспекты системы, которые вы намеренно открываете в Интернете, даже если компрометация будет более серьезной. Не забывайте о защите остальной части сервера и кода, который вы на нем запускаете.
An отличное руководство по защите Linux-сервера можно найти здесь. Особенности CentOS / RedHat, но он охватывает множество опций, общих для всех дистрибутивов.
В дополнение к другим предложениям вы также можете рассмотреть возможность запуска sshd с нестандартным номером порта. Это ненадолго замедлит целевую атаку, но позволит избежать некоторых автоматических атак грубой силы, которые сканируют Интернет в поисках хостов, на которых работает sshd на порту 22.
ConfigServer Firewall можно настроить для автоматического добавления динамических IP-адресов в белый список. Вам необходимо настроить динамическое доменное имя для каждого клиента, чтобы это работало - некоторые сайты с динамическим IP-адресом предоставят вам исполняемый файл на стороне клиента, который поддерживает текущий IP-адрес. Для этого я использую no-ip.com.
Некоторые брандмауэры поддерживают использование записей DNS, поэтому такие службы, как http://www.no-ip.com/services/managed_dns/free_dynamic_dns.html может использоваться для ограничения доступа.
Если вы просто хотите использовать iptables, возможно, у вас есть сценарий для проверки имен DNS (я не думаю, что iptables поддерживает использование записей DNS для предоставления доступа).
Но у Кайла есть хороший ответ, требующий аутентификации на основе ключа. Я не знаю, как требовать и ключи, и пароли, поэтому моим методом было бы запросить ключи для доступа к серверу.