How to Implement network Security Architecture in ns3

To implement the network security architecture in ns3 has needs to encompasses to design and emulate the numerous security mechanism and policies to safeguard the network from attacks and make sure that communication is secured and it includes to setup the firewalls, intrusion detection systems (IDS), encryption, and access control mechanisms. The given below are the brief procedures on how to implement the security architecture network in ns3:

Step-by-Step Implementation:

Step 1: Set Up the ns3 Environment

Make sure ns3 is installed in the system.

Step 2: Define the Network Topology

Generate a network topology that contains multiple nodes, links, and their configurations:

#include “ns3/core-module.h”

#include “ns3/network-module.h”

#include “ns3/internet-module.h”

#include “ns3/point-to-point-module.h”

#include “ns3/applications-module.h”

using namespace ns3;

NS_LOG_COMPONENT_DEFINE (“SecurityArchitectureExample”);

int main (int argc, char *argv[]) {

CommandLine cmd;

cmd.Parse (argc, argv);

// Create nodes

NodeContainer nodes;

nodes.Create (4); // Two end nodes, one firewall, and one IDS node

// Create point-to-point links

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute (“DataRate”, StringValue (“5Mbps”));

pointToPoint.SetChannelAttribute (“Delay”, StringValue (“2ms”));

NetDeviceContainer devices;

devices.Add (pointToPoint.Install (NodeContainer (nodes.Get (0), nodes.Get (2)))); // Node 0 to Firewall

devices.Add (pointToPoint.Install (NodeContainer (nodes.Get (1), nodes.Get (2)))); // Node 1 to Firewall

devices.Add (pointToPoint.Install (NodeContainer (nodes.Get (2), nodes.Get (3)))); // Firewall to IDS

// Install Internet stack

InternetStackHelper stack;

stack.Install (nodes);

// Assign IP addresses

Ipv4AddressHelper address;

address.SetBase (“10.1.1.0”, “255.255.255.0”);

address.Assign (devices.Get (0));

address.Assign (devices.Get (1));

address.SetBase (“10.1.2.0”, “255.255.255.0”);

address.Assign (devices.Get (2));

address.SetBase (“10.1.3.0”, “255.255.255.0”);

address.Assign (devices.Get (3));

// Create and configure applications…

Simulator::Run ();

Simulator::Destroy ();

return 0;

}

Step 3: Implement a Firewall

Generate an application to mimic firewall functionality. The firewall will examine packets and enforce security policies:

class Firewall : public Application {

public:

Firewall () : m_socket (0) {}

virtual ~Firewall () {}

void InspectPacket (Ptr<Packet> packet, Address from) {

// Simple firewall rule: block packets with specific pattern

uint8_t *buffer = new uint8_t[packet->GetSize ()];

packet->CopyData (buffer, packet->GetSize ());

std::string data = std::string ((char*)buffer, packet->GetSize ());

if (data.find (“blocked-pattern”) != std::string::npos) {

NS_LOG_WARN (“Firewall: Blocking packet from ” << InetSocketAddress::ConvertFrom (from).GetIpv4 ());

} else {

NS_LOG_INFO (“Firewall: Allowing packet from ” << InetSocketAddress::ConvertFrom (from).GetIpv4 ());

ForwardPacket (packet);

}

delete[] buffer;

}

protected:

virtual void StartApplication () {

m_socket = Socket::CreateSocket (GetNode (), UdpSocketFactory::GetTypeId ());

InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 9);

m_socket->Bind (local);

m_socket->SetRecvCallback (MakeCallback (&Firewall::HandleRead, this));

}

virtual void StopApplication () {

if (m_socket) {

m_socket->Close ();

m_socket = 0;

}

}

private:

void HandleRead (Ptr<Socket> socket) {

Ptr<Packet> packet;

Address from;

while ((packet = socket->RecvFrom (from))) {

InspectPacket (packet, from);

}

}

