{"id":108,"date":"2017-01-04T00:00:35","date_gmt":"2017-01-03T14:00:35","guid":{"rendered":"http:\/\/www.codenkeg.com\/blog\/?p=108"},"modified":"2017-01-24T01:19:29","modified_gmt":"2017-01-23T15:19:29","slug":"setting-up-a-server-at-linode","status":"publish","type":"post","link":"http:\/\/www.codenkeg.com\/blog\/2017\/01\/04\/setting-up-a-server-at-linode\/","title":{"rendered":"Setting up a server at Linode"},"content":{"rendered":"<h2>Getting started<\/h2>\n<p><a href=\"https:\/\/www.linode.com\/docs\/getting-started\" target=\"_blank\">(Linode: Getting Started)<\/a><br \/>\n<a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/additional-recommended-steps-for-new-ubuntu-14-04-servers\" target=\"_blank\">(Digital Ocean: Additional Recommended Steps for New Ubuntu 14.04 Servers)<\/a><\/p>\n<ol>\n<li>Sign up<\/li>\n<li>Add a Linode\n<ul>\n<li>Select<br \/>\n<code>Linode 2048<\/code><\/li>\n<li>Select<br \/>\n<code>Location<\/code><\/li>\n<li>Click<br \/>\n<code>Add this Linode!<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Click <code>linodexxxxxxx<\/code><\/li>\n<li>Click <code>Deploy an Image<\/code><\/li>\n<li>Cofigure deployment\n<ul>\n<li>Image <code>Ubuntu 16.04 LTS<\/code><\/li>\n<li>Deployment Disk Size max<\/li>\n<li>Swap Disk <code>512MB<\/code><\/li>\n<li>Root Password <code>\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022<\/code><\/li>\n<li>Click <code>Deploy<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Boot\n<ul>\n<li>Click <code>Boot<\/code><\/li>\n<li>Confirm boot<\/li>\n<\/ul>\n<\/li>\n<li>SSH\n<ul>\n<li>Click <code>Remote Access<\/code> tab<\/li>\n<li>Click SSH Access link <code>ssh root@xxx.xxx.xxx.xxx<\/code><\/li>\n<li>Click <code>Allow<\/code> to open in Terminal<\/li>\n<li>Terminal should open (first run has some additional Allows and yeses)<\/li>\n<li>Enter password in Terminal<\/li>\n<\/ul>\n<\/li>\n<li>Update software via ssh <code>apt-get update &&\u00a0apt-get upgrade<\/code><\/li>\n<li>Choose a newhostname and set it <code>hostnamectl set-hostname newhostname<\/code><\/li>\n<li>Update \/etc\/hosts\n<ul>\n<li><code>nano \/etc\/hosts<\/code><\/li>\n<li>Add IP address and newhostname separated by a tab below:<br \/>\n<code>127.0.0.1 localhost<br \/>\n127.0.1.1 ubuntu.members.linode.com<\/code><br \/>\n<code>xxx.xxx.xxx.xxx newhostname<\/code><\/li>\n<li>Exit <code>^X<\/code><\/li>\n<li>Save <code>y<\/code><\/li>\n<li>File Name to Write: \/etc\/hosts <code>\u21a9\ufe0e<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Setup timezone (I like UTC)\n<ul>\n<li><code>dpkg-reconfigure tzdata<\/code><\/li>\n<li>Arrow around, \u21a9\ufe0e, \u238b<\/li>\n<\/ul>\n<\/li>\n<li>Setup NTP network time synchronisation\n<ul>\n<li><code>sudo apt-get install ntp<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h2>Securing the server<\/h2>\n<p><a href=\"https:\/\/www.linode.com\/docs\/security\/securing-your-server\" target=\"_blank\">(Linode: Securing Your Server)<\/a><\/p>\n<ol>\n<li>Login\n<ul>\n<li><code>ssh root@xxx.xxx.xxx.xxx<\/code><\/li>\n<li>Password<\/li>\n<\/ul>\n<\/li>\n<li>Add a limited user account\n<ul>\n<li><code>adduser example_user<\/code><\/li>\n<li>Password<\/li>\n<li>Retype password<\/li>\n<li>Enter Full name<\/li>\n<li>Room number<\/li>\n<li>Work phone number<\/li>\n<li>Home phone number<\/li>\n<li>Other<\/li>\n<li>Is the info correct? <code>Y<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Add user to admin group\n<ul>\n<li><code>adduser example_user sudo<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Logout <code>exit<\/code><\/li>\n<li>Login again, but as the new user\n<ul>\n<li><code>ssh example_user@xxx.xxx.xxx.xxx<\/code><\/li>\n<li>Password<\/li>\n<\/ul>\n<\/li>\n<li>Harden SSH access\n<ul>\n<li>Create an ssh directory on the Linode machine<br \/>\n<code>mkdir -p ~\/.ssh && sudo chmod -R 700 ~\/.ssh\/<\/code><\/li>\n<li>(open a new Terminal window)<\/li>\n<li>Check if you have an RSA key-pair on your local Mac<br \/>\n<code>ls ~\/.ssh\/id_rsa*<\/code><br \/>\nIf NOT,<br \/>\n<code>ssh-keygen -b 4096<\/code><\/li>\n<li>Copy the public key from your Mac to the Linode machine<br \/>\n<code>scp ~\/.ssh\/id_rsa.pub example_user@xxx.xxx.xxx.xxx:~\/.ssh\/authorized_keys<\/code><\/li>\n<li>Swap back to linode terminal<\/li>\n<li>Set permissions on the Linode machine<br \/>\n<code>sudo chmod 700 -R ~\/.ssh && chmod 600 ~\/.ssh\/authorized_keys<\/code><\/li>\n<li>Logout<br \/>\n<code>exit<\/code><\/li>\n<li>Login again, as the new user<br \/>\n<code>ssh example_user@xxx.xxx.xxx.xxx<\/code><br \/>\n(no password required)<\/li>\n<\/ul>\n<\/li>\n<li>Edit SSH Daemon Options\n<ul>\n<li><code>sudo nano \/etc\/ssh\/sshd_config<\/code><\/li>\n<li>Password<\/li>\n<li>Disallow root logins over SSH: change <code>PermitRootLogin yes<\/code> to <code>PermitRootLogin no<\/code><\/li>\n<li>Maybe disable SSH password authentication: change <code>PasswordAuthentication yes<\/code> to <code>PasswordAuthentication no<\/code><\/li>\n<li>Restart SSH Daemon <code>sudo systemctl restart sshd<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Automatic updates <a href=\"https:\/\/help.ubuntu.com\/lts\/serverguide\/automatic-updates.html\" target=\"_blank\">(Ubuntu: Automatic Updates)<\/a>\n<ul>\n<li>Install package <code>sudo apt install unattended-upgrades<\/code><\/li>\n<li>Make schedule <code>sudo nano \/etc\/apt\/apt.conf.d\/10periodic<\/code><br \/>\nAdd lines:<br \/>\n<code>APT::Periodic::Update-Package-Lists \"1\";<\/code><br \/>\n<code>APT::Periodic::Download-Upgradeable-Packages \"1\";<\/code><br \/>\n<code>APT::Periodic::AutocleanInterval \"7\";<\/code><br \/>\n<code>APT::Periodic::Unattended-Upgrade \"1\";<\/code><br \/>\nExit <code>^X<\/code><br \/>\nSave <code>y<\/code><br \/>\nWrite <code>\u21a9\ufe0e<\/code><\/li>\n<li>Setup notifications <code>sudo apt install apticron<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Enable firewall<br \/>\n<code>sudo ufw allow proto tcp from any to any port 22<\/code><br \/>\n<code>sudo ufw enable<\/code><\/li>\n<li>Use Fail2Ban to block multiple unsuccessful login attempts<br \/>\n<a href=\"https:\/\/www.linode.com\/docs\/security\/using-fail2ban-for-security\" target=\"_blank\">(Linode: Using Fail2ban to Secure Your Server)<\/a><\/li>\n<li>Install Fail2ban<br \/>\n<code>sudo apt-get install fail2ban<\/code><\/li>\n<li>Configure fail2ban\n<ul>\n<li><code>cd \/etc\/fail2ban<\/code><\/li>\n<li>Copy fail2ban.conf file and # all lines<br \/>\n<code>sed 's\/\\(^[[:alpha:]]\\)\/# \\1\/' fail2ban.conf | sudo tee fail2ban.local &> \/dev\/null<\/code><\/li>\n<li>Copy jail.conf file and # all lines<br \/>\n<code>sed 's\/\\(^[a-z tab]\\)\/# \\1\/' jail.conf | sudo tee jail.local &> \/dev\/null<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h2>Point a domain name at your new IP<\/h2>\n<p><a href=\"https:\/\/www.linode.com\/docs\/networking\/dns\/dns-manager-overview\" target=\"_blank\">(Linode: DNS Manager Overview)<\/a><br \/>\n<a href=\"https:\/\/www.linode.com\/docs\/networking\/dns\/common-dns-configurations\" target=\"_blank\">(Linode: Common DNS Configurations)<\/a><\/p>\n<ol>\n<li>Login to your domain registrar and change the zone file (DNS management) to point to Linode&#8217;s name servers.\n<ul>\n<li>ns1.linode.com<\/li>\n<li>ns2.linode.com<\/li>\n<li>ns3.linode.com<\/li>\n<li>ns4.linode.com<\/li>\n<li>ns5.linode.com<\/li>\n<\/ul>\n<\/li>\n<li>Create a new domain zone\n<ul>\n<li>Login to Linode Manager<\/li>\n<li>Click on <code>DNS Manager<\/code> tab<\/li>\n<li>Click <code>Add a domain zone<\/code><\/li>\n<li>Domain <code>your domain<\/code><\/li>\n<li>SOA Email <code>A good email address<\/code><\/li>\n<li>Insert Default Records <code>Yes, ...<\/code><\/li>\n<li>Click <code>Add a Master Zone<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h2>Mini series<\/h2>\n<ol>\n<li><a href=\"http:\/\/www.codenkeg.com\/blog\/2017\/01\/04\/setting-up-a-server-at-linode\/\" target=\"_blank\">Setting up a server at Linode<\/a><\/li>\n<li><a href=\"http:\/\/www.codenkeg.com\/blog\/2017\/01\/06\/install-lets-encrypt-to-create-ssl-certificates\/\" target=\"_blank\">Install Let\u2019s Encrypt to Create SSL Certificates on Ubuntu<\/a><\/li>\n<li><a href=\"http:\/\/www.codenkeg.com\/blog\/2017\/01\/06\/setting-up-mongodb-on-ubuntu\/\" target=\"_blank\">Setting up MongoDB on Ubuntu<\/a><\/li>\n<li><a href=\"http:\/\/www.codenkeg.com\/blog\/2017\/01\/24\/setting-up-nginx-on-ubuntu-for-parse-server\/\" target=\"_blank\">Setting up nginx on Ubuntu for parse-server<\/a><\/li>\n<li><a href=\"http:\/\/www.codenkeg.com\/blog\/2017\/01\/06\/setting-up-parse-server-on-ubuntu\/\" target=\"_blank\">Setting up parse-server on Ubuntu<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Getting started (Linode: Getting Started) (Digital Ocean: Additional Recommended Steps for New Ubuntu 14.04 Servers) Sign up Add a Linode Select Linode 2048 Select Location Click Add this Linode! Click linodexxxxxxx Click Deploy an Image Cofigure deployment Image Ubuntu 16.04 LTS Deployment Disk Size max Swap Disk 512MB Root Password \u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022 Click Deploy Boot Click &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.codenkeg.com\/blog\/2017\/01\/04\/setting-up-a-server-at-linode\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Setting up a server at Linode&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_newsletter_tier_id":0,"jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[22],"tags":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p7VdP6-1K","_links":{"self":[{"href":"http:\/\/www.codenkeg.com\/blog\/wp-json\/wp\/v2\/posts\/108"}],"collection":[{"href":"http:\/\/www.codenkeg.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.codenkeg.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.codenkeg.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.codenkeg.com\/blog\/wp-json\/wp\/v2\/comments?post=108"}],"version-history":[{"count":10,"href":"http:\/\/www.codenkeg.com\/blog\/wp-json\/wp\/v2\/posts\/108\/revisions"}],"predecessor-version":[{"id":208,"href":"http:\/\/www.codenkeg.com\/blog\/wp-json\/wp\/v2\/posts\/108\/revisions\/208"}],"wp:attachment":[{"href":"http:\/\/www.codenkeg.com\/blog\/wp-json\/wp\/v2\/media?parent=108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.codenkeg.com\/blog\/wp-json\/wp\/v2\/categories?post=108"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.codenkeg.com\/blog\/wp-json\/wp\/v2\/tags?post=108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}