<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[BitsInsight]]></title><description><![CDATA[Exploring the intersection of cloud security and high-performance coding. Practical PoCs on network defense, secrets management, and private infrastructure.]]></description><link>https://blog.pkdiv.com</link><image><url>https://cdn.hashnode.com/uploads/logos/69198a62a77f30f81054f09b/855f9972-ab3c-4e73-be9c-61ebdb536ede.png</url><title>BitsInsight</title><link>https://blog.pkdiv.com</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 16 May 2026 17:47:21 GMT</lastBuildDate><atom:link href="https://blog.pkdiv.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[AWS EC2 Placement Groups]]></title><description><![CDATA[Placement Groups allow users to influence the placement of EC2 Instances within AWS’s Infrastructure.
Types of Placement Groups

Cluster Placement Group

Spread Placement Group

Partition Placement Gr]]></description><link>https://blog.pkdiv.com/aws-ec2-placement-groups</link><guid isPermaLink="true">https://blog.pkdiv.com/aws-ec2-placement-groups</guid><category><![CDATA[AWS]]></category><category><![CDATA[ec2]]></category><category><![CDATA[EC2 instance]]></category><category><![CDATA[placement-groups-in-aws]]></category><category><![CDATA[Amazon Web Services]]></category><category><![CDATA[Amazon EC2]]></category><dc:creator><![CDATA[Divyesh P K]]></dc:creator><pubDate>Tue, 05 May 2026 08:54:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69198a62a77f30f81054f09b/67245527-1f08-4123-a4d3-134ffdb628e8.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Placement Groups allow users to influence the placement of EC2 Instances within AWS’s Infrastructure.</p>
<h2><strong>Types of Placement Groups</strong></h2>
<ul>
<li><p>Cluster Placement Group</p>
</li>
<li><p>Spread Placement Group</p>
</li>
<li><p>Partition Placement Group</p>
</li>
</ul>
<h2><strong>Cluster Placement Group</strong></h2>
<p>Is the logical grouping of instances within an Availability Zone. Cluster Group can span across peered VPCs. Cluster Groups are ideal for scenarios requiring high network throughput or low network latency.</p>
<img src="https://miro.medium.com/v2/resize:fit:313/0*_j6rfM0H8ruVT9Co" alt="Image of cluster placement group. Consists of one groups with all the instances" style="display:block;margin:0 auto" />

<p><strong>Considerations</strong></p>
<ul>
<li><p>Cannot span across Availability Zones</p>
</li>
<li><p>Adding instances to existing cluster group may result in insufficient capacity error. Requires re-deployment of the cluster group with the updated number of instances.</p>
</li>
<li><p>An instances in a cluster group can be stopped but restarting the instance depends on the availability of the hardware. Issues with capacity requires redeployment of the cluster group.</p>
</li>
<li><p>Multiple Instance types can be launched in a cluster group but the required capacity may not be available.</p>
</li>
</ul>
<h2><strong>Spread Placement Group</strong></h2>
<p>Instances are deployed on distinct hardware. Each instance has unique set of hardware, and other equipment. Suitable for critical workloads that require high availability. Reduces the risk of simultaneous failures.</p>
<img src="https://miro.medium.com/v2/resize:fit:875/0*cYfd_lKNFXbj0-Ou" alt="Image of spread placement group" style="display:block;margin:0 auto" />

<p><strong>Considerations</strong></p>
<ul>
<li><p>Launch request fail if distinct hardware and equipment are not available</p>
</li>
<li><p>Dedicated Instance types are not supported for spread placement group</p>
</li>
</ul>
<h2><strong>Partition Placement Group</strong></h2>
<p>EC2 instances are grouped into partitions. An EC2 instances in a partition does not share the same rack with an EC2 instance in other partitions. A hardware failure in one of the partition does not affect the instances of other partitions. Partition placement groups are best for application requiring high availability.</p>
<img src="https://miro.medium.com/v2/resize:fit:500/0*zzLv7urJvPKLnDMu" alt="Image of partition placement group. Consists of several partitions with multiple instances in them" style="display:block;margin:0 auto" />