void ForwardPacket (Ptr<Packet> packet) {

Ptr<Socket> socket = Socket::CreateSocket (GetNode (), UdpSocketFactory::GetTypeId ());

InetSocketAddress remote = InetSocketAddress (Ipv4Address (“10.1.3.2”), 9); // IDS node

socket->Connect (remote);

socket->Send (packet);

socket->Close ();

}

Ptr<Socket> m_socket;

};

Step 4: Implement an Intrusion Detection System (IDS)

Generate an application to mimic IDS functionality. The IDS will monitor traffic and detect suspicious activities:

class IDS : public Application {

public:

IDS () : m_socket (0) {}

virtual ~IDS () {}

void MonitorTraffic (Ptr<Packet> packet, Address from) {

// Simple IDS rule: log packets with specific pattern

uint8_t *buffer = new uint8_t[packet->GetSize ()];

packet->CopyData (buffer, packet->GetSize ());

std::string data = std::string ((char*)buffer, packet->GetSize ());

if (data.find (“suspicious-pattern”) != std::string::npos) {

NS_LOG_WARN (“IDS: Suspicious activity detected in packet from ” << InetSocketAddress::ConvertFrom (from).GetIpv4 ());

// Handle detected activity (e.g., alert administrator)

} else {

NS_LOG_INFO (“IDS: Normal packet from ” << InetSocketAddress::ConvertFrom (from).GetIpv4 ());

}

 

delete[] buffer;

}

protected:

virtual void StartApplication () {

m_socket = Socket::CreateSocket (GetNode (), UdpSocketFactory::GetTypeId ());

InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 9);

m_socket->Bind (local);

m_socket->SetRecvCallback (MakeCallback (&IDS::HandleRead, this));

}

virtual void StopApplication () {

if (m_socket) {

m_socket->Close ();

m_socket = 0;

}

}

private:

void HandleRead (Ptr<Socket> socket) {

Ptr<Packet> packet;

Address from;

while ((packet = socket->RecvFrom (from))) {

MonitorTraffic (packet, from);

}

}

Ptr<Socket> m_socket;

};

Step 5: Deploy the Firewall and IDS Applications

Instantiate and deploy these applications on the appropriate nodes in your network:

int main (int argc, char *argv[]) {

CommandLine cmd;

cmd.Parse (argc, argv);

// Create nodes

NodeContainer nodes;

nodes.Create (4); // Two end nodes, one firewall, and one IDS node

// Create point-to-point links

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute (“DataRate”, StringValue (“5Mbps”));

pointToPoint.SetChannelAttribute (“Delay”, StringValue (“2ms”));

NetDeviceContainer devices;

devices.Add (pointToPoint.Install (NodeContainer (nodes.Get (0), nodes.Get (2)))); // Node 0 to Firewall

devices.Add (pointToPoint.Install (NodeContainer (nodes.Get (1), nodes.Get (2)))); // Node 1 to Firewall

devices.Add (pointToPoint.Install (NodeContainer (nodes.Get (2), nodes.Get (3)))); // Firewall to IDS

// Install Internet stack

InternetStackHelper stack;

stack.Install (nodes);

// Assign IP addresses

Ipv4AddressHelper address;

address.SetBase (“10.1.1.0”, “255.255.255.0”);

address.Assign (devices.Get (0));

address.Assign (devices.Get (1));

address.SetBase (“10.1.2.0”, “255.255.255.0”);

address.Assign (devices.Get (2));

address.SetBase (“10.1.3.0”, “255.255.255.0”);

address.Assign (devices.Get (3));

// Create and configure the Firewall application

Ptr<Firewall> firewall = CreateObject<Firewall> ();

nodes.Get (2)->AddApplication (firewall);

firewall->SetStartTime (Seconds (1.0));

firewall->SetStopTime (Seconds (10.0));

// Create and configure the IDS application

Ptr<IDS> ids = CreateObject<IDS> ();

nodes.Get (3)->AddApplication (ids);

ids->SetStartTime (Seconds (1.0));

ids->SetStopTime (Seconds (10.0));

Simulator::Run ();

Simulator::Destroy ();

return 0;

}

Step 6: Simulate Normal and Malicious Traffic

