aboutsummaryrefslogtreecommitdiffstats
path: root/roles/relayd/templates/relayd.conf.j2
blob: c97e9da858b43536d7ea359ea917060a219c6fa6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# managed by Ansible
{% import 'macros.j2' as macros with context %}

# general
log connection errors

# hosts
table <local> { 127.0.0.1 }
{% call(h) macros.loop_valid_hosts("servers") -%}
table <{{ h.inventory_hostname }}> { {{ h.__ip.internal }} }
{% for service in h.__services if service.domain is defined %}
table <{{ h.inventory_hostname }}_{{ service.domain }}> { {{ h.__ip.internal }} }
{% endfor %}
{%- endcall %}

# protocols

http protocol "https" {
	
	tls ciphers "HIGH:!AES128:!kRSA:!aNULL"
	tls ecdhe "P-384,P-256,X25519"

	tcp { sack, backlog 128 }

	match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
	match request header append "X-Forwarded-By" value "$SERVER_ADDR:$SERVER_PORT"
	match request header set "Connection" value "close"
	match request header set "X-Forwarded-Proto" value "https"
	match request header set "X-Forwarded-Port" value "443"
	match response header set "Content-Security-Policy" value "upgrade-insecure-requests"
	match response header set "Referrer-Policy" value "no-referrer"
	match response header set "X-XSS-Protection" value "1; mode=block"

	tls keypair "{{ relayd_domain_name }}"
	pass request quick header "Host" value "{{ relayd_domain_name }}" forward to <local>
{% call(h) macros.loop_valid_hosts("servers") -%}
{% for service in h.__services if service.domain is defined %}
	{% set domain_name = service.domain ~ "." ~ relayd_domain_name -%}
	tls keypair "{{ domain_name }}"
	pass request quick header "Host" value "{{ domain_name }}" forward to <{{ h.inventory_hostname }}_{{ service.domain }}>
{% endfor %}
{%- endcall %}

	block label "{{ relayd_block_msg }}"
	return error
}

http protocol "http" {
	
	# acme
	pass request quick path "/.well-known/acme-challenge/*" forward to <local>

	pass request quick header "Host" value "{{ relayd_domain_name }}" forward to <local>
{% call(h) macros.loop_valid_hosts("servers") -%}
{% for service in h.__services if service.domain is defined %}
	{% set domain_name = service.domain ~ "." ~ relayd_domain_name -%}
	pass request quick header "Host" value "{{ domain_name }}" forward to <{{ h.inventory_hostname }}_{{ service.domain }}>
{% endfor %}
{%- endcall %}

	return error
}

# relays

relay "www" {
	listen on egress port 80
	protocol "http"
	# assume httpd reverse proxy is running for https redirection
	forward to <local> port 8888 check icmp
}

relay "wwwtls" {
	listen on egress port 443 tls
	protocol "https"
	forward to <local> port 80 check http "/" code 200
{% call(h) macros.loop_valid_hosts("servers") -%}
{% for service in h.__services if service.domain is defined %}
	forward to <{{ h.inventory_hostname }}_{{ service.domain }}> port {{ service.port }} check tcp
{% endfor %}
{%- endcall %}
}
remember that computers suck.