<p><strong>Considerations</strong></p>
<ul>
<li><p>Each Partition Group allows a maximum of seven partitions per Availability Zone.</p>
</li>
<li><p>The number of Instance in a partition group is only limited by the limit of the AWS account</p>
</li>
<li><p>Best Effort Even instance distribution to partitions i.e, no guarantee of even distribution of EC2 instances across partitions</p>
</li>
<li><p>A partition placement group comprising of a Dedicated Instance type of EC2 , can only have a maximum of two partitions</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Secure Your Homelab with Tailscale: Access Self-Hosted Services from Anywhere]]></title><description><![CDATA[Services today are getting more invasive while becoming more expensive. At some point, I figured it might be worth trying to host a few things myself instead.
But self-hosting comes with its own set o]]></description><link>https://blog.pkdiv.com/secure-your-homelab-with-tailscale-access-self-hosted-services-from-anywhere</link><guid isPermaLink="true">https://blog.pkdiv.com/secure-your-homelab-with-tailscale-access-self-hosted-services-from-anywhere</guid><category><![CDATA[tailscale]]></category><category><![CDATA[SelfHosting]]></category><category><![CDATA[self hosting]]></category><category><![CDATA[self-hosted]]></category><category><![CDATA[Homelab]]></category><category><![CDATA[homelabbing]]></category><dc:creator><![CDATA[Divyesh P K]]></dc:creator><pubDate>Mon, 04 May 2026 12:36:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69198a62a77f30f81054f09b/6cbf80a5-52fe-40d5-804c-b96bd919538e.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Services today are getting more invasive while becoming more expensive. At some point, I figured it might be worth trying to host a few things myself instead.</p>
<p>But self-hosting comes with its own set of challenges . How do you access your services over the internet ? How do you secure them ? And how to manage access without overly complicated setup. This led me to using Tailscale. <strong>Tailscale</strong> is a mostly zero-config mesh VPN, which enables connecting to your devices over the internet through a private network.</p>
<p>In this article , I will guide you through setting up Tailscale on your home lab and use it to access self-hosted services from anywhere. We’ll also explore exposing services to the internet when required.</p>
<h2><strong>Signing up for Tailscale</strong></h2>
<ol>
<li><p>Navigate to <a href="http://login.tailscale.com">login.tailscale.com</a></p>
</li>
<li><p>Sign up using your preferred method (Google, GitHub, Microsoft, or email)</p>
</li>
<li><p>Download the Tailscale client for your operating system</p>
</li>
<li><p>Open the client and sign in — this will automatically register your device to your private Tailscale network (called a <em>tailnet</em>)</p>
</li>
<li><p>Repeat the process on any additional devices you want to connect.</p>
</li>
</ol>
<p>To confirm everything is working, try reaching one device from another using its Tailscale IP address — Ping the IP address of one of your devices from the other</p>
<h2><strong>Securing Tailnet</strong></h2>
<p>Now that devices are able to connect to each other lets move on to securing them before hosting any services. There are multiple ways to implement Access control, the easiest being using tags . We will create tags, assign them to devices and based on the tags restrict the ports.</p>
<p>By default Tailscale allows all devices on the network to talk to each other on all ports. Adding ACL changes this to deny-by-default and only allows if a Access rule is present.</p>
<ol>
<li><p>In the admin console , navigate to <strong>Access Control &gt; Tags.</strong></p>
</li>
<li><p>Click on create tags — ideally create at least two tags — <strong>server</strong> &amp; <strong>client.</strong></p>
</li>
<li><p>Navigate to the machines tab, and for each devices you have added, you can add the tag by clicking on the <strong>three dots</strong> &gt; <strong>Edit ACL Tags &gt; Add the tag from drop down.</strong> Save<br /><em>️Before saving, make sure every device is tagged. Untagged devices will lose the ability to communicate once ACLs are enabled.</em></p>
</li>
<li><p>Now navigate to <strong>Access Control &gt; General Access Rule.</strong></p>
</li>
<li><p>Click on create rule.</p>
</li>
<li><p>Add the <strong>tag:client</strong> as the source and <strong>tag:server</strong> as the destination. For the port add <strong>tcp:80</strong> and <strong>tcp:443</strong><em>.</em> Add other port if your services requires those ports. (Add tcp:22 if you also want to SSH into the server devices). Save.</p>
</li>
</ol>
<p>Now all your server devices can be accessed from the clients only on port 80 — http and 443-https.</p>
<p>Before moving on, it’s worth setting up a few tests in the Tests tab. Tests let you define connections that should always be allowed in your tailnet. Every time you make a change to your access rules, these tests are automatically validated — if any test fails, Tailscale will prevent you from saving the change, protecting you from accidentally breaking access to your services</p>
<h2><strong>MagicDNS</strong></h2>
<p>Just like on the internet, where you communicate with a server using a URL instead of IP address, you can do that on Tailscale network. Tailscale provides a feature called MagicDNS — a private DNS for your tailnet.<br />Each tailnet gets a domain <a href="http://somestring.ts.net"><em>somestring</em>.ts.net</a> and devices can be accessed using <a href="http://hostname.somestring.ts.net"><em>hostname</em>.<em>somestring</em>.ts.net</a> instead of their IP addresses</p>
<p>MagicDNS is enabled by default, if for some reason it is not navigate to <strong>DNS</strong> in the admin console and enable it .</p>
<p>You can find your tailnet’s full DNS name on the DNS page of the admin console. Once MagicDNS is active, your devices are reachable using their hostname — for example, if your server is named <code>home-server</code>, you can access a service running on port 8096 at <a href="http://home-server:8096"><code>http://home-server:8096</code></a> or <a href="http://home-server.somestring.ts.net:8096"><code>http://home-server.somestring.ts.net:8096</code></a> from any device on your tailnet.</p>
<p>The hostname is taken from the device’s hostname. You can always change it on the machines tab for a devices by clicking on the <strong>three dots &gt; Edit machine name.</strong></p>
<p>You now have a private, secure network where your devices can reach each other and your self-hosted services from anywhere. But what if you want to share a service with someone outside your tailnet — without opening ports on your router? In the next article, we’ll look at Tailscale Funnel and how it lets you selectively expose services to the public internet</p>
]]></content:encoded></item><item><title><![CDATA[Domain fronting: a missed validation that enabled stealth]]></title><description><![CDATA[Domain Fronting is a technique used to bypass filtering and surveillance by concealing the true destination of a request. It has been used to evade censorship, bypass security controls, and connect to C2 (Command and Control) Servers .
HTTP History
T...]]></description><link>https://blog.pkdiv.com/domain-fronting-a-missed-validation-that-enabled-stealth</link><guid isPermaLink="true">https://blog.pkdiv.com/domain-fronting-a-missed-validation-that-enabled-stealth</guid><category><![CDATA[privacy]]></category><category><![CDATA[networking]]></category><category><![CDATA[http]]></category><category><![CDATA[https]]></category><category><![CDATA[TLS]]></category><category><![CDATA[CDN]]></category><dc:creator><![CDATA[Divyesh P K]]></dc:creator><pubDate>Wed, 19 Nov 2025 10:47:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/6NflM91LGJo/upload/5f81bfeec990f30c347bcb622ec5c1f9.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Domain Fronting</strong> is a technique used to bypass filtering and surveillance by concealing the true destination of a request. It has been used to evade censorship, bypass security controls, and connect to C2 (Command and Control) Servers .</p>
<h2 id="heading-http-history"><strong>HTTP History</strong></h2>
<p>The HTTP 1.0 protocol developed in the early 1990s, used one host per IP. With the explosion of the internet and the issue with the exhaustion of the IPv4 addresses, HTTP 1.1 was developed . HTTP 1.1 made it possible for IPs to be shared among website with the introduction of the <em>host</em> header. When a client make a request to a server for a website, it would form a TCP connection with the server using the IP and the application layer read the host header of the HTTP request to respond with the appropriate website.</p>
<p>To make these requests secure, TLS (formerly SSL) is used to encrypt the traffic. TLS also faced issues with hosting multiple HTTPS websites, hence SNI (Server Name Indication) was introduced as an extension to TLS. SNI indicates the domain whose certificate the client wants to form the TLS connection with.</p>
<p>The rollout of these features, combined with the lack of proper validation between protocols operating at different layers of the network stack, made this technique possible.</p>
<h2 id="heading-domain-fronting"><strong>Domain Fronting</strong></h2>
<p>Domain Fronting is a technique that leverages CDNs to mask traffic. The client sends a <em>ClientHello</em> to start negotiating the TLS tunnel. In the <em>ClientHello</em> message, the client specifies the front domain (<a target="_blank" href="http://front.example.com">front.example.com</a>) in the SNI field. So the TLS tunnel is formed with the parameters of the front domain.</p>
<p>To an external entity, it maybe companies , governments or any one else viewing the connection, the client would seem communicating with the front domain. The external entities can view the SNI and it is the only way for determine the destination .</p>
<p>Once the TLS tunnel is established, all HTTP requests are now encrypted , which includes the host header with the actual destination domain. The CDNs route the requests to the destination domain using their internal routing. While routing the requests, the CDN does not validate a match between the domain in the SNI and the host fields. This allows Domain Fronting.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:733/1*C8VjYKH6ZEYy19ffqSNm6Q.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-is-it-still-allowed-2025"><strong>Is it still allowed (2025)</strong></h2>
<p>Domain Fronting in now blocked by major platforms. While it helps bypassing firewalls, masking destinations and helped overcome censorship, malicious actors also abused the quirks . It was used to connect to command-and-control servers, for distributing malware or also espionage .</p>
<p>In 2018 Russia blocked IPs of all major CDNs to stop Domain Fronting which caused issues for other companies and services using the CDN. Later Google and AWS disabled Domain Fronting, so as not get completely banned. While no direct regulation exists today banning the technique, most providers voluntarily don’t allow it.</p>
]]></content:encoded></item><item><title><![CDATA[Passkeys - Password less authentication]]></title><description><![CDATA[Passwords-based authentication has been the most common method of authentication for most services on the internet. While implementing password-based authentication is uncomplicated process , it presents various challenges. With the users signing up ...]]></description><link>https://blog.pkdiv.com/passkeys-password-less-authentication</link><guid isPermaLink="true">https://blog.pkdiv.com/passkeys-password-less-authentication</guid><category><![CDATA[passwords]]></category><category><![CDATA[passkeys]]></category><dc:creator><![CDATA[Divyesh P K]]></dc:creator><pubDate>Sat, 07 Jun 2025 18:30:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/-eiswENkF9c/upload/275443c791fe322882e572a519c4bc24.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Passwords-based authentication has been the most common method of authentication for most services on the internet. While implementing password-based authentication is uncomplicated process , it presents various challenges. With the users signing up for a significant number of online services, users tend to reuse and choose weaker passwords. As for service provider, a significant amount effort is required to secure the passwords stored in the database.</p>
<p>Passkeys use asymmetric cryptographic keys for authentication — a public and a private key. When a user register for a service, a the user device creates a pair of public-private key. The private key is stored on the user device, while the public key is sent to and stored on the server.</p>
<p>Each time the user tries to login to a service, the user device digitally signs a challenge from the server. The server then verifies the signature and authenticates the user to the service. Passkeys eliminates user burden of remembering passwords for multiple services.</p>
<p>Passkeys offers numerous security advantages.</p>
<ul>
<li><p>Phishing is thwarted since the public-private key pair is associated with a particular service’s real domain. A change in domain, however subtle or unnoticeable will remain ineffective since the platform used to store the keys, only associated them with the real domain.</p>
</li>
<li><p>A breach of public keys stored on the servers is worthless since they can neither be used to authenticate nor derive the private key within a feasible period with the existing computational capabilities and mathematical understanding.</p>
</li>
<li><p>Eliminates developer effort required to develop and maintain complex security measures to safe public keys.</p>
</li>
<li><p>The authentication process does not involve the transmission of the private key to the server, the key is only used to sign a challenge response</p>
</li>
<li><p>Passkeys can be stored on a native or 3rd party services and synced across all devices used by the user.</p>
</li>
</ul>
<p>Given the security enhancements and the ease of use passkeys (password-less) authentication will become the primary method for users to authenticate users to a service. Major companies have started the implementation of passkeys and smaller organizations soon following them</p>
]]></content:encoded></item></channel></rss>