Configure your DNS with a hostname pointing to the IP that has been assigned to your instance. As doing so depends on who your DNS provider is, documenting this is beyond the scope of this document.
Locally create a SSH keypair (or keypairs) if you don’t already have one. See one of the many guides on the internet if you need more information, for example:
In your OVH Web Control Panel (https://xx.ovh.com/manager, where xx is the ISO two letter country code for your OVH billing/admin), in your account information (the menu that appears when you click on your name on the top-right, select ‘My Account’), select ‘My SSH Keys’, then ‘Add an SSH key’ - for a more complete guide see OVH’s guide configuring SSH keys. It is recommended to use a separate SSH key here rather than the key you will use during regular operation.
Change your server’s hostname for OVH purposes:
Select Cloud|Servers|<your new server>
Under the ‘Configuration’ section click on the circle with
...to right of the current hostname (in the row titled ‘Name’)
Click on ‘Modify’
Enter your new hostname (the DNS you configured above).
In ‘IP’ section for the row ‘Reverse DNS’ select ‘…’ and configure your IP(s) to point to your hostname (only one hostname per address family (ipv4/ipv6).
Reinstall your VPS with CentOS 7 – you will be prompted for the SSH keys to include in the image; they will be used to allow public key root login; also deselect ‘email me my authentication/credentials’. It is recommended to use a separate SSH for this initial deployment than for regular use.
After OS Install Completes
hostname: <default-hostname>to be your desired hostname.
ssh_pwauth: 0(after setting up public/private keypair, below).
Set hostname for instance:
hostnamectl set-hostname new-hostname
/etc/hostshas your IP (v4 and/or v6) to hostname mapping
127.0.0.1 localhost xxx.xxx.xxx.xxxx exhost.example.com exhost # If you wish to support ipv6 ::1 localhost abcd:0124:ef56:789a::aaaa exhost.example.com exhost
Add a regular user who is a member of ‘adm’, ‘systemd-journal’, ‘wheel’ and allow only public/private key login for that user.
adduser -U -G adm,systemd-journal,wheel username
Set the password for that user:
Switch to that user:
su - username
From you local host copy your regular operating SSH public key to the user you just created:
scp ssh-key.pub email@example.com:.ssh/authorized_keys
Back on the VPS as the regular user you created:
chmod 600 ~/.ssh/authorized_keys
From your local host login to the VPS using the private key associated with the public key you just copied to the VPS:
ssh -i ssh-key firstname.lastname@example.org. You should get to a shell prompt without having to enter a password for the user (you may have to enter the SSH key’s password, however). If not troubleshoot and fix what is wrong before going on to the next step.
Disable password authentication by editing
PasswordAuthentication nois set and not
PasswordAuthentication yes. Use the user you created to do this via sudoedit. This verifies that you can obtain root through this user.
Disable root logins via SSH: Edit
To avoid log spam from failed SSH brute force attempts change the SSH port (NB This isn’t a real security measure, it just avoids having your journal filled with ‘script kiddy’ level failures — you are using SSH public keys, not passwords of course).
Tell SELinux to allow SSH on your new port (we use 28322 for this example: 10000-65535 are mostly safe although there may be ports already in use; use
ss -lutto check your ports in use)
semanage port -a -t ssh_port_t -p tcp 28332
Update SSH config to use the new port by changing the
Port 22directive in
Configure firewall logging by running
Allow the new port through your firewall:
firewall-cmd --permanent --new-service=altssh firewall-cmd --permanent --service=altssh --add-port=28332/tcp firewall-cmd --permanent --add-service altssh firewall-cmd --complete-reload
Restart SSH (
systemctl restart sshd)
Login again (a second session) using the new port (e.g.
ssh -p 28332 your-user@your-dns-address-or-ip- address).
Permanently enable firewall in VPS:
systemctl enable --now firewalld.
Exit all SSH sessions except the last one you started.
Enable OVH Firewall (see OVH docs for this; this reduces the load on your VPS/VM by letting OVH handle the majority of firewall traffic): See OVH Firewall Network (anti-DDOS)
Install useful admin tools
- byobu (pre-installed on Ubuntu / Docker on Ubuntu
byobu-config(as each user for which you wish to use byobu
byobu-enable(for each user for which you wish to byobu to launch on logon; it is not recommended to do this for root as there is a potential for for getting locked out of the root account in certain error scenarios).
touch ~/.byobu/.always-select(if you want to be prompted to resume an old session (if present) and otherwise start a new session when byobu launches.
- Recommend having a
$HOME/.vimrcwith things like
- Recommend having a
- byobu (pre-installed on Ubuntu / Docker on Ubuntu images)
Enable SELinux if it’s not enabled
/etc/sysconfig/selinuxso that it has the line
Edit /etc/sysconfig/network-scripts/ifcfg-eth0 (only needed if you wish to support ipv6).
BOOTPROTO=dhcp DEVICE=eth0 HWADDR=<macaddr> ONBOOT=yes TYPE=Ethernet USERCTL=no IPV6INIT=yes IPV6_AUTOCONF=no IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6ADDR=<ipv6-addr/cidr> IPV6_DEFAULTGW=<ipv6-gateway-addr> ZONE=<firewall-zone>
Enable ipv6 (if wanted) by adding the following to
/etc/ sysconfig/network. (Obviously you only do this if you’re supporting ipv6):
/etc/cloud/cloud.cfg.d/00_disable_cloud_init_networking.cfg. Only if you’ve done the manual network configuration above.
network: config: disabled
Allow SLA monitoring from OVH
- In your control panel find the SLA address ranges to allow, and issue a command similar to the following for each range:
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT_direct 1 -s <range> -j ACCEPT
epel-releaseto get EPEL repository (
yum install epel-release)
/etc/yum/yum-cron- hourly.confto suit your preferences.