<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Osman Akin</title>
    <description>The latest articles on DEV Community by Osman Akin (@ossniper).</description>
    <link>https://dev.to/ossniper</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F863253%2F00ed3a42-e400-44f8-b53c-af1eed0280ba.jpeg</url>
      <title>DEV Community: Osman Akin</title>
      <link>https://dev.to/ossniper</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ossniper"/>
    <language>en</language>
    <item>
      <title>AWS VPN (Client VPN) with VGW</title>
      <dc:creator>Osman Akin</dc:creator>
      <pubDate>Tue, 08 Nov 2022 14:13:51 +0000</pubDate>
      <link>https://dev.to/aws-builders/aws-vpn-client-vpn-with-vgw-5g6l</link>
      <guid>https://dev.to/aws-builders/aws-vpn-client-vpn-with-vgw-5g6l</guid>
      <description>&lt;p&gt;A &lt;strong&gt;Virtual Private Network (VPN)&lt;/strong&gt; apparently is a private secure connection between two devices that is achieved using encryption over a public network, typically the internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We will be working on 2 project:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AWS Client VPN - Client-to-Site(AWS Cloud).&lt;/li&gt;
&lt;li&gt;AWS Site-to-Site - On-premises/cloud-to-site(AWS Cloud).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What is AWS Client VPN?&lt;/strong&gt; AWS Client VPN is a managed client-based VPN service that enables you to securely access AWS resources and resources in your on-premises network - AWS Documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project 1:&lt;/strong&gt;&lt;br&gt;
In this task, we will be working with AWS client VPN.&lt;/p&gt;

&lt;p&gt;Outlines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I have my Windows 10 Laptop on-premises.&lt;/li&gt;
&lt;li&gt;I have a windows server in a private subnet in us-east-2 (Ohio).&lt;/li&gt;
&lt;li&gt;We will need SSL for mutual authentication, this can be created using EasyRSA on cmd and upload to AWS Certificate Manager (ACM)&lt;/li&gt;
&lt;li&gt;I have my VPC created which consist of 2 subnet and 2 route table (private and public).&lt;/li&gt;
&lt;li&gt;I have my server launched in the private subnet which can't be accessed from the internet. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;STEPS:&lt;/strong&gt;&lt;br&gt;
**Login to your AWS account and search VPC, click on VPC.&lt;br&gt;
On the left hand side. Expand Virtual Private Network (VPN)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on Virtual Private Gateway (VGW)**
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G24hliZR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aolm2jx52yw95s5ytnbx.PNG" alt="Image description" width="800" height="395"&gt;
&lt;/li&gt;
&lt;li&gt;Under VGW. Click create virtual private gateway
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0QEiZGaD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0opxbp6l2941yuoozgoq.PNG" alt="Image description" width="800" height="492"&gt;
&lt;/li&gt;
&lt;li&gt;Once created. click on Action then select Attach to VPC.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kL8s2XFb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lwiewybi0ovr90e9k9g4.PNG" alt="Image description" width="748" height="402"&gt;
&lt;/li&gt;
&lt;li&gt;Under state "Attaching", refresh and wait for few minute and state shows "Attached".
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R2owrhNc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7w7frwimmenxwcs0ckuw.PNG" alt="Image description" width="800" height="351"&gt;
&lt;strong&gt;On the left hand side. Expand Virtual Private Network (VPN)
Click on Customer Gateway.&lt;/strong&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vIzyKbQ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zq0alom5b5b9wdtvmc3o.PNG" alt="Image description" width="800" height="311"&gt;
Click create Customer Gateway.&lt;/li&gt;
&lt;li&gt;Input your ASN or leave default&lt;/li&gt;
&lt;li&gt;Enter your public IP address for customer device.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6fKB1NAX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/29o1oko76tiv46al7qhm.PNG" alt="Image description" width="662" height="614"&gt;
Create customer gateway. 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WBy1tQR8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pulhsox7owf4j4mf9li2.PNG" alt="Image description" width="800" height="314"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create certificates and keys and upload them to ACM&lt;/strong&gt;&lt;br&gt;
The following procedure installs Easy-RSA 3.x software and uses it to generate server and client certificates and keys and upload them to ACM.&lt;/p&gt;

&lt;p&gt;Copy the link and open in your broswer. Download the latest EasyRSA zip file for your windows and extract it..&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/OpenVPN/easy-rsa/releases"&gt;https://github.com/OpenVPN/easy-rsa/releases&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bzPte7ks--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lzwbe482d0ksabtylt6a.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bzPte7ks--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lzwbe482d0ksabtylt6a.PNG" alt="Image description" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open a command prompt and navigate to the location that the EasyRSA-3.x folder was extracted to.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pmybqpj7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/55nkdcoowk0nzi2tg81e.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pmybqpj7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/55nkdcoowk0nzi2tg81e.PNG" alt="Image description" width="800" height="352"&gt;&lt;/a&gt;&lt;br&gt;
Open the EasyRSA-Start.bat via CMD or Naviha=gate to the EasyRSA folder.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--za8pJ5wJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qmxx0seau4rqyifqmqcl.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--za8pJ5wJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qmxx0seau4rqyifqmqcl.PNG" alt="Image description" width="800" height="378"&gt;&lt;/a&gt;&lt;br&gt;
Run the following command to open the EasyRSA 3 shell.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initialize a new PKI environment.
# ./easyrsa init-pki
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rv883YEJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rvlwime6jyb4apz6oihh.PNG" alt="Image description" width="800" height="294"&gt;
&lt;/li&gt;
&lt;li&gt;To build a new certificate authority (CA), run this command and follow the prompts.
# ./easyrsa build-ca nopass
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cUrC85HM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k6nc5pcvr6lforwjkl5s.PNG" alt="Image description" width="800" height="340"&gt;
&lt;/li&gt;
&lt;li&gt;Generate the server certificate and key.
# ./easyrsa build-server-full server nopass
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--57ZaNlvc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xp8w0jl43p30t0mo4y1f.PNG" alt="Image description" width="800" height="518"&gt;
&lt;/li&gt;
&lt;li&gt;Generate the client certificate and key.
# ./easyrsa build-client-full client1.domain.tld nopass
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p2nQf8OF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vnwi7rg2uww44byv5rzg.PNG" alt="Image description" width="800" height="634"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;You can optionally repeat this step for each client (end user) that requires a client certificate and key.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Exit the EasyRSA 3 shell.&lt;/p&gt;

