disabled redirect-uri by default, added config examples, added ipv6 option

This commit is contained in:
AnsibleGuy 2022-01-19 18:15:25 +01:00
parent 089dc4fbfb
commit 6f9a842d7c
5 changed files with 38 additions and 13 deletions

View File

@ -16,16 +16,17 @@ Ansible Role to deploy one or multiple Apache2 sites on a linux server.
* Two **config-modes**: * Two **config-modes**:
* serve (_default_) * serve (_default_)
* redirect * redirect
* Support for specific configurations using the 'config' and 'config_additions' parameters
* **Default config**: * **Default config**:
* Disabled: <TLS1.2, unsecure ciphers, autoindex, servertokens/-signature, ServerSideIncludes, CGI * Disabled: <TLS1.2, unsecure ciphers, autoindex, servertokens/-signature, ServerSideIncludes, CGI
* Security headers: HSTS, X-Frame, Referrer-Policy, Content-Type nosniff, X-Domain-Policy, XXS-Protection * Security headers: HSTS, X-Frame, Referrer-Policy, Content-Type nosniff, X-Domain-Policy, XXS-Protection
* Limits to prevent DDoS * Limits to prevent DDoS
* Logging to syslog
* Using a Self-Signed certificate * Using a Self-Signed certificate
* Modules: +ssl, headers, rewrite; -autoindex * Modules: +ssl, +http2, headers, rewrite; -autoindex
* HTTP2 enabled with fallback to HTTP1.1 * HTTP2 enabled with fallback to HTTP1.1
* IPv6 support disabled (*at least one ipv6 address MUST EXIST*)
* **SSL modes** (_for more info see: [CERT ROLE](https://github.com/ansibleguy/infra_certs)_) * **SSL modes** (_for more info see: [CERT ROLE](https://github.com/ansibleguy/infra_certs)_)
@ -37,10 +38,13 @@ Ansible Role to deploy one or multiple Apache2 sites on a linux server.
* **Default opt-ins**: * **Default opt-ins**:
* restricting methods to POST/GET/HEAD * restricting methods to POST/GET/HEAD
* status-page listener on localhost
* Logging to syslog
* http2
* **Default opt-outs**: * **Default opt-outs**:
* Include the config file 'site_{{ site_name }}_app.conf' for advanced usage * Include the config file 'sites-available/site_{{ site_name }}_app.conf' for advanced usage
Options to provide module config will be added in the future!<br> Options to provide module config will be added in the future!<br>
@ -57,8 +61,8 @@ Also some basic mods will get a pre-config added. (_prefork, evasive_)
* **Note:** This role expects that the site's unencrypted 'server' will only redirect to its encrypted connection. * **Note:** This role expects that the site's unencrypted 'server' will only redirect to its encrypted connection.
* **Note:** If you want all domain-names to get 'caught' by a site/server you need to add an underline '*' as alias or domain!<br> * **Note:** If you want all domain-names to get 'caught' by a site/server you need to add a star/wildcard '*' as alias!<br>
This will also be done automatically if no domain is supplied. BUT: You still have to provide a main domain!
* **Warning:** Not every setting/variable you provide will be checked for validity. Bad config might break the role! * **Warning:** Not every setting/variable you provide will be checked for validity. Bad config might break the role!
@ -90,13 +94,15 @@ apache:
mode: 'serve' mode: 'serve'
domain: 'static.guy.net' domain: 'static.guy.net'
serve: serve:
path: '/var/www/static' path: '/var/www/site_guys_statics'
ssl: ssl:
mode: 'ca' # create minimal ca with signed server-certificate mode: 'ca' # create minimal ca with signed server-certificate
config: config: # add settings as key-value pairs
KeepAliveTimeout: 10 KeepAliveTimeout: 10
config_additions: # add a list of custom lines of config
- 'location = / { return 301 /kitty.jpg; }'
git_stuff: git_stuff:
mode: 'redirect' mode: 'redirect'
@ -110,6 +116,9 @@ apache:
letsencrypt: letsencrypt:
email: 'apache@template.ansibleguy.net' email: 'apache@template.ansibleguy.net'
security:
restrict_methods: false
``` ```
### Execution ### Execution

View File

@ -8,6 +8,8 @@ configure_security: true # https://www.digitalocean.com/community/tutorials/how
default_apache: default_apache:
sites: {} sites: {}
ipv6: false # IMPORTANT: at least one ipv6 address MUST BE defined on your system! else apache2 will fail to start
status_page: status_page:
state: 'present' state: 'present'
bind: '127.0.0.1' bind: '127.0.0.1'
@ -103,6 +105,7 @@ default_site_config:
admin: 'apache@template.ansibleguy.net' admin: 'apache@template.ansibleguy.net'
port_plain: 80 port_plain: 80
port_ssl: 443 port_ssl: 443
listen: '*'
domain: domain:
aliases: [] aliases: []
ip: ip:
@ -122,7 +125,7 @@ default_site_config:
redirect: redirect:
target: 'https://github.com/ansibleguy' target: 'https://github.com/ansibleguy'
request_uri: true request_uri: false
serve: serve:
path: '/var/www/html' path: '/var/www/html'

View File

@ -12,7 +12,7 @@
when: "site.ssl.mode in ['selfsigned', 'existing', 'ca']" when: "site.ssl.mode in ['selfsigned', 'existing', 'ca']"
tags: [sites, certs] tags: [sites, certs]
- name: "Apache | Debian | Site '{{ name }}' | Configuring listen-ports" - name: "Apache | Debian | Site '{{ name }}' | Configuring ipv4 listen-ports"
ansible.builtin.lineinfile: ansible.builtin.lineinfile:
path: '/etc/apache2/ports.conf' path: '/etc/apache2/ports.conf'
line: "Listen {{ port }}" line: "Listen {{ port }}"
@ -24,11 +24,24 @@
- port != '443' - port != '443'
loop_control: loop_control:
loop_var: port loop_var: port
with_items: loop:
- "{{ site.port_plain }}" - "{{ site.port_plain }}"
- "{{ site.port_ssl }}" - "{{ site.port_ssl }}"
tags: [config, sites] tags: [config, sites]
- name: "Apache | Debian | Site '{{ name }}' | Configuring ipv6 listen-ports"
ansible.builtin.lineinfile:
path: '/etc/apache2/ports.conf'
line: "Listen [::]:{{ port }}"
ignore_errors: true
loop_control:
loop_var: port
loop:
- "{{ site.port_plain }}"
- "{{ site.port_ssl }}"
when: APACHE_CONFIG.ipv6
tags: [config, sites]
- name: "Apache | Debian | Site '{{ name }}' | Create root directory" - name: "Apache | Debian | Site '{{ name }}' | Create root directory"
ansible.builtin.file: ansible.builtin.file:
path: "{{ site.serve.path }}" path: "{{ site.serve.path }}"

View File

@ -101,7 +101,7 @@
ansible.builtin.file: ansible.builtin.file:
state: absent state: absent
dest: "/etc/apache2/sites-enabled/{{ item }}" dest: "/etc/apache2/sites-enabled/{{ item }}"
with_items: loop:
- '000-default.conf' - '000-default.conf'
- 'default-ssl.conf' - 'default-ssl.conf'
tags: [config, base] tags: [config, base]

View File

@ -3,7 +3,7 @@
{% if site.plain_site %} {% if site.plain_site %}
# http listener # http listener
<VirtualHost *:{{ site.port_plain }}> <VirtualHost {{ site.listen }}:{{ site.port_plain }}>
ServerName {{ site.domain }} ServerName {{ site.domain }}
{% if site.aliases | length > 0 %} {% if site.aliases | length > 0 %}
@ -41,7 +41,7 @@
{% endif %} {% endif %}
# https listener # https listener
<VirtualHost *:{{ site.port_ssl }}> <VirtualHost {{ site.listen }}:{{ site.port_ssl }}>
ServerName {{ site.domain }} ServerName {{ site.domain }}
{% if site.aliases | length > 0 %} {% if site.aliases | length > 0 %}