Menu

Showing posts with label Infrastructure. Show all posts
Showing posts with label Infrastructure. Show all posts

25 Oct 2025

🌐🧱 Enterprise Network Architecture — Akamai, DNS, WAF, DMZ, SSL & Firewall Flow Explained for Middleware & DevOps EngineersπŸ”’πŸ”‘

  • 🏒 In an enterprise environment, understanding how network traffic flows from users to internal applications is essential for performance, security, and compliance.
  • 🌐 This post explains the complete inbound and outbound flow — covering DNS, Akamai WAF, Firewall, DMZ, and SSL certificate management across enterprise systems.


πŸ—Ί️ Network Flow Diagram

πŸ”Ή Inbound Flow (User → Application → Database):
🌐 User → 🧭 Akamai DNS → πŸ›‘️ Akamai WAF → 🚧 Firewall → 🏰 DMZ → πŸ“‘ Load Balancer → πŸ–₯️ Web Server → ⚙️ App Server → πŸ’Ύ Database


πŸ”Ή Outbound Flow (Internal App → Internet):
πŸ–₯️ VM/App → 🧭 Internal DNS → πŸ›‘️ Proxy Server → πŸšͺ Firewall (SNAT) → 🌍 Internet


🧰 Setup Phase (One-Time Configurations)

  • 🧭 DNS (Domain Name System): Resolves domain names into IP addresses for user access.
  • πŸ“„ A Record: Maps a domain name to an IP address (e.g., app.company.com → 104.85.32.11).
  • DNS Validation: Verifies domain ownership during SSL or CDN setup using a TXT record.
  • πŸ”’ SSL Certificate Setup: Enables secure HTTPS communication between users and servers.
  • 🌍 Public SSL (Internet Apps): Managed by Akamai CPS, DigiCert, or Let’s Encrypt.
  • 🏒 Internal SSL (Intranet Apps): Used for applications accessed inside an organization’s private network — typically using Microsoft ADCS or HashiCorp Vault PKI for certificate management. Additionally, internal SSL certificates are often deployed directly on web servers such as:
    • 🌐 Apache HTTP Server — configured in ssl.conf or virtual host files.
    • ⚙️ NGINX — defined using ssl_certificate and ssl_certificate_key directives.
    • πŸͺŸ Microsoft IIS — managed via IIS Manager or PowerShell scripts.
    • πŸ–₯️ IBM IHS or F5 / Radware — for SSL termination or offloading at the load balancer level.
  • πŸ›‘️ Firewall & DMZ Setup: Protects internal systems from public exposure.

🌐 How CDN & DNS Flow Works

Let’s simplify what happens when someone accesses https://app.company.com and you’re using a CDN like Akamai:

  1. 🧭 DNS resolution (First Step)
    app.company.com → app.company.com.edgesuite.net # The domain is not directly mapped to your firewall. Instead, it's pointed to Akamai’s CDN hostname (CNAME). This lets Akamai handle global routing, SSL, and caching before hitting your network.
  2. 🌍 Akamai Edge IP resolution
    app.company.com.edgesuite.net → 104.85.32.11 # Akamai DNS picks the nearest edge server IP based on user location. This gives low latency and faster content delivery (geo-DNS routing).
  3. πŸ›‘️ User connects to Akamai Edge
    Akamai Edge performs:
    - WAF (Web Application Firewall) checks
    - SSL/TLS termination
    - Content caching for faster response
    - Origin fetch (only if needed) # The user’s browser never touches your firewall directly. Akamai acts as the “front door” — securing, filtering, and caching content. This is where DDoS protection and certificate validation happen.
  4. 🏰 CDN connects to your enterprise public IP
    Akamai Edge → 203.122.10.55 # Akamai now makes a backend (origin) call to your organization’s public IP. This IP is provided by your ISP and configured on your enterprise firewall as a VIP (Virtual IP). It represents your app’s public presence on the Internet.
  5. 🚧 Firewall DNAT Mapping (Public → Private)
    203.122.10.55 → 10.10.5.21 # The firewall receives the request on the public IP and uses DNAT (Destination NAT) to map it to the private IP of your internal web/app server. This keeps internal servers hidden while maintaining full access control.
  6. πŸ–₯️ Private App Server Processing
    The request reaches 10.10.5.21 → app logic executes → response generated. # This is where your actual business logic runs (Tomcat, WebSphere, NGINX, etc.). The app prepares a response that travels back the same path — but in reverse.
  7. πŸ” Response Path (Reverse Flow)
    App Server → Firewall SNAT → Akamai Edge → User Browser # The firewall uses SNAT (Source NAT) to mask internal IPs with the public IP. Akamai then caches or delivers the content to the user securely.

