Initial commit
This commit is contained in:
commit
d6bd3862eb
19 changed files with 357 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
config/master.key
|
0
config/.gitinclude
Normal file
0
config/.gitinclude
Normal file
13
hosts
Normal file
13
hosts
Normal file
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
dns:
|
||||
hosts:
|
||||
dns_1:
|
||||
ansible_host: 192.168.1.3
|
||||
sync_target: 192.168.1.4
|
||||
dns_2:
|
||||
ansible_host: 192.168.1.4
|
||||
sync_target: 192.168.1.3
|
||||
nginx:
|
||||
hosts:
|
||||
nginx_1:
|
||||
ansible_host: 192.168.1.12
|
1
roles/administrators/files/atomaka.pub
Normal file
1
roles/administrators/files/atomaka.pub
Normal file
|
@ -0,0 +1 @@
|
|||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIETR1+I4hzK79yoQUvSbBZ3scdXaZvB/9ZOHtJ/rMqig me@atomaka.com
|
23
roles/administrators/tasks/main.yml
Normal file
23
roles/administrators/tasks/main.yml
Normal file
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
- name: Allow passwordless sudo
|
||||
lineinfile:
|
||||
path: /etc/sudoers
|
||||
regexp: '^%sudo'
|
||||
line: '%sudo ALL=(ALL) NOPASSWD: ALL'
|
||||
validate: 'visudo -cf %s'
|
||||
state: present
|
||||
|
||||
- name: Add administrators
|
||||
user:
|
||||
name: "{{ item }}"
|
||||
groups: sudo
|
||||
shell: /bin/bash
|
||||
state: present
|
||||
with_items: "{{ users }}"
|
||||
|
||||
- name: Add SSH keys
|
||||
authorized_key:
|
||||
user: "{{ item }}"
|
||||
key: "{{ lookup('file', 'files/{{ item }}.pub') }}"
|
||||
state: present
|
||||
with_items: "{{ users }}"
|
3
roles/administrators/vars/main.yml
Normal file
3
roles/administrators/vars/main.yml
Normal file
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
users:
|
||||
- atomaka
|
20
roles/apt/tasks/main.yml
Normal file
20
roles/apt/tasks/main.yml
Normal file
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
- name: Install unattended-upgrades
|
||||
apt:
|
||||
name: unattended-upgrades
|
||||
state: present
|
||||
|
||||
- name: Install repository tools
|
||||
apt:
|
||||
name:
|
||||
- debian-keyring
|
||||
- debian-archive-keyring
|
||||
- apt-transport-https
|
||||
- ca-certificates
|
||||
- gnupg
|
||||
state: present
|
||||
|
||||
- name: Ensure unattended-upgrades is runing
|
||||
service:
|
||||
name: unattended-upgrades
|
||||
enabled: true
|
3
roles/firewall/handlers/main.yml
Normal file
3
roles/firewall/handlers/main.yml
Normal file
|
@ -0,0 +1,3 @@
|
|||
- name: Persist iptables
|
||||
shell:
|
||||
cmd: iptables-save > /etc/iptables/rules.v4
|
82
roles/firewall/tasks/main.yml
Normal file
82
roles/firewall/tasks/main.yml
Normal file
|
@ -0,0 +1,82 @@
|
|||
---
|
||||
- name: Install iptables packages
|
||||
apt:
|
||||
name: iptables-persistent
|
||||
state: present
|
||||
|
||||
- name: Allow all loopback traffic
|
||||
iptables:
|
||||
chain: INPUT
|
||||
in_interface: lo
|
||||
jump: ACCEPT
|
||||
notify: Persist iptables
|
||||
|
||||
- name: Allow port ping traffic
|
||||
iptables:
|
||||
chain: INPUT
|
||||
jump: ACCEPT
|
||||
protocol: icmp
|
||||
notify: Persist iptables
|
||||
|
||||
- name: Allow related and established connections
|
||||
iptables:
|
||||
chain: INPUT
|
||||
ctstate: ESTABLISHED,RELATED
|
||||
jump: ACCEPT
|
||||
notify: Persist iptables
|
||||
|
||||
- name: Allow SSH
|
||||
iptables:
|
||||
chain: INPUT
|
||||
destination_port: 22
|
||||
jump: ACCEPT
|
||||
protocol: tcp
|
||||
notify: Persist iptables
|
||||
|
||||
- name: Allow web
|
||||
iptables:
|
||||
chain: INPUT
|
||||
protocol: tcp
|
||||
destination_port: 80
|
||||
jump: ACCEPT
|
||||
notify: Persist iptables
|
||||
|
||||
- name: Allow dns
|
||||
iptables:
|
||||
chain: INPUT
|
||||
protocol: tcp
|
||||
destination_port: 53
|
||||
jump: ACCEPT
|
||||
notify: Persist iptables
|
||||
|
||||
- name: Allow dns (udp)
|
||||
iptables:
|
||||
chain: INPUT
|
||||
protocol: udp
|
||||
destination_port: 53
|
||||
jump: ACCEPT
|
||||
notify: Persist iptables
|
||||
|
||||
- name: Allow related and established connections
|
||||
ansible.builtin.iptables:
|
||||
chain: INPUT
|
||||
ctstate: ESTABLISHED,RELATED
|
||||
jump: ACCEPT
|
||||
|
||||
- name: Set the policy for the INPUT chain to DROP
|
||||
iptables:
|
||||
chain: INPUT
|
||||
policy: DROP
|
||||
notify: Persist iptables
|
||||
|
||||
- name: Set the policy for the FORWARD chain to DROP
|
||||
iptables:
|
||||
chain: FORWARD
|
||||
policy: DROP
|
||||
notify: Persist iptables
|
||||
|
||||
- name: Set the policy for the OUTPUT chain to ACCEPT
|
||||
iptables:
|
||||
chain: OUTPUT
|
||||
policy: ACCEPT
|
||||
notify: Persist iptables
|
17
roles/instance/tasks/main.yml
Normal file
17
roles/instance/tasks/main.yml
Normal file
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
- name: Set hostname
|
||||
hostname:
|
||||
name: '{{ inventory_hostname | replace("_", "-") }}'
|
||||
|
||||
- name: Add hostname to /etc/hosts
|
||||
lineinfile:
|
||||
dest: /etc/hosts
|
||||
regexp: '^127\.0\.0\.1[ \t]+localhost'
|
||||
line: '127.0.0.1 localhost {{ inventory_hostname | replace("_", "-") }}'
|
||||
state: present
|
||||
|
||||
- name: Install ansible pre-requisites
|
||||
apt:
|
||||
name:
|
||||
- acl
|
||||
state: present
|
25
roles/pihole/files/id_ed25519
Normal file
25
roles/pihole/files/id_ed25519
Normal file
|
@ -0,0 +1,25 @@
|
|||
$ANSIBLE_VAULT;1.1;AES256
|
||||
65383462643264626136333163366264353039393537313264303835393537396664633539616534
|
||||
6664613531623666386661653330386538366466313133390a393562363835326136393664353334
|
||||
62383932373036303233306138366464323463303238316434383264306632653533623665343066
|
||||
3037326266326465300a653435646538613636336236343231376635646439663963346130656164
|
||||
31383238613230356661626230353933346563333939383238336164336362323939666561306433
|
||||
34353430633131663531333030636137396537643735666533633630393166363739663538363161
|
||||
35373234623763346661656562346339366531663432666132356132323161323934323262653538
|
||||
34626130383535396631646439303431363432383265636365633831626162656432333839326137
|
||||
34386235643132366532316234396635366438623235636630663033396638336337666431653138
|
||||
38343734663666343334616436363335353764366564376565313834326364646231303662643463
|
||||
61643932366438366339383032306366376537326665393331333463656262373134656234393264
|
||||
65626161656163396531313739323732313132623934336337386534366163313933613535323864
|
||||
30303532396236613836316133363862663764333231326261366235353264356535326334353265
|
||||
35313534616361316636383161363630393362333362623966373264393138646335316531633136
|
||||
32333832643836646165643865636566663331333033303839653938653837353063366566623364
|
||||
65636661623833376236613566623839633734333866393032613861646666333732386166633865
|
||||
30616237663439383131653836303738653538353162333731343938643765333532373237353336
|
||||
35363436643833643030663638333663633337326461663866386532396364313330656130653665
|
||||
31333564363362613330363461383637666366333832326437666435336331643332376339623732
|
||||
37363139666339313962633961363262343130323531313432623737663737643830316639623864
|
||||
38393737313838343666376538616334363037353165323039626235646139346361343432316539
|
||||
62303932306635303731646234633936373562656136623030656231616563623336393466616335
|
||||
38306162393433306631383432346532376134323034616663373066303932376438656238336361
|
||||
62336537383461343636
|
1
roles/pihole/files/id_ed25519.pub
Normal file
1
roles/pihole/files/id_ed25519.pub
Normal file
|
@ -0,0 +1 @@
|
|||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAQu1fLqmEcru0rAk8hTJ59WA3sLO7KDFIc4RgxCI0UP pihole
|
6
roles/pihole/handlers/main.yml
Normal file
6
roles/pihole/handlers/main.yml
Normal file
|
@ -0,0 +1,6 @@
|
|||
- name: Restart dnsmasq
|
||||
service:
|
||||
name: dnsmasq
|
||||
enabled: true
|
||||
state: restarted
|
||||
when: ansible_facts.services['dnsmasq.service'] is defined
|
78
roles/pihole/tasks/main.yml
Normal file
78
roles/pihole/tasks/main.yml
Normal file
|
@ -0,0 +1,78 @@
|
|||
---
|
||||
- name: Create pihole user
|
||||
user:
|
||||
name: pihole
|
||||
groups: sudo
|
||||
shell: /bin/bash
|
||||
state: present
|
||||
|
||||
- name: Ensure .ssh directory exists.
|
||||
file:
|
||||
dest: /home/pihole/.ssh
|
||||
mode: 0700
|
||||
owner: pihole
|
||||
state: directory
|
||||
|
||||
- name: Install ssh key
|
||||
copy:
|
||||
src: files/id_ed25519
|
||||
dest: /home/pihole/.ssh/id_ed25519
|
||||
mode: 0600
|
||||
owner: pihole
|
||||
|
||||
- name: Set the authorized keys
|
||||
authorized_key:
|
||||
user: pihole
|
||||
state: present
|
||||
key: "{{ lookup('file', 'id_ed25519.pub') }}"
|
||||
|
||||
- name: Create pihole directory
|
||||
file:
|
||||
path: /etc/pihole
|
||||
state: directory
|
||||
|
||||
- name: Configure pihole
|
||||
template:
|
||||
src: templates/setupVars.j2
|
||||
dest: /etc/pihole/setupVars.conf
|
||||
notify: Restart dnsmasq
|
||||
|
||||
- name: Download pihole installer
|
||||
become: yes
|
||||
become_user: pihole
|
||||
get_url:
|
||||
url: https://install.pi-hole.net
|
||||
dest: /tmp/basic-install.sh
|
||||
mode: 0755
|
||||
|
||||
- name: Install pihole
|
||||
become: yes
|
||||
become_user: pihole
|
||||
command:
|
||||
cmd: /tmp/basic-install.sh --unattended
|
||||
creates: /usr/local/bin/pihole
|
||||
|
||||
- name: Create gravity directory
|
||||
file:
|
||||
path: /etc/gravity-sync
|
||||
state: directory
|
||||
|
||||
- name: Configure gravity
|
||||
template:
|
||||
src: templates/gravity-sync.conf.j2
|
||||
dest: /etc/gravity-sync/gravity-sync.conf
|
||||
|
||||
- name: Download gravity installer
|
||||
become: yes
|
||||
become_user: pihole
|
||||
get_url:
|
||||
url: https://raw.githubusercontent.com/vmstan/gs-install/main/gs-install.sh
|
||||
dest: /tmp/gravity-install.sh
|
||||
mode: 0755
|
||||
|
||||
- name: Install gravity
|
||||
become: yes
|
||||
become_user: pihole
|
||||
command:
|
||||
cmd: /tmp/gravity-install.sh --unattended
|
||||
creates: /usr/local/bin/gravity-sync
|
4
roles/pihole/templates/gravity-sync.conf.j2
Normal file
4
roles/pihole/templates/gravity-sync.conf.j2
Normal file
|
@ -0,0 +1,4 @@
|
|||
REMOTE_HOST={{ sync_target }}
|
||||
REMOTE_USER=pihole
|
||||
|
||||
GS_SSH_PKIF=/home/pihole/.ssh/id_ed25519
|
16
roles/pihole/templates/setupVars.j2
Normal file
16
roles/pihole/templates/setupVars.j2
Normal file
|
@ -0,0 +1,16 @@
|
|||
IPV4_ADDRESS={{ ansible_host }}/24
|
||||
PIHOLE_INTERFACE=eth0
|
||||
QUERY_LOGGING=true
|
||||
INSTALL_WEB_SERVER=true
|
||||
INSTALL_WEB_INTERFACE=true
|
||||
LIGHTTPD_ENABLED=true
|
||||
CACHE_SIZE=10000
|
||||
DNS_FQDN_REQUIRED=true
|
||||
DNS_BOGUS_PRIV=true
|
||||
DNSMASQ_LISTENING=local
|
||||
WEBPASSWORD=998ed4d621742d0c2d85ed84173db569afa194d4597686cae947324aa58ab4bb
|
||||
BLOCKING_ENABLED=true
|
||||
DNSSEC=false
|
||||
REV_SERVER=false
|
||||
PIHOLE_DNS_1=8.8.8.8
|
||||
PIHOLE_DNS_2=8.8.4.4
|
9
roles/ssh/handlers/main.yml
Normal file
9
roles/ssh/handlers/main.yml
Normal file
|
@ -0,0 +1,9 @@
|
|||
- name: Restart ssh
|
||||
service:
|
||||
name: sshd
|
||||
state: restarted
|
||||
|
||||
- name: Restart fail2ban
|
||||
service:
|
||||
name: fail2ban
|
||||
state: restarted
|
36
roles/ssh/tasks/main.yml
Normal file
36
roles/ssh/tasks/main.yml
Normal file
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
- name: Block root and password authentication
|
||||
lineinfile:
|
||||
path: /etc/ssh/sshd_config
|
||||
regexp: '{{ item.regexp }}'
|
||||
line: '{{ item.line }}'
|
||||
validate: 'sshd -T -f %s'
|
||||
state: present
|
||||
with_items:
|
||||
- regexp: '^PasswordAuthentication'
|
||||
line: 'PasswordAuthentication no'
|
||||
- regexp: '^PermitRootLogin'
|
||||
line: 'PermitRootLogin no'
|
||||
notify: Restart ssh
|
||||
|
||||
- name: Install fail2ban
|
||||
apt:
|
||||
name: fail2ban
|
||||
state: present
|
||||
|
||||
- name: Configure fail2ban
|
||||
blockinfile:
|
||||
path: /etc/fail2ban/jail.local
|
||||
create: yes
|
||||
mode: 0644
|
||||
block: |
|
||||
[sshd]
|
||||
enabled = true
|
||||
filter = sshd
|
||||
notify: Restart fail2ban
|
||||
|
||||
- name: Start fail2ban on boot
|
||||
service:
|
||||
name: fail2ban
|
||||
enabled: true
|
||||
state: started
|
19
site.yml
Normal file
19
site.yml
Normal file
|
@ -0,0 +1,19 @@
|
|||
---
|
||||
- hosts: all
|
||||
become: yes
|
||||
pre_tasks:
|
||||
- name: Update apt-get repo and cache
|
||||
apt:
|
||||
update_cache: yes
|
||||
cache_valid_time: 3600
|
||||
roles:
|
||||
- role: instance
|
||||
- role: apt
|
||||
- role: firewall
|
||||
- role: administrators
|
||||
- role: ssh
|
||||
- hosts: dns
|
||||
become: yes
|
||||
roles:
|
||||
- role: pihole
|
||||
tags: pihole
|
Loading…
Reference in a new issue