openssh

# see https://infosec.mozilla.org/guidelines/openssh.html 
 
##########
cp /etc/ssh/moduli /etc/ssh/moduli.orig
awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.tmp && mv /etc/ssh/moduli.tmp /etc/ssh/moduli
sed -i -e 's/#HostKey/HostKey/g' /etc/ssh/sshd_config
sed -i -e 's/#PubkeyAuthentication/PubkeyAuthentication/g' /etc/ssh/sshd_config
sed -i -e 's/#LogLevel INFO/LogLevel VERBOSE/g' /etc/ssh/sshd_config
sed -i -e 's/#PrintLastLog yes/PrintLastLog yes/g' /etc/ssh/sshd_config
echo KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 >> /etc/ssh/sshd_config
echo Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr >> /etc/ssh/sshd_config
echo MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com >> /etc/ssh/sshd_config
systemctl restart sshd.service
#########
 
# Supported HostKey algorithms by order of preference. 
 HostKey /etc/ssh/ssh_host_ed25519_key 
 HostKey /etc/ssh/ssh_host_rsa_key 
 HostKey /etc/ssh/ssh_host_ecdsa_key 

KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,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,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com 
 
# Password based logins are disabled - only public key based logins are allowed. 
 AuthenticationMethods publickey 
 PubkeyAuthentication yes
 AuthorizedKeysFile .ssh/authorized_keys
 #PasswordAuthentication yes
 UsePAM yes
 
 # LogLevel VERBOSE logs user's key fingerprint on login. Needed to have a clear audit track of which key was using to log in. 
 LogLevel VERBOSE 
 
 # Log sftp level file access (read/write/etc.) that would not be easily logged otherwise. 
 Subsystem sftp  /usr/lib/ssh/sftp-server -f AUTHPRIV -l INFO 

 # Root login IS allowed 
 PermitRootLogin Yes 
 
 # Use kernel sandbox mechanisms where possible in unprivileged processes 
 # Systrace on OpenBSD, Seccomp on Linux, seatbelt on MacOSX/Darwin, rlimit elsewhere. 
 UsePrivilegeSeparation sandbox
EOF
awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.tmp && mv /etc/ssh/moduli.tmp /etc/ssh/moduli