É possível adicionar autenticação básica de acesso HTTP via HAProxy?

25

Configurei com êxito o HAProxy na frente de um servidor HTTP sobre o qual não tenho controle .

É possível configurar o HAProxy para adicionar autenticação HTTP simples a todos os sites, tendo em mente que não posso configurar isso no back-end?

Obrigado,

Lars

Lars Schneider
fonte

Respostas:

36

Eu tive que fazer isso hoje mesmo (porque o IIS 7.5 estranhamente não oferece suporte à autenticação em nada além de contas de usuário do Windows ou AD!) ...

Aqui está todo o código

userlist UsersFor_AcmeCorp
  user joebloggs insecure-password letmein

backend HttpServers
  .. normal backend stuff goes here as usual ..
  acl AuthOkay_AcmeCorp http_auth(UsersFor_AcmeCorp)
  http-request auth realm AcmeCorp if !AuthOkay_AcmeCorp

Documentei um pouco melhor aqui: http://nbevans.wordpress.com/2011/03/03/cultural-learnings-of-ha-proxy-for-make-benefit/

nbevans
fonte
2
+1 Só queria adicionar que você também pode adicionar as linhas finais em uma frontenddefinição, e não backendse desejar. E a realm xxxxpeça é opcional.
UpTheCreek
Eu implementei isso, mas o que acontece é que, em todas as chamadas subsequentes da API, recebo o pop-up solicitando autenticação. Isso o torna inutilizável. Existe alguma maneira em que é solicitado uma vez em cache para o restante das chamadas? Isso seria muito útil.
shshnk
2

Eu acho que isso é realmente possível, mas agora só posso encontrar um exemplo para levá-lo a meio caminho ...

http://haproxy.1wt.eu/download/1.4/doc/configuration.txt é a sua Bíblia.

Confira a seção 3.4 (Listas de usuários)

Começa:

É possível controlar o acesso às seções de front-end / back-end / listen ou estatísticas http, permitindo apenas usuários autenticados e autorizados. Para fazer isso, é necessário criar pelo menos uma lista de usuários e definir usuários.

Essa seção explica como configurar uma lista de usuários. O exemplo nessa seção é bastante exaustivo, então copie isso, se necessário.

Em seguida, precisamos descobrir como aplicá-lo ... Acho que a resposta está na seção 7.5.3 (Correspondência na camada 7)

Eu acho que pode ser tão simples quanto usar o seguinte em um ACL:

http_auth(userlist)
http_auth_group(userlist) <group> [<group>]*
  Returns true when authentication data received from the client matches
  username & password stored on the userlist. It is also possible to
  use http_auth_group to check if the user is assigned to at least one
  of specified groups.

Mais uma vez, não testei, mas é o que li na documentação, pois é possível sugerir.

Espero que seja o suficiente para você começar?

Caro
fonte
Bom grito, acho que agora estou acostumado!
Caro
Apesar de analisá-lo novamente, parece não ter sido atualizado há meses ... Não verifiquei alterações específicas entre isso e a parede do texto, mas suponho que exista alguma.
Caro
11
Esse link 'melhor' da Bíblia é 404'ing. Melhor ainda seria este haproxy.org/#docs . Lá você encontra itens manuais em HTML / texto.
Glenn Plas
Links para obter os manuais: cbonte.github.io/haproxy-dconv .
Slm