&lt;p&gt;I will create a custom folder by using the mkdir command, then copy the server certificate plus key and the client certificate plus key to the custom folder.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;C:\Program Files\EasyRSA-3.x&amp;gt; mkdir C:\custom_folder&lt;br&gt;
C:\Program Files\EasyRSA-3.x&amp;gt; copy pki\ca.crt C:\custom_folder&lt;br&gt;
C:\Program Files\EasyRSA-3.x&amp;gt; copy pki\issued\server.crt C:\custom_folder&lt;br&gt;
C:\Program Files\EasyRSA-3.x&amp;gt; copy pki\private\server.key C:\custom_folder&lt;br&gt;
C:\Program Files\EasyRSA-3.x&amp;gt; copy pki\issued\client1.domain.tld.crt C:\custom_folder&lt;br&gt;
C:\Program Files\EasyRSA-3.x&amp;gt; copy pki\private\client1.domain.tld.key C:\custom_folder&lt;br&gt;
C:\Program Files\EasyRSA-3.x&amp;gt; cd C:\custom_folder&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0pJmIQfb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xcbqsh1e665wptlwci76.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0pJmIQfb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xcbqsh1e665wptlwci76.PNG" alt="Image description" width="800" height="359"&gt;&lt;/a&gt;&lt;br&gt;
Upload the server certificate plus key and client certificate plus key to ACM. Be sure to upload them in the same Region in which you intend to create the Client VPN endpoint.&lt;/p&gt;

&lt;p&gt;On the Search Bar, search for ACM, click on ACM.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x_-APCJq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3r4z9ud7te2y4jalhzjl.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x_-APCJq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3r4z9ud7te2y4jalhzjl.PNG" alt="Image description" width="800" height="310"&gt;&lt;/a&gt;&lt;br&gt;
On ACM page, click on import a certificate.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YpPalGLb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ot0cc031qsui90nrl44d.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YpPalGLb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ot0cc031qsui90nrl44d.PNG" alt="Image description" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will navigate to my computer folder where i have the certificates and key, open with notepad to copy the details then paste on ACM.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D9pGNljR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/skzxuk5jh4t6r0ztjvhh.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D9pGNljR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/skzxuk5jh4t6r0ztjvhh.PNG" alt="Image description" width="800" height="312"&gt;&lt;/a&gt;&lt;br&gt;
First. I will copy and paste the server cert, key and ca into ACM and import&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1m9dRz-Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gbbcmcfd68o5b3znmwy8.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1m9dRz-Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gbbcmcfd68o5b3znmwy8.PNG" alt="Image description" width="800" height="143"&gt;&lt;/a&gt;&lt;br&gt;
Done. Next. i will copy the client cert, key and ca into ACM and import.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xy_JT_wy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uf1ztqip2tenk5jkqcew.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xy_JT_wy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uf1ztqip2tenk5jkqcew.PNG" alt="Image description" width="800" height="309"&gt;&lt;/a&gt;&lt;br&gt;
Both Certificates are on ACM and can be seen under list of certificates.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZUjWFU-i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zco9awnojklm0reqipbe.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZUjWFU-i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zco9awnojklm0reqipbe.PNG" alt="Image description" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's create the AWS Client VPN Endpoints&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FmD9tvJx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2zh3f7hjedtq04k255d.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FmD9tvJx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2zh3f7hjedtq04k255d.PNG" alt="Image description" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click create client VPN Endpoint.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Input the information like client IP address - private ip address that will be allocated to the client devices&lt;br&gt;
I selected mutual authentication using server and client certificate we created earlier via EasyRSA and ACM.&lt;br&gt;
You can select user-based authentication if you have active directory setup.&lt;br&gt;
I will recommend you enable split-tunnel. you can also enable connection logs for monitoring client connectivity and troubleshooting.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YunAJOdD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b1dsjjdtzf7y1lc4bu4h.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YunAJOdD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b1dsjjdtzf7y1lc4bu4h.PNG" alt="Image description" width="676" height="614"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G0Y6sCBe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s2c05tgbucn4bgnh21pi.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G0Y6sCBe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s2c05tgbucn4bgnh21pi.PNG" alt="Image description" width="800" height="572"&gt;&lt;/a&gt;&lt;br&gt;
Once you've filled the correct information. click create&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5OtZHpdQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cor0fp3tanuduiieqech.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5OtZHpdQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cor0fp3tanuduiieqech.PNG" alt="Image description" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While the status state is pending-association. &lt;br&gt;
Under Target network association. Click on associate target network&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JEIYju6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xmb7zz94fek4np4lgbm7.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JEIYju6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xmb7zz94fek4np4lgbm7.PNG" alt="Image description" width="800" height="224"&gt;&lt;/a&gt;&lt;br&gt;
Select the VPC where you have your server. and select the subnet then associate the target network.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CRxu-qZ1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5fc1h1qenubw5khpnme4.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CRxu-qZ1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5fc1h1qenubw5khpnme4.PNG" alt="Image description" width="708" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Under Association rules. Click on add association rule.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AFISJk16--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s2nit352e1r7acet11uw.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AFISJk16--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s2nit352e1r7acet11uw.PNG" alt="Image description" width="800" height="329"&gt;&lt;/a&gt;&lt;br&gt;
Enter the destination network, in my case i used the private subnet IPv4 CIDR address where my servers are located. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AQDxrXjV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j9ve69wybdvtijdmpfda.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AQDxrXjV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j9ve69wybdvtijdmpfda.PNG" alt="Image description" width="663" height="468"&gt;&lt;/a&gt;&lt;br&gt;
Once added, your client vpn endpoint status should now be "Available".&lt;/p&gt;

