Как обезопасить область администратора для публичного и частного приложения на rails - PullRequest
3 голосов
/ 23 мая 2009

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 23 мая 2009

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

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

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

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

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

1 голос
/ 23 мая 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>

Howto: http://eregie.premier -ministre.gouv.fr / manual / mod / mod_ssl / ssl_howto.html

...