{"id":4085,"date":"2021-08-17T15:51:14","date_gmt":"2021-08-17T10:21:14","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=4085"},"modified":"2021-08-17T17:20:52","modified_gmt":"2021-08-17T11:50:52","slug":"openvpn-a-custom-iptables-journey","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2021\/08\/17\/openvpn-a-custom-iptables-journey\/","title":{"rendered":"OpenVPN &#8211; A Custom Iptables journey"},"content":{"rendered":"\n<p class=\"has-text-align-justify\">During this lockdown period, people are usually working from home which means they all are contributing to work by staying at home. So, if someone wants to work on something online, such as on a particular private or public server  of a company, depending on the scenario, will need a network route to that server.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/YWy93Zf9eW8RMlK0gK\/giphy.gif\" alt=\"\" \/><figcaption>makes sense?<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"has-text-align-justify\">Meaning, they first need access to that particular server either via a public network or using VPN. These things have their own set of complexities. Therefore, we will discuss a few aspects of network access &amp; their drawbacks:<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"has-text-align-justify\">1. In some cases companies allow users to access servers via the internet without any specific condition which means servers have public IP &amp; are publicly available. But what if websites don&#8217;t need to open globally or do not need public access?<\/p>\n\n\n\n<p class=\"has-text-align-justify\"><strong>Solution:<\/strong> In that case, we can disable public access &amp; use firewall rules or security groups to manage users&#8217; public IP&#8217;s. If someone wants to access a server, they&#8217;ll have to contact the server administrator and provide them their public IP address. Then the server administrator can whitelist that IP address providing access to the user.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">2. By disabling public access and using firewall rules, managing users&#8217; public IP can be really hectic because users usually don&#8217;t stick to a specific network. This means their public IP will change whenever they switch networks. There is no static IP for a normal broadband connection. So, IP will always rotate as users will have to contact server administrators each time they change network.<\/p>\n\n\n\n<p class=\"has-text-align-justify\"><strong>Solution:<\/strong> In this case, we can use a VPN server to gain access to a company network. Server administrators would need to manage a VPN server and client configuration for each user.<br><br>So, OpenVPN is a good option for setting up a VPN server because it&#8217;s open-source. Users can easily get installation instructions for Linux\/Unix. OpenVPN uses the Iptables firewall for its routing rules. Community forums like stack-overflow, OpenVPN official help site, etc are present for support.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/QCIUPH3DqIpdiANkJW\/giphy.gif\" alt=\"\" width=\"552\" height=\"282\" \/><\/figure><\/div>\n\n\n\n<p class=\"has-text-align-justify\">3. With minimal configuration and basic restriction policies in the OpenVPN server, users can easily access company servers without issues of IP address management but there is another issue with this configuration. If server administrator sets up an OpenVPN server for the management team or any team which only has access to private or public websites of the company which means a user using VPN would need only internet or only port 80 &amp; 443 access but with normal configuration, user can easily use other ports via VPN like user can use SSH, connect to the database or can connect to any other application via any port. To overcome this, OpenVPN comes with the idea of restricting rules policy using iptables.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Iptables is a firewall tool for Linux machines and it comes with very extensive features. Iptables works along with OpenVPN and anyone can modify it.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">With OpenVPN setup, generally, users use iptables rules to masquerade OpenVPN private subnet to the main Ethernet. So, users can use network features using the OpenVPN server which means there are no specific rules applied for OpenVPN.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/openvpn-diagram-2.jpg?w=1024\" alt=\"\" class=\"wp-image-4104\" width=\"632\" height=\"312\" \/><\/figure><\/div>\n\n\n\n<p>For checking iptables rules using iptables command [Both NAT table &amp; Filter table ]<\/p>\n\n\n\n<pre class=\"wp-block-verse\"># iptables -L<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/iptables-filter-output.jpg?w=575\" alt=\"\" class=\"wp-image-4108\" width=\"629\" height=\"242\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">In the above iptables output, it shows that there are no rules specified for any port, interface, subnet, or IP address. It just shows the empty output that we configured with OpenVPN.<\/p>\n\n\n\n<pre class=\"wp-block-verse\"># iptables -t nat -L<\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/iptables-nat-output.jpg?w=892\" alt=\"\" class=\"wp-image-4110\" width=\"642\" height=\"228\" \/><\/figure><\/div>\n\n\n\n<p class=\"has-text-align-justify\">In the above iptables output, it shows POSTROUTING rules to masquerade OpenVPN subnet to main Ethernet which is eth0. It means any traffic that comes from mentioned and specified subnet [ OpenVPN subnet] is allowed to go through eth0.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">So, basically from the above iptables command, we get to know that there are no specified rules allowed in the filter table &amp; there is one rule for NAT table which masquerades the traffic to the main ethernet.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Let\u2019s connect with any rules and see if we are able to connect to different resources using the OpenVPN client.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/connect-to-vpn.jpg?w=534\" alt=\"\" class=\"wp-image-4112\" width=\"355\" height=\"198\" \/><\/figure><\/div>\n\n\n\n<p>After that, it will assign you an IP address from the OpenVPN subnet.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/vpn-connect-message.jpg?w=545\" alt=\"\" class=\"wp-image-4113\" width=\"371\" height=\"186\" \/><\/figure><\/div>\n\n\n\n<p>Now, connect to different resources.<\/p>\n\n\n\n<p>You can check internet connection by web browse<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/what-is-my-ip-result.jpg?w=1024\" alt=\"\" class=\"wp-image-4118\" width=\"468\" height=\"209\" \/><\/figure><\/div>\n\n\n\n<p>We can test by SSH to any resource,<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/08\/image-1.png?w=1024\" alt=\"\" class=\"wp-image-7727\" width=\"508\" height=\"457\" \/><figcaption>Putty access<\/figcaption><\/figure><\/div>\n\n\n\n<p>Once you fill-out the information, try to connect to the server.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/08\/image.png?w=1024\" alt=\"\" class=\"wp-image-7726\" width=\"512\" height=\"89\" \/><\/figure><\/div>\n\n\n\n<p class=\"has-text-align-justify\">To make things right with iptables and to know more about iptable rules with OpenVPN, we will allow users to use only SSH through OpenVPN but not let users access the internet or any other resource.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/openvpn-diagram.png?w=1024\" alt=\"\" class=\"wp-image-4122\" width=\"586\" height=\"248\" \/><\/figure><\/div>\n\n\n\n<p>For that, we need to create iptables rules.<\/p>\n\n\n\n<ol><li>First, we will drop or disable any access through OpenVPN for the OpenVPN subnet using a filter table FORWARD.<\/li><li>We will append rules to allow SSH access using a filter table FORWARD.<\/li><\/ol>\n\n\n\n<p class=\"has-text-align-justify\">NOTE: In iptables, rules are read from top to bottom. Hence, if there is a rule specified in iptables to deny resources and there is a same rule to allow resources on top of it, iptables will allow that rule whether you drop or deny in below that.<\/p>\n\n\n\n<p>There are three options in iptables for filter table which is:<\/p>\n\n\n\n<ol><li>Insert<\/li><li>Append<\/li><li>Delete<\/li><\/ol>\n\n\n\n<p class=\"has-text-align-justify\">For this scenario, we will only use insert &amp; append tags to write our rules. Delete option is also important but we are not going to use the delete tag in iptables for this case.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">1. Append in iptables will put a rule at the end of the table which means if we want to drop everything except few resources, we will have to use the Append tag to create a rule at the end of the filter table to drop everything.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">2. Insert in iptables will put a rule at the beginning of the table which means if after dropping everything using the \u201c-A\u201d tag in iptables, we can use insert a tag to allow specific resources.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/test123.jpg?w=622\" alt=\"\" class=\"wp-image-4125\" width=\"443\" height=\"320\" \/><\/figure><\/div>\n\n\n\n<p>Let\u2019s break down this diagram,<\/p>\n\n\n\n<p class=\"has-text-align-justify\">In the above, diagram, we are trying to add four rules with the different tags as shown in the diagram [-A &amp; -I ].<\/p>\n\n\n\n<p class=\"has-text-align-justify\">First, we are using an append tag which means it will be set at the end of the table whether there is already a rule present or not. After that, we use an insert tag which means it will be set at the beginning of the table whether any rule is present or not. So, this is the basic concept of append &amp; insert tag. Check the below diagram for more details.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/iptables-diagram1-1.png?w=1024\" alt=\"\" class=\"wp-image-4126\" width=\"599\" height=\"256\" \/><\/figure><\/div>\n\n\n\n<p>So, according to this, we run two rules to specify or need.<\/p>\n\n\n\n<ol><li><strong>Block all connection<\/strong><\/li><\/ol>\n\n\n\n<pre class=\"wp-block-verse\"># iptables -A FORWARD -s X.X.X.X\/8 -i tun0 -j DROP<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/iptables-nat-after-rule.png?w=792\" alt=\"\" class=\"wp-image-4127\" width=\"588\" height=\"263\" \/><\/figure>\n\n\n\n<ol start=\"2\"><li>Allow specific rule<\/li><\/ol>\n\n\n\n<pre class=\"wp-block-verse\"># <em>iptables -I FORWARD -p tcp -s X.X.X.X\/X --destination-port 22 -i tun0 -j ACCEPT<\/em><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/iptables-nat-after-rule-2-1.png?w=1024\" alt=\"\" class=\"wp-image-4129\" width=\"656\" height=\"199\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify\">You can see that rule with an insert tag at the beginning of the table and a rule with append at the end of the table.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">NOTE: After setting up rules, you can check whether the rules are working fine or not. If it is working fine, you can use the net-filter command to save the specific rules.<\/p>\n\n\n\n<p>Now, we will check whether the rules are working fine or not.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">For now, we are unable to access the internet because we dropped all connections for the OpenVPN subnet,<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2020\/09\/no-internet.png?w=1024\" alt=\"\" class=\"wp-image-4130\" width=\"586\" height=\"286\" \/><\/figure><\/div>\n\n\n\n<p>But we can easily connect to SSH.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/08\/image-2.png?w=1024\" alt=\"\" class=\"wp-image-7730\" width=\"536\" height=\"430\" \/><\/figure><\/div>\n\n\n\n<p class=\"has-text-align-justify\">We can check other resources like Database connections or other port connections to make sure that everything is working properly.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/08\/image-3.png?w=1024\" alt=\"\" class=\"wp-image-7731\" width=\"616\" height=\"352\" \/><\/figure><\/div>\n\n\n\n<p class=\"has-text-align-justify\">We checked only with database connection but you can test this option with any kind of protocol other than the allowed one. We used the telnet command to check the connection, you can use any other tool to make sure that everything is working fine.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Conclusion<\/h4>\n\n\n\n<p class=\"has-text-align-justify\">We discussed a few of the rules provided by Iptables, their workflow and use-cases. Iptables is a very powerful firewall tool that is very flexible and useful in many aspects. Not only external traffic, but it can also help control, route and redirect using a set of rules. For OpenVPN and other tools, iptables gives you options to make things work as you want.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Let us know in the comment section about your experience where you used iptables and how iptables it helped you in managing resources. <\/p>\n\n\n\n<p>Let&#8217;s keep away negative things from life just like we block or drop things using iptables :).<\/p>\n\n\n\n<p>Keep exploring!<\/p>\n\n\n\n<p>  <a href=\"http:\/\/giphy.com\" target=\"_blank\" rel=\"noopener\">GIF References<\/a> <\/p>\n\n\n\n<p> <strong>Blog Pundit:<\/strong> <a href=\"https:\/\/opstree.com\/blog\/\/author\/naveenverma023\/\" target=\"_blank\" rel=\"noreferrer noopener\">Naveen Verma<\/a> &amp;<a href=\"https:\/\/opstree.com\/blog\/\/author\/adeel109\/\">&nbsp; <\/a><a href=\"https:\/\/opstree.com\/blog\/\/author\/adeel109\/\" target=\"_blank\" rel=\"noreferrer noopener\">Adeel Ahmad<\/a><\/p>\n\n\n\n<p>Opstree is an End to End DevOps solution provider<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-fill\"><a class=\"wp-block-button__link\" href=\"https:\/\/www.opstree.com\/contact-us\" target=\"_blank\" rel=\"noreferrer noopener\">CONTACT US<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center\"><strong>Connect Us <\/strong><\/p>\n\n\n\n<ul class=\"wp-block-social-links aligncenter items-justified-right is-layout-flex wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>During this lockdown period, people are usually working from home which means they all are contributing to work by staying at home. So, if someone wants to work on something online, such as on a particular private or public server of a company, depending on the scenario, will need a network route to that server. &hellip; <a href=\"https:\/\/opstree.com\/blog\/2021\/08\/17\/openvpn-a-custom-iptables-journey\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;OpenVPN &#8211; A Custom Iptables journey&#8221;<\/span><\/a><\/p>\n","protected":false},"author":192321000,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[28070474],"tags":[69816,391491,44,522919,768739286,768739291],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-13T","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/4085"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/192321000"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=4085"}],"version-history":[{"count":24,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/4085\/revisions"}],"predecessor-version":[{"id":7800,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/4085\/revisions\/7800"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=4085"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=4085"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=4085"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}