sshd accepted passwords from the internet (about 12,000 failed logins a day) and root logins with a key. Keys only now, no root, no X11 forwarding. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
44 lines
1.2 KiB
YAML
44 lines
1.2 KiB
YAML
- name: Install common packages
|
|
apt:
|
|
name:
|
|
- aptitude
|
|
- jq
|
|
state: latest
|
|
update_cache: true
|
|
|
|
- name: UFW - Enable and deny by default
|
|
community.general.ufw:
|
|
state: enabled
|
|
default: deny
|
|
# Security updates install themselves each day (Debian's default origins:
|
|
# the -security archive only). No automatic reboots.
|
|
- name: Install unattended-upgrades
|
|
ansible.builtin.apt:
|
|
name: unattended-upgrades
|
|
state: present
|
|
|
|
- name: Turn on daily unattended upgrades
|
|
ansible.builtin.copy:
|
|
dest: /etc/apt/apt.conf.d/20auto-upgrades
|
|
owner: root
|
|
mode: '0644'
|
|
content: |
|
|
APT::Periodic::Update-Package-Lists "1";
|
|
APT::Periodic::Unattended-Upgrade "1";
|
|
|
|
# Keys only. sshd_config's Include comes first and sshd keeps the first value
|
|
# it reads, so this drop-in overrides the defaults further down. Root has no
|
|
# keys, and Ansible logs in as the regular user.
|
|
- name: SSH - keys only, no root login, no X11
|
|
ansible.builtin.copy:
|
|
dest: /etc/ssh/sshd_config.d/10-hardening.conf
|
|
owner: root
|
|
mode: '0644'
|
|
content: |
|
|
PasswordAuthentication no
|
|
KbdInteractiveAuthentication no
|
|
PermitRootLogin no
|
|
X11Forwarding no
|
|
validate: /usr/sbin/sshd -t -f %s
|
|
notify: reload ssh
|