👨‍💻 Challenge provided by: Chris Elgee
🗺️ Location: NetWars (Grand Hotel) - Area: netwars. Coordinates: 1, 2
🔗 Challenge URL: Holiday Firewall Simulator

Challenge Description

Find Elgee in the big hotel for a firewall frolic and some techy fun.

Helpful References

Learn About Firewalls

Solution

Click on the server rack to start the challenge:

This opens a web page containing the Firewall Simulator:

Our goal is to configure the firewall rules for each security zone:

The challenge provides the following network topology to aid with our task:

Let’s implement the rules for each zone then:

Internet to DMZ: Allow only HTTP and HTTPS traffic

Click Internet. Select HTTPS (Port 443) and HTTP (Port 80). Click Save Rules.

DMZ to Internal: Allow HTTP, HTTPS, and SSH traffic and Internal to DMZ: Allow HTTP, HTTPS, and SSH traffic

Click DMZ. Click Connection to Internal Network. Select HTTPS (Port 443), HTTP (Port 80), and SSH (Port 22). Click Save Rules.

Internal to Cloud: Allow HTTP, HTTPS, SSH, and SMTP traffic

Click Internal Network. Click Connection to Cloud Services. Select HTTPS (Port 443), HTTP (Port 80), SSH (Port 22), and SMTP (Port 25). Click Save Rules.

Internal to Workstations: Allow all traffic types

Click Internal Network. Click Connection to Workstations. Select all options: HTTPS (Port 443), HTTP (Port 80), SSH (Port 22), and SMTP (Port 25), DNS (Port 53), and SMB (Port 445). Click Save Rules.

Once all the rules are configured, the following message appears, indicating that the challenge has been completed:

Extras

The web page has Christmas decorations falling from top to bottom of the page. I noticed that the decoration type, speed, and size seemed random, so I was curious to check the implementation. The following function in main.js implements this functionality:

  // Function to add a random Christmas element to the page
  function addRandomChristmasElement() {
    const elements = ['❄️', '🎄', '🎁', '⛄', '🦌', '🎅', '🔔'];
    const element = document.createElement('div');
    element.innerText = elements[Math.floor(Math.random() * elements.length)];
    element.style.position = 'absolute';
    element.style.fontSize = Math.random() * 20 + 10 + 'px';
    element.style.left = Math.random() * window.innerWidth + 'px';
    element.style.top = '-50px';
    element.style.opacity = '0.7';
    element.style.pointerEvents = 'none'; // Make sure it doesn't interfere with clicks
    element.style.zIndex = '1000';
    element.style.animation = 'float-down ' + (Math.random() * 10 + 5) + 's linear forwards';
    
    document.body.appendChild(element);
    
    // Remove element after animation completes to prevent memory leaks
    setTimeout(function() {
      element.remove();
    }, 15000);
  }

The function is then called every 5 seconds:

  // Add random Christmas elements periodically
  setInterval(addRandomChristmasElement, 5000);