πŸ§‘‍πŸ’» User Browser
   ↓
🧭 DNS → 🌐 app.company.com → πŸŒ€ app.company.com.edgesuite.net
   ↓
🌍 Akamai Edge IP (104.85.32.11)
   ↓
πŸ›‘️ Akamai Edge → 🚧 Firewall Public IP (203.122.10.55)
   ↓
🏒 Firewall DNAT → πŸ–₯️ Internal DMZ / Web / App Server (10.10.5.21)
   ↓
πŸ” Response → πŸšͺ Firewall SNAT → 🌍 Akamai Edge → πŸ§‘‍πŸ’» User
πŸ’¬ In short:
  • πŸ‘₯ Users never connect directly to your private network.
  • πŸ›‘️ Requests first hit Akamai’s Edge IPs — acting as a secure global shield for your applications.
  • 🌍 Akamai forwards clean traffic to your enterprise Public IP (assigned by ISP).
  • 🚧 The Firewall performs DNAT to map the public IP to a Private App Server (10.x.x.x).
  • πŸ” During the return flow, the Firewall uses SNAT to mask internal IPs before sending responses back to the user.

⚙️ Runtime Flow (When Users Access the App)

Inbound Flow (Internet → App)

  • 🌍 User opens https://app.company.com
  • 🧭 DNS resolves to Akamai Edge IP.
  • πŸ›‘️ Akamai WAF filters and forwards clean traffic.
  • 🚧 Firewall performs DNAT to internal private IP.
  • 🏰 DMZ hosts load balancer/web proxies.
  • πŸ“‘ Load balancer distributes traffic to web/app servers.
  • πŸ–₯️ App processes request and sends response back through the same path.

πŸ”  Key Terms (Full Forms)

TermFull FormSimple Meaning
DNSDomain Name SystemConverts website names into IPs
WAFWeb Application FirewallBlocks bad web traffic
CDNContent Delivery NetworkDelivers cached web content faster
DMZDemilitarized ZoneBuffer zone between internet & private network
NATNetwork Address TranslationMaps public ↔ private IPs
DNATDestination NATInbound mapping (public → private)
SNATSource NATOutbound mapping (private → public)
PKIPublic Key InfrastructureManages SSL certificates
LBLoad BalancerDistributes traffic across servers

✅ Summary

  • DNS only maps names to IPs — it doesn’t store servers.
  • CDNs like Akamai act as a smart middle layer for caching and security.
  • Public IPs are used on firewalls or load balancers; private IPs stay hidden inside.
  • DNAT and SNAT handle IP translation for inbound and outbound traffic.
  • SSL ensures secure HTTPS connections both at the CDN and internal layers.

πŸ”§ Authored by Pradeep Vishwakarma — Senior Middleware & DevOps Engineer | MiddlewareBox.com

4 Oct 2023

How to Check DB latency using Datasource Test-Connection.

1. Create JdbcLatencyTest.java file and copy below code.


2. Do the changes for respective DB Driver class name and JDBC string along with Username & Password.

// ###################### JdbcLatencyTest.java File Contents ############# //

**********************************************************
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class JdbcLatencyTest {
    private static final int NUM_ITERATIONS = 10;


    public static void main(String[] args) {
        // JDBC driver class name and database URL string
        String driver = "oracle.jdbc.xa.client.OracleXADataSource";
        String url = "jdbc:oracle:thin:@123.789.123.456/SERVICENAME";


        // JDBC connection properties for Username and password
        String username = "username";
        String password = "Password";


        // Array to store latency measurements
        long[] latencyArray = new long[NUM_ITERATIONS];
        for (int i = 0; i < NUM_ITERATIONS; i++) {
            Connection conn = null;
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
            String connectionStartTime = null;
            String connectionEndTime = null;
            try {
                // Load the JDBC driver
                Class.forName(driver);
                // Start the timer for connection establishment
                long startConnectionTime = System.currentTimeMillis();
                // Capture the timestamp when the connection is created
                connectionStartTime = dateFormat.format(new Date());
                // Create the connection
                conn = DriverManager.getConnection(url, username, password);
                // Calculate the elapsed time for connection establishment
                long endConnectionTime = System.currentTimeMillis();
                long connectionLatency = endConnectionTime - startConnectionTime;
                // Capture the timestamp when the connection is closed
                connectionEndTime = dateFormat.format(new Date());
                // Store the latency value in the array
                latencyArray[i] = connectionLatency;
                // Print detailed latency information
                System.out.println("Iteration " + (i + 1) + ":");
                System.out.println("    Connection Start Time: " + connectionStartTime);
                System.out.println("    Connection End Time:   " + connectionEndTime);
                System.out.println("    Latency:               " + connectionLatency + " ms");
                // Close the connection
                conn.close();
            } catch (ClassNotFoundException e) {
                // Handle driver loading exception
                e.printStackTrace();
            } catch (SQLException e) {
                // Handle connection exception
                e.printStackTrace();
            }
        }
        // Print the overall latency statistics
        System.out.println("Connection Latency Measurements:");
        for (int i = 0; i < NUM_ITERATIONS; i++) {
            System.out.println("Iteration " + (i + 1) + ": " + latencyArray[i] + " ms");
        }
    }
}
***************************************************



