Преглед изворни кода

Add fix SSH configuration for stretch

Emmanuel Bouthenot пре 7 година
родитељ
комит
040bdeaebe

+ 1 - 0
roles/common/defaults/main.yml

@@ -59,6 +59,7 @@ postfix_external_smtp_password: 'mypass'
 postfix_external_sender_rewrite_regexp: '.*'
 
 with_ssh: True
+ssh_strengthened: True
 ssh_ports:
   - 22
 ssh_usedns: True

+ 29 - 9
roles/common/tasks/ssh.yml

@@ -1,16 +1,36 @@
-- name: Install ssh packages
-  apt: pkg={{ item }} state=installed
+- name: "Install ssh packages"
+  apt:
+    pkg: '{{ item }}'
+    state: 'installed'
   with_items:
-    - openssh-server
-    - openssh-client
+    - 'openssh-server'
+    - 'openssh-client'
   when: with_ssh
 
-- name: Install sshd configuration
-  template: src=ssh/sshd_config.j2 dest=/etc/ssh/sshd_config owner=root group=root mode=0644
+- name: 'Install sshd configuration (Debian <= 8)'
+  template:
+    src: 'ssh/sshd_config.legacy.j2'
+    dest: '/etc/ssh/sshd_config'
+    owner: 'root'
+    group: 'root'
+    mode: 0644
   notify:
     - Restart ssh
-  when: with_ssh
+  when: with_ssh and ansible_lsb.major_release|int <= 8
+
+- name: 'Install sshd configuration (Debian >= 9)'
+  template:
+    src: 'ssh/sshd_config.j2'
+    dest: '/etc/ssh/sshd_config'
+    owner: 'root'
+    group: 'root'
+    mode: 0644
+  notify:
+    - Restart ssh
+  when: with_ssh and ansible_lsb.major_release|int >= 9
 
-- name: Ensure ssh is running
-  service: name=ssh state=started
+- name: 'Ensure ssh is running'
+  service:
+    name: 'ssh'
+    state: 'started'
   when: with_ssh

+ 89 - 64
roles/common/templates/ssh/sshd_config.j2

@@ -2,96 +2,86 @@
 {% from 'templates/ansible/prolog.j2' import prolog with context %}
 {{ prolog() }}
 {% endif -%}
-# Package generated configuration file
-# See the sshd_config(5) manpage for details
+#	$OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
+
+# This is the sshd server system-wide configuration file.  See
+# sshd_config(5) for more information.
+
+# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
+
+# The strategy used for options in the default sshd_config shipped with
+# OpenSSH is to specify options with their default value where
+# possible, but leave them commented.  Uncommented options override the
+# default value.
 
-# What ports, IPs and protocols we listen for
 {% for port in ssh_ports %}
 Port {{ port }}
 {% endfor %}
-
-# Use these options to restrict which interfaces/protocols sshd will bind to
-#ListenAddress ::
+#AddressFamily any
 #ListenAddress 0.0.0.0
-Protocol 2
-# HostKeys for protocol version 2
-HostKey /etc/ssh/ssh_host_rsa_key
-HostKey /etc/ssh/ssh_host_dsa_key
-{% if ansible_lsb.major_release|int >= 7 %}
-HostKey /etc/ssh/ssh_host_ecdsa_key
-{% endif %}
-{% if ansible_lsb.major_release|int >= 8 %}
-HostKey /etc/ssh/ssh_host_ed25519_key
-{% endif %}
-#Privilege Separation is turned on for security
-UsePrivilegeSeparation yes
+#ListenAddress ::
 
-{% if not ssh_usedns %}
-# Enable/Disable reverse DNS check
-# Avois long lag in case of IPv6 connection with no reverse configured
-UseDns no
-{% endif %}
+#HostKey /etc/ssh/ssh_host_rsa_key
+#HostKey /etc/ssh/ssh_host_ecdsa_key
+#HostKey /etc/ssh/ssh_host_ed25519_key
 
-# Lifetime and size of ephemeral version 1 server key
-KeyRegenerationInterval 3600
-ServerKeyBits 1024
+# Ciphers and keying
+#RekeyLimit default none
+{% if ssh_strengthened %}
+KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
+Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
+MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
+{% endif %}
 
 # Logging
-SyslogFacility AUTH
-LogLevel INFO
+#SyslogFacility AUTH
+#LogLevel INFO
 
 # Authentication:
