Webserver Jail
Das Erstellen einer Jail geht recht einfach:
ezjail-admin create demo "lo1|10.23.42.5,lo1|fd10:23:42:23::5"
Die IP-Adressen stammen aus dem Bereich, den ich beim konfigurieren der Firewall für die Jails vorgesehen habe.
Die IPv4 Adresse ist dank Reverse-Proxy Jail nicht zwingend nötig, allerding kann es sein, dass man von der Jail aus IPv4-only Hosts erreichen möchte, deshalb habe ich eine vergeben.
Falls noch Dienste laufen, die auf Wildcard Adressen lauschen meckert ezjail (zu recht) rum. Dies sollte man abstellen und dann von vorne beginnen (z.B. Anleitung für NTPd).
Da wir nur einen kurzen Namen gesetzt haben, passen wir den Hostnamen in
der /usr/local/etc/ezjail/demo
an:
export jail_demo_hostname="demo.example.com"
Nachdem man unter /usr/jails/demo
verifiziert hat, dass der
Flavour korrekt funktioniert hat, kann
man die Jail starten:
ezjail-admin start demo
Um in die Jail zu gelangen gibt es den console
Befehl:
ezjail-admin console demo
Als erstes sollte man die /etc/hosts
innerhalb der Jail
glatt ziehen:
::1 localhost
127.0.0.1 localhost
fd10:23:42:23::5 demo.example.com
10.23.42.5 demo.example.com
NGINX
nginx
aus den Quellen zu bauen ist recht einfach:
cd /usr/ports/www/nginx
make config-recursive install clean
Hierbei habe ich alles auf Standard gelassen, jedoch das MAIL_MODULE
abgewählt.
In der /etc/rc.conf
wird nginx
aktiviert:
nginx_enable="YES"
Auf FreeBSD erwartet nginx seine Konfigurationsdatei unter
/usr/local/etc/nginx/nginx.conf
.
Die Standardeinstellungen würden schon genügen, allerdings will ich wie immer meine Extrawurst haben und alles selbst konfigurieren…
Die Anforderungen sind folgende:
- Wir hängen hinter einem Reverse-Proxy, deshalb:
- müssen wir uns nicht um SSL kümmern
- kann man es sich leisten auf IPv4 zu verzichten
- kann man die meisten (Security-) Header weglassen
- braucht man auch kein GZip
Somit habe ich /usr/local/etc/nginx/
mal wegkopiert und mir ein
eigenes Set an Konfiguration erstellt:
find /usr/local/etc/nginx -type f
/usr/local/etc/nginx/sites/demo.example.com.conf
/usr/local/etc/nginx/conf/general.conf
/usr/local/etc/nginx/mime.types
/usr/local/etc/nginx/nginx.conf
-
/usr/local/etc/nginx/mime.types
wurde wieder hin kopiert… -
/usr/local/etc/nginx/nginx.conf
user www;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 65535;
events {
multi_accept on;
worker_connections 65535;
}
http {
charset utf-8;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
log_not_found off;
types_hash_max_size 2048;
client_max_body_size 64M;
# MIME
include mime.types;
default_type application/octet-stream;
# logging
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
# load configs
include sites/*.conf;
}
/usr/local/etc/nginx/conf/general.conf
# dot files
location ~ /\. {
deny all;
}
# assets, media
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv|svgz?|ttf|ttc|otf|eot|woff2?)$ {
expires max;
access_log off;
}
/usr/local/etc/nginx/sites/demo.example.com.conf
server {
listen [fd10:23:42:23::5]:80;
server_name demo.example.com;
root /usr/local/www/demo.example.com;
# logging
access_log /var/log/nginx/demo.example.com.access.log;
error_log /var/log/nginx/demo.example.com.error.log warn;
include conf/general.conf;
}
Danach noch eine /usr/local/www/demo.example.com/index.html
anlegen und
dieser die Gruppe www
zuweisen (auch dem Ordner darüber).
Dann nginx
mittels service nginx start
erstmals starten.
Vom Host aus kann man überprüfen, ob alles geklappt hat:
echo "GET /" | nc fd10:23:42:23::5 80
Dies sollte den Inhalt der index.html
ausgeben.
Damit man von außen auch die Webseite betrachten kann, fehlt ein letzter Baustein: Die Reverse-Proxy Jail.
last update: 2024-01-28 17:42:17 +0100