&lt;p&gt;Now head over to your private route table, under Route Propagation click on edit route propagation&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gbMiuj-f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jtnzn16ltvf88tf159vt.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gbMiuj-f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jtnzn16ltvf88tf159vt.PNG" alt="Image description" width="800" height="302"&gt;&lt;/a&gt;&lt;br&gt;
Enable Propagation for the virtual private gateway and save.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PvaGC9t0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bv0iz3weikkkrznqxa1s.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PvaGC9t0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bv0iz3weikkkrznqxa1s.PNG" alt="Image description" width="664" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now. Let's Download the Client configuration.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mriU3hdH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6iajut5ub830o1017f1y.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mriU3hdH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6iajut5ub830o1017f1y.PNG" alt="Image description" width="800" height="358"&gt;&lt;/a&gt;&lt;br&gt;
Once downloaded, open the downloaded-client-config.ovpn file as notepad.&lt;br&gt;
Scroll to the end of the page inbetween  and reneg-sec 0 input the cert and key.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7kQGCaWf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wjnp1lyqgj6fhvo3lqwl.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7kQGCaWf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wjnp1lyqgj6fhvo3lqwl.PNG" alt="Image description" width="415" height="248"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;e.g&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;br&gt;
&lt;br&gt;
client1.domain.tld cert&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
client1.domain.tld private key&lt;br&gt;
&lt;br&gt;
reneg-sec 0&lt;br&gt;
You copy and paste the client certificate and key then save the notepad. &lt;br&gt;
Download OpenVPN or AWS VPN Client&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2dy10usR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9kx3l5ih39yqyxsx7rz0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2dy10usR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9kx3l5ih39yqyxsx7rz0.png" alt="Image description" width="597" height="423"&gt;&lt;/a&gt;&lt;br&gt;
click on manage profiles, then Add Profile. Input a display name and attach the .ovpn file.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xasUmNT---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wwzhzqxa91vis87iexpz.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xasUmNT---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wwzhzqxa91vis87iexpz.PNG" alt="Image description" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Click Add Profile and connect. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_-BjdDnb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ezryk9fem2xzoertn8xo.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_-BjdDnb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ezryk9fem2xzoertn8xo.PNG" alt="Image description" width="774" height="229"&gt;&lt;/a&gt;&lt;br&gt;
The welcome Banner configured and VPN connected.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cCx26MRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w83xcu0rbkphsbr8p1uk.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cCx26MRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w83xcu0rbkphsbr8p1uk.PNG" alt="Image description" width="393" height="208"&gt;&lt;/a&gt;&lt;br&gt;
using ipconfig and see the IP address we configured for client IPV4&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Li-ILj-M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xdte20zploxq0mn3c05v.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Li-ILj-M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xdte20zploxq0mn3c05v.PNG" alt="Image description" width="552" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let access our server in the AWS cloud residing in a private subnet(us-east-2b)&lt;/p&gt;

&lt;p&gt;I will be connection via RDP port 3389 to my window server&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n1hpgqSa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qkel91epp8qwdod3ultx.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n1hpgqSa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qkel91epp8qwdod3ultx.PNG" alt="Image description" width="483" height="379"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KYDM-T3m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iprpumg9kyiume8ygn48.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KYDM-T3m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iprpumg9kyiume8ygn48.PNG" alt="Image description" width="391" height="393"&gt;&lt;/a&gt;&lt;br&gt;
Now i am successfully logged in and can perform task on the server.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zbdbkw_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/al3e2rtv0lcmom2f32pb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zbdbkw_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/al3e2rtv0lcmom2f32pb.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can have more than one server in the private subnet and access everyone of them via AWS VPN Client.&lt;/p&gt;

&lt;p&gt;Ciao! Thank you so much for reading and i hope my write up is informational. I will be writing on AWS Site-to-Site VPN real soon.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For more steps and guidelines. You can check out AWS Document: &lt;a href="https://docs.aws.amazon.com/vpn/latest/clientvpn-user/user-getting-started.html#install-client"&gt;https://docs.aws.amazon.com/vpn/latest/clientvpn-user/user-getting-started.html#install-client&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Setting Bulk Mail Server — using Sendy and AWS (SES &amp; Ubuntu Web Server)</title>
      <dc:creator>Osman Akin</dc:creator>
      <pubDate>Tue, 31 May 2022 09:55:39 +0000</pubDate>
      <link>https://dev.to/ossniper/setting-bulk-mail-server-using-sendy-and-aws-ses-ubuntu-web-server-3aim</link>
      <guid>https://dev.to/ossniper/setting-bulk-mail-server-using-sendy-and-aws-ses-ubuntu-web-server-3aim</guid>
      <description>&lt;p&gt;I started freelancing this month and was assigned this project by a client. It's quite interesting and not a stressful process.&lt;/p&gt;

&lt;p&gt;I am grateful to this genius who shared their experience. I decided to write about it due to some changes i observed while setting this up for my client. Also, There has been some update on amazon, the gui and some of the software installed. I attached a link to their blog below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's start:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Login to AWS account.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Select the region where emails will be generated. Although I ended up using the us-east-1 region. (At the right hand corner you will see your region and once you click on it you can select whichever region you want)&lt;/li&gt;
&lt;li&gt;Next - Click on services - Scroll and click on Networking &amp;amp; content delivery - click on VPC then on the left panel under security - you click on security group.&lt;/li&gt;
&lt;li&gt;Alternatively on the search for service - type VPC or EC2 - Scroll and you will see Security group&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Click Create Security Group.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enter the following details and rules:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Name: SendyMail-sg&lt;br&gt;
Description: HTTP, HTTPS, SSH, Virtualmin&lt;br&gt;
VPC: default&lt;br&gt;
Inbound Rule: HTTP - port 80, (Anywhere-Ipv4 or Custom)&lt;br&gt;
Inbound Rule: HTTPS - port 443, (Anywhere-Ipv4 or Custom)&lt;br&gt;
Inbound Rule: SSH - port 22, For security best practices (select My IP) — this will be used to SSH into the computer and only really should be your IP address. If you have multiple locations that you work from, you can add all.&lt;br&gt;
Inbound Rule: Custom TCP - Port 10000, For security best practices (select My IP) — this will be used to access Virtualmin&lt;br&gt;
Outbound Rule: Leave as default, There is no need to create any Outbound rules.&lt;br&gt;
Tag: key: Name, Value: sendyserver-sg&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UdnmOSZU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lk7ugt2o1h1unhq4gxdz.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UdnmOSZU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lk7ugt2o1h1unhq4gxdz.PNG" alt="Image description" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Click Create.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---WCUcUBf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/63pc5reqlw86jpy276hk.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---WCUcUBf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/63pc5reqlw86jpy276hk.PNG" alt="Image description" width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All done!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NEXT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create an EC2 Instance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Select region in my scenario, I stuck to N. Virginia (us-east-1). (At the right hand corner you will see your region and once you click on it you can select whichever region you want)&lt;/p&gt;