-LoginGraceTime 120
-PermitRootLogin without-password
-StrictModes yes
 
-RSAAuthentication yes
-PubkeyAuthentication yes
-#AuthorizedKeysFile	%h/.ssh/authorized_keys
+#LoginGraceTime 2m
+#PermitRootLogin prohibit-password
+#StrictModes yes
+#MaxAuthTries 6
+#MaxSessions 10
+
+#PubkeyAuthentication yes
+
+# Expect .ssh/authorized_keys2 to be disregarded by default in future.
+#AuthorizedKeysFile	.ssh/authorized_keys .ssh/authorized_keys2
+
+#AuthorizedPrincipalsFile none
 
+#AuthorizedKeysCommand none
+#AuthorizedKeysCommandUser nobody
+
+# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
+#HostbasedAuthentication no
+# Change to yes if you don't trust ~/.ssh/known_hosts for
+# HostbasedAuthentication
+#IgnoreUserKnownHosts no
 # Don't read the user's ~/.rhosts and ~/.shosts files
-IgnoreRhosts yes
-# For this to work you will also need host keys in /etc/ssh_known_hosts
-RhostsRSAAuthentication no
-# similar for protocol version 2
-HostbasedAuthentication no
-# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
-#IgnoreUserKnownHosts yes
+#IgnoreRhosts yes
 
-# To enable empty passwords, change to yes (NOT RECOMMENDED)
-PermitEmptyPasswords no
+# To disable tunneled clear text passwords, change to no here!
+#PasswordAuthentication yes
+#PermitEmptyPasswords no
 
 # Change to yes to enable challenge-response passwords (beware issues with
 # some PAM modules and threads)
 ChallengeResponseAuthentication no
 
-# Change to no to disable tunnelled clear text passwords
-#PasswordAuthentication yes
-
 # Kerberos options
 #KerberosAuthentication no
-#KerberosGetAFSToken no
 #KerberosOrLocalPasswd yes
 #KerberosTicketCleanup yes
+#KerberosGetAFSToken no
 
 # GSSAPI options
 #GSSAPIAuthentication no
 #GSSAPICleanupCredentials yes
-
-X11Forwarding no
-X11DisplayOffset 10
-PrintMotd no
-PrintLastLog yes
-TCPKeepAlive yes
-#UseLogin no
-
-#MaxStartups 10:30:60
-#Banner /etc/issue.net
-
-# Allow client to pass locale environment variables
-AcceptEnv LANG LC_*
-
-Subsystem sftp /usr/lib/openssh/sftp-server
+#GSSAPIStrictAcceptorCheck yes
+#GSSAPIKeyExchange no
 
 # Set this to 'yes' to enable PAM authentication, account processing,
 # and session processing. If this is enabled, PAM authentication will
@@ -104,9 +94,44 @@ Subsystem sftp /usr/lib/openssh/sftp-server
 # and ChallengeResponseAuthentication to 'no'.
 UsePAM yes
 
-# Maximum number of authentication attempts permitted per connection
-MaxAuthTries 3
+#AllowAgentForwarding yes
+#AllowTcpForwarding yes
+#GatewayPorts no
+#X11Forwarding yes
+#X11DisplayOffset 10
+#X11UseLocalhost yes
+#PermitTTY yes
+PrintMotd no
+#PrintLastLog yes
+#TCPKeepAlive yes
+#UseLogin no
+#UsePrivilegeSeparation sandbox
+#PermitUserEnvironment no
+#Compression delayed
+#ClientAliveInterval 0
+#ClientAliveCountMax 3
+#UseDNS no
+#PidFile /var/run/sshd.pid
+#MaxStartups 10:30:100
+#PermitTunnel no
+#ChrootDirectory none
+#VersionAddendum none
+
+# no default banner path
+#Banner none
+
+# Allow client to pass locale environment variables
+AcceptEnv LANG LC_*
+
+# override default of no subsystems
+Subsystem	sftp	/usr/lib/openssh/sftp-server
 
+# Example of overriding settings on a per-user basis
+#Match User anoncvs
+#	X11Forwarding no
+#	AllowTcpForwarding no
+#	PermitTTY no
+#	ForceCommand cvs server
 {% if ssh_allowed_users %}
 # Define users allowed to login
 AllowUsers {{ ssh_allowed_users | join(' ') }}

