¡Esta es una revisión vieja del documento!
httpd(8)
Este artículo es sobre el httpd de OpenBSD, no confundir con el software de la fundación Apache con el mismo nombre.
Introducción
Realmente lo que se debería hacer es crear un servicio http con httpd en una IP privada/de loopback y luego usar relayd o haproxy para redirigir el tráfico al mundo de fuera. Idealmente el relayd o haproxy está en una máquina distinta (la máquina que da al internet).
Una de las características de seguridad que trae este httpd es que hace chroot a /var/www, por lo cual las peticiones HTTP y todo eso están encerradas en el chroot. Así que un atacante por HTTP no podría acceder, en principio, a tu host.
Por defecto el chroot está en /var/www, tenlo en cuenta cuando configures httpd, ya que sobrará esa parte y tendrás que tomar /var/www como / cuando configures httpd.
Configuración de ejemplo
La configuración de httpd se encuentra en /etc/httpd.conf. Puedes ver un ejemplo de como configurarlo en /etc/examples/httpd.conf (copiado aquí abajo)
Esta configuración es demasiado básica (aunque funciona perfectamente)
- /etc/httpd.conf
# $OpenBSD: httpd.conf,v 1.22 2020/11/04 10:34:18 denis Exp $ # Directory to chroot chroot "/var/www" # MIME types include "/etc/mimetypes" default type text/plain server "example.com" { listen on * port 80 location "/.well-known/acme-challenge/*" { root "/acme" request strip 2 } location * { block return 302 "https://$HTTP_HOST$REQUEST_URI" } } server "example.com" { listen on * tls port 443 tls { certificate "/etc/ssl/example.com.fullchain.pem" key "/etc/ssl/private/example.com.key" } root /sites/example.com # /var/www/sites/example.com location "/pub/*" { directory auto index } location "/.well-known/acme-challenge/*" { root "/acme" request strip 2 } }
Total, que esto crea un servicio en el puerto 80 que lo único que hace es redirigir todo el tráfico a el puerto 443. Todo con el dominio “example.com” (así que el certificado debería ser para ese dominio). Para generar certificados SSL fácilmente con OpenBSD vea acme-client. Que es certbot si fuese un buen programa.
Puedes iniciar httpd(8) con rcctl(8):
rcctl enable httpd rcctl start httpd
Configuración de httpd mas avanzada
Lo de arriba está bien pero eventualmente vas a querer mas cosas como CGI o PHP. OpenBSD trae su propio servidor FastCGI así que esto es relativamente fácil. Debes iniciar el servicio con
rcctl enable slowcgi rcctl start slowcgi
Aquí una configuración mas avanzada:
- /etc/httpd.conf
- # Directory to chroot
- chroot "/var/www"
- # MIME types
- include "/etc/mimetypes"
- default type text/plain
- server "suragu.net" {
- # For darknets
- alias loquesea.onion
- listen on 10.100.0.2 port 1341 # Cualquier puerto que no sea el 80
- listen on ::1 port 1341
- # Default log format
- log style forwarded
- errdocs "/sites/suragu.net/errdocs"
- gzip-static
- root "/sites/suragu.net"
- directory index "index.html"
- location match "/*.cgi" {
- fastcgi
- }
- location match ".txt" {
- no fastcgi
- root "/sites/suragu.net"
- }
- location match "/blog" {
- request rewrite "/blog/index.cgi"
- }
- }
Cambia lo que te haga falta, como el root o la dirección a la que bindeas (que aconsejo que sea una dirección privada si vas a usar un proxy inverso para mostrar el sitio al mundo). En este caso la dirección me la he inventado
Tras reiniciar httpd nuevamente (con rcctl restart httpd
) podrás hacer curl -k https://10.100.0.2
(la -k para que ignore el error del certificado TLS) y debería funcionar. También puedes probar los scripts de CGI
/var/www/bin
o /var/www/usr/bin
. Tu sabrás como quieres hacerlo. También tendrás que instalar los módulos de Perl/Python que uses para tus scripts CGI en /var/www/usr/lib/perl5
y cosas así
Es un dolor de huevos. Pero también muy satisfactorio cuando funciona.