&lt;p&gt;Next - Click on services - Scroll and click on compute - Under Compute - click on EC2.&lt;br&gt;
Alternatively, on the search for service bar - type EC2 - Select EC2 from the services menu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JiTrFHvg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kpe42eqtv2so5mi6wjh4.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JiTrFHvg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kpe42eqtv2so5mi6wjh4.PNG" alt="Image description" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On EC2&lt;br&gt;
From the left-hand side menu, select Instances.&lt;br&gt;
Click Launch Instance.&lt;br&gt;
Select Launch Instance and click on launch instance&lt;br&gt;
You will then be asked to Choose an Amazon Machine Image (AMI) and instance type, instance name e.t.c.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ju1cMLP0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/axlxfi0u6h9bzn3q39bg.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ju1cMLP0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/axlxfi0u6h9bzn3q39bg.PNG" alt="Image description" width="629" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Name - Sendywebserver&lt;br&gt;
Under Application and OS images (AMI):&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Select Ubuntu&lt;br&gt;
Choose, Ubuntu, 18.04 LTS (HVM).&lt;br&gt;
Architecture type - 64-bit (x86) - (Leave default)&lt;/em&gt;&lt;br&gt;
**&lt;br&gt;
Instance type:&lt;br&gt;
**&lt;em&gt;Choose t2.small&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Pair login:&lt;/strong&gt;&lt;br&gt;
There are 2 options - &lt;strong&gt;&lt;em&gt;Create a new key pair or choose existing Keypair.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They keypair are your keys to connect to an ec2 instance. Please keep it safe.&lt;/p&gt;

&lt;p&gt;If you haven't use aws before or a new account, Create a new key pair, give it a name and download the file or choose existing Key Pair&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network Setting:&lt;/strong&gt;&lt;br&gt;
click on edit, select vpc, subnet, enable auto-assign public-ip.&lt;br&gt;
select existing security group - &lt;strong&gt;&lt;em&gt;choose  the security group created earlier.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure storage:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;I selected 30GB - gp2&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advanced details:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Termination protection - Enable&lt;/em&gt;&lt;/strong&gt; (Protect against accidental termination.)&lt;/p&gt;

&lt;p&gt;There are a lot of settings here but I won't be going into them for now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uT0tlX16--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q1c2nw1l1psec69c8q9k.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uT0tlX16--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q1c2nw1l1psec69c8q9k.PNG" alt="Image description" width="730" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Verify all selected are correct. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;click Launch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jUJcMPdR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/95h366qiam23l13rdf5k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jUJcMPdR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/95h366qiam23l13rdf5k.png" alt="Image description" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LHHS5HKa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/siteccgd7huqmj3sflu2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LHHS5HKa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/siteccgd7huqmj3sflu2.png" alt="Image description" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setting up SSH Access to your AWS Ubuntu Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use WSL on my Windows PC.&lt;/p&gt;

&lt;p&gt;On linux : Open Terminal window &lt;/p&gt;

&lt;p&gt;copy or mv the keypair to your current working directory - &lt;/p&gt;

&lt;p&gt;Input: chmod 400   then press Enter&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u7UpvAaQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ml95wnepbo0puwh04yu3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u7UpvAaQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ml95wnepbo0puwh04yu3.png" alt="Image description" width="608" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Login to the Ubuntu server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Input: ssh -i  and your webserver public ipv4 dns. Then press Enter&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;e.g ssh -i cloudnet.pem ec2-35-174-106-112.compute-1.amazonaws.com&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You will be asked to accept the ECDSA key fingerprint: type and Enter: Yes&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_NG3N2PA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jcnb1ufa39b7cv8uytac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_NG3N2PA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jcnb1ufa39b7cv8uytac.png" alt="Image description" width="800" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should now be logged into your Ubuntu server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2DUdW-Gx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y7333rsp31hvdj24052w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2DUdW-Gx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y7333rsp31hvdj24052w.png" alt="Image description" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are some extra steps which are efficient to save your fingerprint so it does not ask you every time you want to login and also how to copy your keypair into sshd files so you don't have to type your keypair everytime you want to login.. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attach Elastic IP To Your AWS Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An Elastic IP address is a static/constant IPv4 address.designed for dynamic cloud computing.&lt;br&gt;
Elastic IPs are totally free, as long as they are being used by an instance. However amazon will charge you if reserved and not in use.&lt;/p&gt;

&lt;p&gt;Task 1: Attach an elastic ip address to your server&lt;br&gt;
Task 2: Creating a DNS record in Cpanel or Godaddy or route 53.&lt;/p&gt;

&lt;p&gt;On your EC2 dashboard on AWS, Under Network &amp;amp; Security - select Elastic IPs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pcFt9gcG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z3jgmlp6uyzcnk1xfdbf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pcFt9gcG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z3jgmlp6uyzcnk1xfdbf.png" alt="Image description" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click Allocate Elastic IP address.&lt;br&gt;
Select Amazon’s pool of IPv4 addresses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D2rNi-O1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1cc3c4lc7lqgpbdosk7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D2rNi-O1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1cc3c4lc7lqgpbdosk7h.png" alt="Image description" width="776" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click Allocate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sDX0UBDH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dhsui1aqjr9617hyfkl8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sDX0UBDH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dhsui1aqjr9617hyfkl8.png" alt="Image description" width="800" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now click on the selection box to select the newly allocated IP address then click on Actions, A list of options will be displayed, click on Associate Elastic IP Address.&lt;br&gt;
Select your Ec2 Instance (Ubuntu server for sendy)&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AoHfWsgs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g4ofxddblnfbhzyj4soh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AoHfWsgs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g4ofxddblnfbhzyj4soh.png" alt="Image description" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on Associate.&lt;/p&gt;

&lt;p&gt;Go back to your Ec2 Dashboard, and select the ubuntu server for sendy, Verify the Public IP address is now your associated Elastic IP address.&lt;br&gt;
 &lt;br&gt;
&lt;strong&gt;Associating Elastic IP to your domain’s DNS records&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You have to associate your domain or subdomain with this IP address. This is the domain you will use to access Sendy. It's  recommended creating it as a subdomain to your website, e.g sendy. since your main domain is where you would ideally host your website.&lt;/p&gt;

&lt;p&gt;Now login to your domain host control panel and navigate to DNS settings/records.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Create an A record. *&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Record Name: sendy.&lt;br&gt;
Record Type: A Record&lt;br&gt;
Content|IP address: Paste the Elastic IP address. &lt;br&gt;
TTL: Leave as default or set to 300&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Click Add Record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updating to your sendy server.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open your terminal window (Mac or Linux), Putty (Windows)&lt;/p&gt;

&lt;p&gt;You will have to ssh into your ubuntu webserver via ssh using your new Elastic IP address as you have already been logged out since you changed the public ip address.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--of-pp4JS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hjua2aj2plsek8slynba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--of-pp4JS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hjua2aj2plsek8slynba.png" alt="Image description" width="800" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: This login style is if you haven't store your keypair at sshd &lt;/p&gt;

