Как защитить область администратора для общедоступного и частного приложения rails

Как бы вы обезопасили доступ к админке для веб-приложения?

Наша Rails CMS обслуживает страницы публично. Я хотел бы сделать бэкэнд (/admin) недоступным с помощью веб-сервера (apache) или брандмауэра (netfilter).

Можно ли это сделать с помощью SSL-сертификата? Я хотел бы ограничить доступ к бэкэнду только теми, у кого есть «ключ», аналогично SSH-доступу к серверу.

Заранее спасибо.


person Community    schedule 23.05.2009    source источник


Ответы (2)


Вы абсолютно правы, что SSL-сертификат — это то, что вам нужно. И это не так уж сложно настроить, хотя это редко делается.

Важно помнить, что эта проблема состоит из двух компонентов. Во-первых, «как мне заставить эту чертову штуку вообще работать», и, поскольку это система безопасности, во-вторых, «как мне настроить ее так, чтобы я не мог случайно сделать что-то, что повредит моему сердцу?» безопасность?"

Первое, что я бы предложил, это написать отдельное приложение Rails для администрирования и запустить его с другим веб-сервером на другом порту. (Если вы действительно хотите избежать указания номера порта в URL-адресе сайта администратора, используйте прокси-сервер перед обоими веб-серверами, который использует заголовок Host: для перенаправления запросов на foo.com на один сервер и admin.foo.com на другой.) Это разделение поможет гарантировать, что вы случайно не предоставите обычным пользователям доступ к функциям администрирования, и упростит настройку SSL.

Для сервера администратора настройте его только для доступа SSL. Создайте новый сертификат подписи и разрешите подключаться только сертификатам, подписанным сертификатом подписи. (Это зависит от веб-сервера; если вам действительно нужны подробности о том, как это сделать, вы, вероятно, захотите опубликовать новый вопрос с указанием специфики используемого вами сервера и конфигурации.) Вы можете настроить страницу (на не-SSL-сайте или на странице, доступной для неаутентифицированных пользователей на SSL-сайте), веб-браузеры ваших администраторов автоматически сгенерируют и загрузят сертификат, который вы можете подписать, что даст им доступ.

Сохраняйте копии всех сертификатов, которые вы подписываете, чтобы, когда вам нужно отозвать доступ, вы могли поместить этот сертификат в список отзыва.

person cjs    schedule 23.05.2009

НЕ используйте брандмауэр, вы только усложните свою реализацию. «Правильный» подход — использовать .htaccess или настроить авторизацию в конфигурации Apache Directory.

Похоже, вы хотите SSLRequire

SSLVerifyClient      none
<Directory /usr/local/apache/htdocs/secure/area>
SSLVerifyClient      require
SSLVerifyDepth       5
SSLCACertificateFile conf/ssl.crt/ca.crt
SSLCACertificatePath conf/ssl.crt
SSLOptions           +FakeBasicAuth
SSLRequireSSL
AuthName             "Snake Oil Authentication"
AuthType             Basic
AuthUserFile         /usr/local/apache/conf/httpd.passwd
require              valid-user
</Directory>

Как: http://eregie.premier-ministre.gouv.fr/manual/mod/mod_ssl/ssl_howto.html

person SpliFF    schedule 23.05.2009