+ 123 - 0
roles/common/templates/ssh/sshd_config.legacy.j2

@@ -0,0 +1,123 @@
+{% if ansible_prolog -%}
+{% from 'templates/ansible/prolog.j2' import prolog with context %}
+{{ prolog() }}
+{% endif -%}
+# Package generated configuration file
+# See the sshd_config(5) manpage for details
+
+# What ports, IPs and protocols we listen for
+{% for port in ssh_ports %}
+Port {{ port }}
+{% endfor %}
+
+# Use these options to restrict which interfaces/protocols sshd will bind to
+#ListenAddress ::
+#ListenAddress 0.0.0.0
+Protocol 2
+# HostKeys for protocol version 2
+HostKey /etc/ssh/ssh_host_rsa_key
+HostKey /etc/ssh/ssh_host_dsa_key
+{% if ansible_lsb.major_release|int >= 7 %}
+HostKey /etc/ssh/ssh_host_ecdsa_key
+{% endif %}
+{% if ansible_lsb.major_release|int >= 8 %}
+HostKey /etc/ssh/ssh_host_ed25519_key
+{% endif %}
+#Privilege Separation is turned on for security
+UsePrivilegeSeparation yes
+
+{% if not ssh_usedns %}
+# Enable/Disable reverse DNS check
+# Avois long lag in case of IPv6 connection with no reverse configured
+UseDns no
+{% endif %}
+
+# Lifetime and size of ephemeral version 1 server key
+KeyRegenerationInterval 3600
+ServerKeyBits 1024
+
+# Logging
+SyslogFacility AUTH
+LogLevel INFO
+
+# Authentication:
+LoginGraceTime 120
+PermitRootLogin without-password
+StrictModes yes
+
+RSAAuthentication yes
+PubkeyAuthentication yes
+#AuthorizedKeysFile	%h/.ssh/authorized_keys
+
+# Don't read the user's ~/.rhosts and ~/.shosts files
+IgnoreRhosts yes
+# For this to work you will also need host keys in /etc/ssh_known_hosts
+RhostsRSAAuthentication no
+# similar for protocol version 2
+HostbasedAuthentication no
+# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
+#IgnoreUserKnownHosts yes
+
+# To enable empty passwords, change to yes (NOT RECOMMENDED)
+PermitEmptyPasswords no
+
+# Change to yes to enable challenge-response passwords (beware issues with
+# some PAM modules and threads)
+ChallengeResponseAuthentication no
+
+# Change to no to disable tunnelled clear text passwords
+#PasswordAuthentication yes
+
+# Kerberos options
+#KerberosAuthentication no
+#KerberosGetAFSToken no
+#KerberosOrLocalPasswd yes
+#KerberosTicketCleanup yes
+
+# GSSAPI options
+#GSSAPIAuthentication no
+#GSSAPICleanupCredentials yes
+
+X11Forwarding no
+X11DisplayOffset 10
+PrintMotd no
+PrintLastLog yes
+TCPKeepAlive yes
+#UseLogin no
+
+#MaxStartups 10:30:60
+#Banner /etc/issue.net
+
+# Allow client to pass locale environment variables
+AcceptEnv LANG LC_*
+
+Subsystem sftp /usr/lib/openssh/sftp-server
+
+# Set this to 'yes' to enable PAM authentication, account processing,
+# and session processing. If this is enabled, PAM authentication will
+# be allowed through the ChallengeResponseAuthentication and
+# PasswordAuthentication.  Depending on your PAM configuration,
+# PAM authentication via ChallengeResponseAuthentication may bypass
+# the setting of "PermitRootLogin without-password".
+# If you just want the PAM account and session checks to run without
+# PAM authentication, then enable this but set PasswordAuthentication
+# and ChallengeResponseAuthentication to 'no'.
+UsePAM yes
+
+# Maximum number of authentication attempts permitted per connection
+MaxAuthTries 3
+
+{% if ssh_allowed_users %}
+# Define users allowed to login
+AllowUsers {{ ssh_allowed_users | join(' ') }}
+{% endif %}
+
+{% if not ssh_allowed_users and ssh_allowed_groups %}
+# Define users groups allowed to login
+AllowGroups {{ ssh_allowed_groups | join(' ') }}
+{% endif %}
+
+{% if ssh_local_config is defined and ssh_local_config %}
+# Additional parameters
+{{ ssh_local_config|join('\n') }}
+{% endif %}