&lt;p&gt;Once logged in - We have to update the operating system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;sudo apt-get update&lt;br&gt;
sudo apt-get upgrade&lt;br&gt;
sudo apt-get full-upgrade -y&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Chovy8YC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rrt3bu1hvllr3xjw8bf8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Chovy8YC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rrt3bu1hvllr3xjw8bf8.png" alt="Image description" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sudo apt-get full-upgrade&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I6czY882--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o71pzffwjgcyjqpjkzyp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I6czY882--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o71pzffwjgcyjqpjkzyp.png" alt="Image description" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuring &amp;amp; Installing Ubuntu's Host Files For Virtualmin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You have to change the hostname for the server: sendy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;sudo nano /etc/hostname&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4QSOzqhp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w00eny36ama8pnsxbe8x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4QSOzqhp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w00eny36ama8pnsxbe8x.png" alt="Image description" width="456" height="23"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;remove the private ip address and change to your new hostname&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gt7kyW4C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mly6yuuda5l6nbqxgsh9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gt7kyW4C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mly6yuuda5l6nbqxgsh9.png" alt="Image description" width="800" height="414"&gt;&lt;/a&gt;&lt;br&gt;
Save and Exit&lt;/p&gt;

&lt;p&gt;Now you update the host file: Add 127.0.1.1 sendy.&lt;br&gt;
sudo nano /etc/hosts&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XSTUDHF_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zn3g3kjv8r260ahdrczk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XSTUDHF_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zn3g3kjv8r260ahdrczk.png" alt="Image description" width="531" height="25"&gt;&lt;/a&gt;&lt;br&gt;
Add 127.0.1.1 sendy.domain.com&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PzsksMa4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dylvfoa3ppekudqkzsle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PzsksMa4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dylvfoa3ppekudqkzsle.png" alt="Image description" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After this update kindly reboot for effective changes.&lt;/p&gt;

&lt;p&gt;sudo reboot! &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ORu5UK76--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0yglq5beb7lgokusq5ej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ORu5UK76--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0yglq5beb7lgokusq5ej.png" alt="Image description" width="767" height="65"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Virtualmin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After Reboot. Login into the server via ssh or putty. you will server name has changed from the private ip address to the subdomain name.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d67Utu7U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j6g8m7tvzb2ff4bu7v9v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d67Utu7U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j6g8m7tvzb2ff4bu7v9v.png" alt="Image description" width="223" height="22"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You need to download and install the virtualmin file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;wget &lt;a href="http://software.virtualmin.com/gpl/scripts/install.sh"&gt;http://software.virtualmin.com/gpl/scripts/install.sh&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WsZ0HN6I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ptjf4uasjz2yrp0k8r6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WsZ0HN6I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ptjf4uasjz2yrp0k8r6j.png" alt="Image description" width="800" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once completed. Run the install file with this command:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;sudo sh ./install.sh --bundle LEMP -y&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iFQ9krbK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sgvocduxumxh7zka00nu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iFQ9krbK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sgvocduxumxh7zka00nu.png" alt="Image description" width="800" height="116"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will display some messages about Memory size. : if you had selected the free tier (t2.micro), it will complain about memory is below 1024 MB, and full installation might not be possible thereby you may have to use --minimal&lt;/p&gt;

&lt;p&gt;It will show other information about creating swap. Enter y.&lt;/p&gt;

&lt;p&gt;Most times you will be asked for FQDN -  enter your sendy url. &lt;br&gt;
The one i used: sendy.&lt;/p&gt;

&lt;p&gt;The Installation has 3 phases and takes some time to complete the installation.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JzaOqKdi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60v9293tw0ui874bn44y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JzaOqKdi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60v9293tw0ui874bn44y.png" alt="Image description" width="800" height="237"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HjiGKHVB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/njf9neusa65huwkkty39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HjiGKHVB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/njf9neusa65huwkkty39.png" alt="Image description" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once installation is complete&lt;/p&gt;

&lt;p&gt;Install or update php &amp;amp; phpmyadmin&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qM3sMCTZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nbfm9z7jzhetko9f9pke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qM3sMCTZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nbfm9z7jzhetko9f9pke.png" alt="Image description" width="800" height="201"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are using nginx so don't select either apache or lighttpd, select ok.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--esAHH4Q2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/crw01z9jipw9s5bh3hz8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--esAHH4Q2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/crw01z9jipw9s5bh3hz8.png" alt="Image description" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then you change Virtualmin’s root password — sudo /usr/share/webmin/changepass.pl /etc/webmin/ root &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bqMCN6CK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0e05fjmxrhwqoyxmurs8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bqMCN6CK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0e05fjmxrhwqoyxmurs8.png" alt="Image description" width="800" height="36"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;sudo reboot&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oG-zB__u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vvm7wfijynx3nniss297.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oG-zB__u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vvm7wfijynx3nniss297.png" alt="Image description" width="744" height="51"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Post Installation..&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the server has rebooted. &lt;/p&gt;

&lt;p&gt;Login and go to your internet browser and enter the virtualmin installation url:&lt;/p&gt;

&lt;p&gt;In my task, i used sendy.:10000&lt;/p&gt;

&lt;p&gt;It will show an insecure connection. click on ADVANCED then PROCEED TO sendy.:(unsafe)&lt;/p&gt;

&lt;p&gt;NOTE: if you are unable to access the page. check if your server has rebooted and is active. else try using your Elastic IP Address: &lt;a href="http://01.23.45.67:10000"&gt;http://01.23.45.67:10000&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtualmin Post-Installation Wizard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You will have to login with your username and password.&lt;/p&gt;

&lt;p&gt;username : root&lt;br&gt;
Password :  ! This is the password you created earlier after the installation of Virtualmin in previous step.&lt;/p&gt;

&lt;p&gt;Once logged in, you will see the post-installation page:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Page 1 - introduction. Click Next.&lt;br&gt;
Page 2 - Memory use settings: Preload Virtualmin libraries:- NO and Run email domain lookup server:- YES. Click Next&lt;br&gt;
Page 3 - Virus scanning setting: Run ClamAV server scanner:- NO&lt;br&gt;
Page 4 - Spam filtering setting: Run SpamAssassin server filter:- NO&lt;br&gt;
Page 5 - Database servers: Run MySQL database server:- YES and Run PostgreSQL database server:- NO&lt;br&gt;
Page 6 - MySQL root password:- Create a root password for MySQL. (NOTE: This password should be different from the root password you created for Virtualmin)&lt;br&gt;
Page 7 - MySQL database size:- I selected Large system (1G) on which MySQL is heavily used&lt;br&gt;
Page 8 - Primary nameserver:- Your sendy subdomain will be displayed, verify and click next&lt;br&gt;
Page 9 - choose how your password should be stored:- select only store hashed passwords.&lt;br&gt;
 click next&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On the All done page, click Next.&lt;/p&gt;