FYI, JDBC Driver Class Name to connect respective DB:
  • oracle.jdbc.xa.client.OracleXADataSource   (for Oracle 19c and 12c DB , ojdbc8.jar with JDK8 complied)
  • oracle.jdbc.pool.OracleConnectionPoolDataSource  (for Oracle 11g with minimum jDK7, JDK8 complied)
  • org.postgresql.Driver (for POSTGRESQL DB , with postgresql-42.6.0.jar  )
  • com.microsoft.sqlserver.jdbc.SQLServerXADataSource (for MSSQL DB, with mssql-jdbc-12.2.0.jre8.jar)



3. Execute the below commands for compile and run.

$JAVA_HOME/java/8.0/bin/javac -cp /home/wasadmin/ojdbc8.jar JdbcLatencyTest.java

$JAVA_HOME/java/8.0/bin/java  -cp .:/home/wasadmin/ojdbc8.jar JdbcLatencyTest


################# Output #######################

[user@newhost ~]$ $JAVA_HOME/java/8.0/bin/javac -cp /home/wasadmin/ojdbc8.jar JdbcLatencyTest.java
[user@newhost ~]$ $JAVA_HOME/java/8.0/bin/java -cp .:/home/wasadmin/ojdbc8.jar JdbcLatencyTest


Iteration 1:
    Connection Start Time: 2023-10-03 06:42:24.018
    Connection End Time:   2023-10-03 06:42:30.189
    Latency:               6171 ms
Iteration 2:
    Connection Start Time: 2023-10-03 06:42:30.212
    Connection End Time:   2023-10-03 06:42:30.537
    Latency:               325 ms
Iteration 3:
    Connection Start Time: 2023-10-03 06:42:30.549
    Connection End Time:   2023-10-03 06:42:30.842
    Latency:               293 ms
Iteration 4:
    Connection Start Time: 2023-10-03 06:42:30.854
    Connection End Time:   2023-10-03 06:42:31.150
    Latency:               296 ms
Iteration 5:
    Connection Start Time: 2023-10-03 06:42:31.162
    Connection End Time:   2023-10-03 06:42:31.446
    Latency:               284 ms
Iteration 6:
    Connection Start Time: 2023-10-03 06:42:31.458
    Connection End Time:   2023-10-03 06:42:31.694
    Latency:               236 ms
Iteration 7:
    Connection Start Time: 2023-10-03 06:42:31.708
    Connection End Time:   2023-10-03 06:42:31.946
    Latency:               238 ms
Iteration 8:
    Connection Start Time: 2023-10-03 06:42:31.958
    Connection End Time:   2023-10-03 06:42:32.215
    Latency:               257 ms
Iteration 9:
    Connection Start Time: 2023-10-03 06:42:32.226
    Connection End Time:   2023-10-03 06:42:32.459
    Latency:               233 ms
Iteration 10:
    Connection Start Time: 2023-10-03 06:42:32.472
    Connection End Time:   2023-10-03 06:42:32.729
    Latency:               257 ms
Connection Latency Measurements:
Iteration 1: 6171 ms
Iteration 2: 325 ms
Iteration 3: 293 ms
Iteration 4: 296 ms
Iteration 5: 284 ms
Iteration 6: 236 ms
Iteration 7: 238 ms
Iteration 8: 257 ms
Iteration 9: 233 ms
Iteration 10: 257 ms
[user@newhost ~]$