¿Alguien tiene experiencia en proteger / reforzar ActiveMQ? Las listas de verificación o guías serían bienvenidas.
En mi opción, debe pensar en al menos dos factores al implementar los servicios de mensajes. Estos son la autenticación y autorización.
La autenticación es el proceso de asegurarse de que la integridad de la entidad esté intacta. Por lo general, esto se hace proporcionando una contraseña. ActiveMQ admite JAAS y también tiene una API que admite complementos de autenticación personalizados.
La forma más fácil de implementar esto es configurar su archivo xml de broker para que solo permita usuarios autenticados. Ejemplo que podría colocarse bajo la etiqueta <plugin>
en su xml:
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="admin" password="password"
groups="admins,publishers,consumers"/>
</users>
</simpleAuthenticationPlugin>
Los grupos proporcionados serán útiles para la autorización del usuario. Muy útil cuando solo necesita permitir algunos servicios a algunos grupos de usuarios. Utilice el método createConnection (nombre de usuario, contraseña) para el procedimiento de autenticación.
La autorización tiene que ver con permitir que una entidad acceda a un recurso seguro. A menudo se implementa con la ayuda de ACL . El siguiente ejemplo de XML proporcionará la autorización en un destino:
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic=">"
read="admins" write="admins"admin="admins" />
<authorizationEntry topic="YourTopic.>"
read="consumers" write="publishers"
admin="publishers" />
<authorizationEntry topic="YourTopic.Stats"
read="guests" />
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
Tenga en cuenta que el > El comodín proporciona el esquema de autorización recursivamente a cualquier cosa que se encuentre en ese camino.
A veces puede ser útil agregar autorización en el nivel de mensaje en lugar de en el nivel de conexión. Esto se hace creando una clase java MessageAuthorizationPolicy , lo que obliga a implementar el método boolean isAllowedToConsume (ConnectionContextcontext, Message message) . Aquí puede implementar sus propios criterios de autorización.
Para poner la política de autorización en buen uso, debe instalarla y configurarla en la configuración de ActiveMQ. Básicamente se realiza a través de estos pasos:
La respuesta de Chris Dale es bastante acertada, excepto por un pequeño detalle: si solo usas el <simpleAuthenticactionPlugin>
como se sugiere, e intente usar la consola web y luego intente navegar en una cola (vaya a la página de la cola - > haga clic en navegar), causará un error debido al "sistema" del usuario:
Stopping vm://localhost#0 because Failed with SecurityException: User name [system] or password is invalid.
Como se menciona en Blog de Phillip , para que funcione correctamente, tendrá que también agregue un usuario de "sistema" y edite la etiqueta "activemq.password" dentro de "credentials.properties".
Entonces, dentro de <users />
tendrías que agregar un usuario de "sistema":
<authenticationUser username="system" password="password" groups="admins,publishers,consumers"/>
Y luego, "credentials.properties" deberá modificarse para que coincida con la contraseña elegida:
activemq.password=password
Estoy publicando esto aquí porque la respuesta fue sorprendentemente difícil de encontrar.