&lt;p&gt;Now Virtualmin will have to be refreshed. Click Re-check and refresh configuration.&lt;/p&gt;

&lt;p&gt;Some installation messages will appear and once all the steps are complete, you will see: your system is ready for use by virtualmin.&lt;/p&gt;

&lt;p&gt;Within the left-side. click Virtualmin menu, select system settings and then features and plugin.&lt;/p&gt;

&lt;p&gt;Make sure the appropriate features and plugins are selected.&lt;/p&gt;

&lt;p&gt;NOTE: In case you ever wish to re-run the post-installation wizard.&lt;/p&gt;

&lt;p&gt;Click on Virtualmin - System Settings - Re-Run Install Wizard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a server on Virtualmin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the left-hand side of the webpage. select Virtualmin then click on create virtualmin server&lt;/p&gt;

&lt;p&gt;Enter the following details:&lt;/p&gt;

&lt;p&gt;Domain name: sendy.&lt;br&gt;
Administration password: Input a new password.&lt;br&gt;
Administration username: Leave as Automatic, it will be the username created with the subdomain of your Sendy URL. In this case, sendy.&lt;/p&gt;

&lt;p&gt;Under Enabled features, I had the following checked,&lt;br&gt;
DNS domain enabled&lt;br&gt;
Nginx website enabled&lt;br&gt;
MySQL database enabled&lt;br&gt;
Webmin login enabled&lt;/p&gt;

&lt;p&gt;Leave others as default then &lt;/p&gt;

&lt;p&gt;Click Create Server.&lt;/p&gt;

&lt;p&gt;Various messages should now appear and your virtual server should be created&lt;/p&gt;

&lt;p&gt;Once created at the left-hand side of the web page under Virtualmin. You will see your new virtual server listed. &lt;/p&gt;

&lt;p&gt;Click on virtual server summary and verify that both Administration username and Administration group is your subdomain username e.g sendy. while, the Home directory will be set to /home/yourselectedsubdomain e.g /home/sendy&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing An SSL Certificate Within Virtualmin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ón the left-hand side of the webpage, under virtualmin. Click on Server Configuration and then Manage SSL Certificate&lt;/p&gt;

&lt;p&gt;Make sure the SSL website is enabled on features and plugins..&lt;/p&gt;

&lt;p&gt;On the Manage SSL Certificate page. Click on Let's Encrypt&lt;/p&gt;

&lt;p&gt;click the box on Domain names listed here. Enter your sendy installation url inside the Request Certificate for box.&lt;br&gt;
Click Request Certificate&lt;/p&gt;

&lt;p&gt;There shouldn't be an error if done correctly and using an amazon ec2 instance. &lt;/p&gt;

&lt;p&gt;Click on Current Certificate in the top menu.&lt;/p&gt;

&lt;p&gt;Click copy to Virtualmin then Log out and close the tab or browser.&lt;/p&gt;

&lt;p&gt;Clear cookies and cache and also flushdns if necessary. &lt;/p&gt;

&lt;p&gt;Open a new tab or re-launch a new browser and input the virtualmin URI: sendymail&lt;/p&gt;

&lt;p&gt;It might ask you to accept encryption. Once you login it will be encrypted. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuring Nginx on AWS web server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Login into the server via ssh or putty at the command line or terminal. enter: sudo nano /etc/nginx/sites-available/yoursendyURL.conf&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0L4otHS---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rcd9c8wmc6mdmizqit28.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0L4otHS---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rcd9c8wmc6mdmizqit28.png" alt="Image description" width="632" height="24"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the downward arrow key to scroll through the file until you reach the following line:&lt;/p&gt;

&lt;p&gt;fastcgi_param HTTPS $https;&lt;/p&gt;

&lt;p&gt;Below, give you line space by pressing ENTER twice, Then paste the following script within the extra blank lines:&lt;/p&gt;