To test the firewall and IDS systems, simulate sending both normal and malicious traffic from one of the nodes:

class TrafficGenerator : public Application {

public:

TrafficGenerator () : m_socket (0) {}

virtual ~TrafficGenerator () {}

protected:

virtual void StartApplication () {

m_socket = Socket::CreateSocket (GetNode (), UdpSocketFactory::GetTypeId ());

m_peer = InetSocketAddress (Ipv4Address (“10.1.1.1”), 9); // Firewall node

m_socket->Connect (m_peer);

// Schedule normal traffic

Simulator::Schedule (Seconds (2.0), &TrafficGenerator::SendPacket, this, “normal-pattern”);

// Schedule malicious traffic

Simulator::Schedule (Seconds (4.0), &TrafficGenerator::SendPacket, this, “blocked-pattern”);

// Schedule suspicious traffic

Simulator::Schedule (Seconds (6.0), &TrafficGenerator::SendPacket, this, “suspicious-pattern”);

}

virtual void StopApplication () {

if (m_socket) {

m_socket->Close ();

m_socket = 0;

}

}

private:

void SendPacket (std::string pattern) {

Ptr<Packet> packet = Create<Packet> ((uint8_t*)pattern.c_str (), pattern.size ());

m_socket->Send (packet);

}

Ptr<Socket> m_socket;

Address m_peer;

};

int main (int argc, char *argv[]) {

CommandLine cmd;

cmd.Parse (argc, argv);

// Create nodes

NodeContainer nodes;

nodes.Create (4); // Two end nodes, one firewall, and one IDS node

// Create point-to-point links

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute (“DataRate”, StringValue (“5Mbps”));

pointToPoint.SetChannelAttribute (“Delay”, StringValue (“2ms”));

NetDeviceContainer devices;

devices.Add (pointToPoint.Install (NodeContainer (nodes.Get (0), nodes.Get (2)))); // Node 0 to Firewall

devices.Add (pointToPoint.Install (NodeContainer (nodes.Get (1), nodes.Get (2)))); // Node 1 to Firewall

devices.Add (pointToPoint.Install (NodeContainer (nodes.Get (2), nodes.Get (3)))); // Firewall to IDS

// Install Internet stack

InternetStackHelper stack;

stack.Install (nodes);

// Assign IP addresses

Ipv4AddressHelper address;

address.SetBase (“10.1.1.0”, “255.255.255.0”);

address.Assign (devices.Get (0));

address.Assign (devices.Get (1));

address.SetBase (“10.1.2.0”, “255.255.255.0”);

address.Assign (devices.Get (2));

address.SetBase (“10.1.3.0”, “255.255.255.0”);

address.Assign (devices.Get (3));

// Create and configure the Firewall application

Ptr<Firewall> firewall = CreateObject<Firewall> ();

nodes.Get (2)->AddApplication (firewall);

firewall->SetStartTime (Seconds (1.0));

firewall->SetStopTime (Seconds (10.0));

// Create and configure the IDS application

Ptr<IDS> ids = CreateObject<IDS> ();

nodes.Get (3)->AddApplication (ids);

ids->SetStartTime (Seconds (1.0));

ids->SetStopTime (Seconds (10.0));

// Create and configure the TrafficGenerator application

Ptr<TrafficGenerator> trafficGenerator = CreateObject<TrafficGenerator> ();

nodes.Get (0)->AddApplication (trafficGenerator);

trafficGenerator->SetStartTime (Seconds (2.0));

trafficGenerator->SetStopTime (Seconds (8.0));

Simulator::Run ();

Simulator::Destroy ();

return 0;

}

At the end, we thorough the script and provide the valuable insights regarding how to implement the network security architecture using ns3 tool. Further details regarding the implementation of the network security architecture in diverse simulations will be provided. We’re here to help you set up network Security Architecture in the ns3 program! We’ll give you a full guide with easy-to-understand explanations. If you share your project details with us, we can offer even more support. To ensure your project runs smoothly, we also provide firewalls, intrusion detection systems (IDS), encryption, and access control mechanisms.