&lt;p&gt;location = / {&lt;br&gt;
index index.php;&lt;br&gt;
}&lt;br&gt;
location / {&lt;br&gt;
if (!-f $request_filename){&lt;br&gt;
rewrite ^/([a-zA-Z0-9-]+)$ /$1.php last;&lt;br&gt;
}&lt;br&gt;
}&lt;br&gt;
location /l/ {&lt;br&gt;
rewrite ^/l/([a-zA-Z0-9/]+)$ /l.php?i=$1 last;&lt;br&gt;
}&lt;br&gt;
location /t/ {&lt;br&gt;
rewrite ^/t/([a-zA-Z0-9/]+)$ /t.php?i=$1 last;&lt;br&gt;
}&lt;br&gt;
location /w/ {&lt;br&gt;
rewrite ^/w/([a-zA-Z0-9/]+)$ /w.php?i=$1 last;&lt;br&gt;
}&lt;br&gt;
location /unsubscribe/ {&lt;br&gt;
rewrite ^/unsubscribe/(.&lt;em&gt;)$ /unsubscribe.php?i=$1 last;&lt;br&gt;
}&lt;br&gt;
location /subscribe/ {&lt;br&gt;
rewrite ^/subscribe/(.&lt;/em&gt;)$ /subscribe.php?i=$1 last;&lt;br&gt;
}&lt;br&gt;
location ~* .(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {&lt;br&gt;
expires max;&lt;br&gt;
log_not_found off;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nKg7TYZU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ld2od116f6e1c9uflx2s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nKg7TYZU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ld2od116f6e1c9uflx2s.png" alt="Image description" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Save and restart nginx - sudo systemctl restart nginx.service&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_znRlNBj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gsdezllw5gvundbkh6px.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_znRlNBj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gsdezllw5gvundbkh6px.png" alt="Image description" width="494" height="23"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;configuring and securing MYSQL database on AWS Web Server&lt;/p&gt;

&lt;p&gt;SSH into your ubuntu server and launch the terminal.&lt;/p&gt;

&lt;p&gt;Enter: mysql_secure_installation&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jhSQc0Nm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/imnt4x1v9tdn6uwole8o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jhSQc0Nm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/imnt4x1v9tdn6uwole8o.png" alt="Image description" width="463" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You would be asked some questions, configuring and securing your MySQL Server.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Validate Password plugin: n&lt;br&gt;
Root password: The one you set in the post-installation wizard of Virtualmin(Incase you misplaced it, you can login to virtualmin to generate a new one).&lt;br&gt;
Remove anonymous users: y&lt;br&gt;
Disallow root login remotely: y&lt;br&gt;
Remove test database and access: y&lt;br&gt;
Reload privilege tables: y &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You need to make some changes on the mysql config file for sendy to work properly.&lt;/p&gt;

&lt;p&gt;on Terminal, Enter: sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2PK3DmTi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5wv0vpt0q2hu61f9sc7m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2PK3DmTi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5wv0vpt0q2hu61f9sc7m.png" alt="Image description" width="550" height="33"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;scroll to the end of the file and paste this script: sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sAGA94xT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/thd9xv288s3trtl8d7yo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sAGA94xT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/thd9xv288s3trtl8d7yo.png" alt="Image description" width="800" height="402"&gt;&lt;/a&gt; &lt;br&gt;
Save and exit the file&lt;/p&gt;

&lt;p&gt;Restart MYSQL service&lt;/p&gt;

&lt;p&gt;sudo service mysql restart&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dgt_nT35--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d9bns31entqw5pa9fajf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dgt_nT35--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d9bns31entqw5pa9fajf.png" alt="Image description" width="535" height="19"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retrieving Sendy Database Password&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;log in into Virtualmin by navigating to Your Virtualmin URL within your browser:&lt;/p&gt;

&lt;p&gt;On the left-hand side, click on virtualmin then click on Edit Databases.&lt;/p&gt;

&lt;p&gt;On Edit Databases - click on passwords and select your sendy username.&lt;/p&gt;

&lt;p&gt;You will see a message - change database password and a key symbol.&lt;/p&gt;

&lt;p&gt;Hover over the key symbol to get your username and password. Kindly save them in the notepad as you will make use of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Sendy On Your AWS Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Download Sendy with the link received in your email at the time of license purchase. &lt;br&gt;
You can download the sendy compressed file directly to your local computer or AWS web server..&lt;/p&gt;

&lt;p&gt;I downloaded the sendy file to my local computer, unzip it and transfer to AWS Ubuntu server using (Filezilla client, winScp or cyberduck)&lt;/p&gt;

&lt;p&gt;NOTE: you will have to edit one of the files. You can edit the file on your local computer before using FTP to transfer files to Web Server or You transfer the file to web server and navigate to the file to make changes.&lt;br&gt;
NOTE: Make sure you the files to this directory on the EC2 server at /home/sendy/public_html&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;navigate to includes/config.php file on local computer or aws ubuntu server and make these changes.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;sudo nano /home/sendy/public_html/includes/config.php&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oGO3xe68--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kwtsxmasi12xie2plx46.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oGO3xe68--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kwtsxmasi12xie2plx46.png" alt="Image description" width="598" height="21"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The URL within the (APP_PATH) line should be replaced with Your Sendy Installation URL (including the https:// prefix ).&lt;/p&gt;

&lt;p&gt;$dbHost should be set to localhost&lt;br&gt;
$dbUser should be set to Your sendy subdomain retrieved from virtualmin&lt;br&gt;
$dbPass should be set to the Sendy database password retrieved from virtualmin&lt;br&gt;
$dbName should be set to Your subdomain&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dLdU6tBR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ti0vdsedrmxp78zzyebe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dLdU6tBR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ti0vdsedrmxp78zzyebe.png" alt="Image description" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make sure you save the config.php file.&lt;/p&gt;

&lt;p&gt;&amp;lt;&amp;gt; Make sure all files are copied. especially the .htaccess file. ON the terminal change the permission for uploads file to 777. &lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;sudo su sendy&lt;br&gt;
cd ~&lt;br&gt;
cd public_html&lt;br&gt;
ls -la | grep uploads&lt;br&gt;
chmod 777 uploads&lt;br&gt;
exit&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;Install some libraries that are needed by Sendy:&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;sudo apt-get install libcurl4-openssl-dev php7.2-curl&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vUzIggdp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oul5v3niacx530guyclo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vUzIggdp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oul5v3niacx530guyclo.png" alt="Image description" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;sudo reboot&lt;/p&gt;

&lt;p&gt;Once the web server is back on and running. navigate to your browser and enter the sendy url e.g sendy.&lt;/p&gt;

&lt;p&gt;You should see an install page now..&lt;/p&gt;

&lt;p&gt;Fill in all information. then, click Install now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating AWS SES Access Keys For Sendy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Login to your AWS console.&lt;br&gt;
Go to the search box and type IAM using the Services menu.&lt;br&gt;
Make sure that your region is set correctly in the top-right.&lt;br&gt;
Click on Users on the lefy-hand side od the page. &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--idzkXS7r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kha8q8uup6aoecfum1j5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--idzkXS7r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kha8q8uup6aoecfum1j5.png" alt="Image description" width="800" height="267"&gt;&lt;/a&gt;&lt;br&gt;
Click Add User.&lt;br&gt;
Enter the following details:&lt;br&gt;
User name: sendy&lt;br&gt;
Access type: Programmatic access&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AEyzVlIQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tx8nfcdw6bl0etl1qfuq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AEyzVlIQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tx8nfcdw6bl0etl1qfuq.png" alt="Image description" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click Next: Permissions.&lt;br&gt;
Select Attach existing policies. &lt;br&gt;
In the search type sesf . Select AmazonSESFullAccess.&lt;br&gt;
In the search type snsf . Select AmazonSNSFullAccess.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pJbHVXbY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2fzv9u5auod0209fort0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pJbHVXbY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2fzv9u5auod0209fort0.png" alt="Image description" width="800" height="405"&gt;&lt;/a&gt;&lt;br&gt;
Click Next: Tags. This section can be skipped.&lt;br&gt;
Click Next: Review. Review your settings.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7FJbNYdI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1a2mtwhearl0n4qgsx7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7FJbNYdI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1a2mtwhearl0n4qgsx7a.png" alt="Image description" width="800" height="413"&gt;&lt;/a&gt;&lt;br&gt;
Click Create User&lt;/p&gt;

&lt;p&gt;Your access keys should now be created.. click show to see your secret access key or you download the csv. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A1mCQSYY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kvurf5x46m2y8jsecuys.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A1mCQSYY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kvurf5x46m2y8jsecuys.png" alt="Image description" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Switch back to Sendy — sendy. at the top right corner drop down menu, select Settings.&lt;br&gt;
Under Amazon Web Services Credentials. Paste your AWS Access Key ID and AWS Secret Access Key. Select the AWS region under Amazon SES region, Make sure it's the same region selected on AWS console.&lt;/p&gt;

&lt;p&gt;Click Save.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verifying Domain Within AWS SES (Simple Email Service)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By default, You will be placed in a sandbox environment with 200 quota, and can only send limited emails to and from verified emails or domain in AWS ses and Sendy. you will have to request for more quota by contacting AWS.&lt;/p&gt;

&lt;p&gt;Sign in your AWS console and on the search box, type ses and click on it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bsLS5nNK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y5y48iwjubyrsbrtt97x.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bsLS5nNK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y5y48iwjubyrsbrtt97x.PNG" alt="Image description" width="800" height="398"&gt;&lt;/a&gt;&lt;br&gt;
On AWS SES webpage. You have 2 options: &lt;br&gt;
on the right, you can click on create identities. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ySWLmxJt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ge685gkt5ywxrw8stnq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ySWLmxJt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ge685gkt5ywxrw8stnq.PNG" alt="Image description" width="800" height="417"&gt;&lt;/a&gt;&lt;br&gt;
while, on the left you can click on verified identities under configuration.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rQEYzVlB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5mq2ex9x6ve0vqmq12bb.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rQEYzVlB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5mq2ex9x6ve0vqmq12bb.PNG" alt="Image description" width="800" height="379"&gt;&lt;/a&gt;&lt;br&gt;
Let's create an identity&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identity details:&lt;/strong&gt;&lt;br&gt;
Select Domain and enter your domain( you can also enter your domain, but its much better verifying your domain)&lt;br&gt;
&lt;strong&gt;Verifying your domain:&lt;/strong&gt;&lt;br&gt;
Click the drop down option on Advanced DKIM settings&lt;br&gt;
choose identity type: Easy DKIM&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DKIM signing key length:&lt;/strong&gt; Select RSA_2048_BIT&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publish DNS records to Route53:&lt;/strong&gt; Click Enabled if you are using route53 else do not enable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DKIM signatures:&lt;/strong&gt; Select Enabled&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tvY8eKzF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8bzx7g5udv927wedj6oh.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tvY8eKzF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8bzx7g5udv927wedj6oh.PNG" alt="Image description" width="800" height="388"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yscWQuNu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n8fvjsds6bziv0o1o0og.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yscWQuNu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n8fvjsds6bziv0o1o0og.PNG" alt="Image description" width="742" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once that's done. Create Identity&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---X_1Sh56--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uj5ruizgl6tov7fxbgn0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---X_1Sh56--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uj5ruizgl6tov7fxbgn0.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To verify ownership of this identity, DKIM must be configured in the domain DNS settings using the CNAME records provided.&lt;/p&gt;

&lt;p&gt;Download the CSV records and add them to your DNS.&lt;/p&gt;

&lt;p&gt;Navigate to your domain control panel and create a CNAME and TXT record. &lt;/p&gt;

&lt;p&gt;Check your email for verification and confirmation of the domain being verified.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Troubleshooting and fixing 413 error&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So while my client was tryin to upload a csv file above 2MB, he encounter an error 413.&lt;/p&gt;

&lt;p&gt;Here is how to solve it. Navigate to your Ubuntu webserver using nano editor.&lt;/p&gt;

&lt;p&gt;we are going to increase the "client body size" on Nginx and also increase the upload maximum filesize on php.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;For Nginx - sudo nano /etc/nginx/nginx.conf&lt;/strong&gt;&lt;br&gt;
Within the http { &lt;br&gt;
client_body_max_size 500m;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QPavjafE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y57jout72zl4umhwig70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QPavjafE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y57jout72zl4umhwig70.png" alt="Image description" width="448" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;increase the "client body size"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vLiArg4O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ojxrn1c857z6zex4m3ti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vLiArg4O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ojxrn1c857z6zex4m3ti.png" alt="Image description" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Restart nginx&lt;br&gt;
sudo systemctl reload nginx.service&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For php - sudo nano /etc/php/7.2/fpm/php.ini&lt;br&gt;
Under File Uploads and Data Handling&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;;The maximum size of an uploaded file.&lt;br&gt;
upload_max_filesize = 500M&lt;/p&gt;

&lt;p&gt;;Sets max size of post data allowed. This setting also affects file upload. To upload large files, this value must be larger than upload_max_filesize&lt;br&gt;
post_max_size = 500M&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Under File Uploads&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pG-XZFAP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2mpxy75g5y08b2hq2gph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pG-XZFAP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2mpxy75g5y08b2hq2gph.png" alt="Image description" width="706" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Under Data Handling&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZYdK-J9k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7njmcil8njrq0vlxqh4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZYdK-J9k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7njmcil8njrq0vlxqh4u.png" alt="Image description" width="775" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Restart php7.2&lt;/p&gt;

&lt;p&gt;sudo systemctl restart php-fpm&lt;/p&gt;

&lt;p&gt;Thank you so much.. I will be updating this blog from time to time with more information and pictures.. I've got a cloud support task and alsoa new project on Microsoft virtual desktop infrastructure (VDI). i hope to write more blog soon.  &lt;/p&gt;




&lt;p&gt;For reference and incase you need more guidelines:-&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Maynard patton: &lt;a href="https://colcol.co.uk/introduction-to-installing-sendy-and-virtualmin-on-aws/"&gt;https://colcol.co.uk/introduction-to-installing-sendy-and-virtualmin-on-aws/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Neha M: &lt;a href="https://levelup.gitconnected.com/setting-up-your-own-bulk-mail-server-using-sendy-and-aws-20d05ee01362"&gt;https://levelup.gitconnected.com/setting-up-your-own-bulk-mail-server-using-sendy-and-aws-20d05ee01362&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm can't thank this authors enough. &lt;/p&gt;




&lt;p&gt;You can see my other blog:&lt;br&gt;
&lt;u&gt;&lt;strong&gt;AWS SAA-C02&lt;/strong&gt;&lt;/u&gt;&lt;br&gt;
&lt;a href="https://medium.com/@ossniper/aws-solution-architect-saa-c02-passed-resources-used-thoughts-73016f2459e2"&gt;https://medium.com/@ossniper/aws-solution-architect-saa-c02-passed-resources-used-thoughts-73016f2459e2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;ebgp peering&lt;/strong&gt;&lt;/u&gt;&lt;br&gt;
&lt;a href="https://medium.com/@ossniper/ive-decided-to-write-about-bgp-ip-sla-pbr-and-ospf-as-i-will-be-updating-this-blog-from-time-to-7ce3244a10ff"&gt;https://medium.com/@ossniper/ive-decided-to-write-about-bgp-ip-sla-pbr-and-ospf-as-i-will-be-updating-this-blog-from-time-to-7ce3244a10ff&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
