Nuxified

FOSS technologies explained

  • Useful Articles
  • Blogs
  • Images
  • Tips
  • Archives
You are here: Home / How to test your Linux-Distro FIREWALL !

How to test your Linux-Distro FIREWALL !

Recently, I wrote an article about How to scan your Linux-Distro for Root Kits.
Now that the machine is… clean! I think, a good thing TO-DO, is to test my Firewall (AGAIN !!!)
The good news are that we can use the free tool FTester.
The bad news are that FTester needs to be configured right…

So… Let’s get to work !

What is FTester ?
The Firewall Tester (FTester) is a tool designed for testing firewalls filtering policies and Intrusion Detection System (IDS) capabilities.

The tool consists of two perl scripts, a packet injector (ftest) and the listening sniffer (ftestd).
The first script injects custom packets, defined in ftest.conf, with a signature in the data part while the sniffer listens for such marked packets.
The scripts both write a log file which is in the same form for both scripts.
A diff of the two produced files (ftest.log and ftestd.log) shows the packets that were unable to reach the sniffer due to filtering rules if these two scripts are ran on hosts placed on two different sides of a firewall.
Stateful inspection firewalls are handled with the ‘connection spoofing’ option.
A script called freport is also available for automatically parse the log files.

The IDS (Intrusion Detection System) testing feature can be used either with ftest only or with the additional support of ftestd for handling stateful inspection IDS, ftest can also use common IDS evasion techniques.
Instead of using the configuration syntax currently the script can also process snort rule definition file.

Features:
– firewall testing
– IDS testing
– simulation of real tcp connections for stateful inspection firewalls and IDS
– connection spoofing
– IP fragmentation / TCP segmentation
– IDS evasion techniques

Requirements:
The following perl modules are required: Net::RawIP, Net::PcapUtils, NetPacket

So… we will need the Net::RawIP , Net::PcapUtils, and NetPacket Perl modules. We may also need theNet::Pcap module if it is not already installed, because the Net::PcapUtils module depends on it.
If we have the CPAN Perl module, we may install these modules with the following commands from shell:

# perl -MCPAN -e "install Net::RawIP"
# perl -MCPAN -e "install Net::Pcap"
# perl -MCPAN -e "install Net::PcapUtils"
# perl -MCPAN -e "install NetPacket"

# perl -MCPAN -e "install Net::RawIP" # perl -MCPAN -e "install Net::Pcap" # perl -MCPAN -e "install Net::PcapUtils" # perl -MCPAN -e "install NetPacket"

… and we are done with the perl modules.

Download:
The most recent release is ftester-1.0.tar.gz (2006-Feb-13). From shell run…

# wget http://dev.inversepath.com/ftester/ftester-1.0.tar.gz

# wget http://dev.inversepath.com/ftester/ftester-1.0.tar.gz

All releases at available at http://dev.inversepath.com/ftester.

Extract:
Use tar to… unzip the source code. From shell run…

# tar -xzf ftester-1.0.tar.gz

# tar -xzf ftester-1.0.tar.gz

So far…
We have installed a few perl modules required, we have downloaded ftester-1.0.tar.gz (2006-Feb-13) and we have extracted the file and made the directory ftester-1.0.
Well done !!!

Configuration:
We will need to create a configuration file to tell ftest what packets it should generate.
The definition of the packets we want to send for test if they can traverse the firewall is mainly specified in a configuration file (ftest.conf), the main syntax is:

Source Address:Source Port:Destination Address:Destination Port:Flags:Protocol:Type of Service

Source Address:Source Port:Destination Address:Destination Port:Flags:Protocol:Type of Service

for TCP and UDP packets,

Source Address:Source Port:Destination Address:Destination Port:Flags:ICMP:icmp_type:icmp_code

Source Address:Source Port:Destination Address:Destination Port:Flags:ICMP:icmp_type:icmp_code

for ICMP packets.

a few examples:

# SYN packet to 10.1.7.1 port 80 192.168.0.10:1024:10.1.7.1:80:S:TCP:0# PSH,ACK reply from 192.168.0.10 192.168.0.10:20:10.1.7.1:1022:AP:TCP:22 # UDP packet 192.168.0.10:53:10.1.7.1:53::UDP:0 # ICMP packet type 3 code 5 192.168.0.10::10.1.7.1:::ICMP:3:5 # ranges are allowed for source address, source port, destination port<br /># source address can also be specified in CIDR form<br />192.168.0.1-255:1024:10.1.7.1:22:S:TCP:0<br />192.168.0.1:1024:10.1.7.1:1-65535:S:TCP:0<br />192.168.0.1:1-1024:10.7.0.1:20-25:S:TCP:22<br />192.168.3.0/24:1-1024:10.7.0.1:20-25:S:TCP:0<br />192.168.0.0/22:1024:10.7.0.1:80:S:TCP:0<br />

# SYN packet to 10.1.7.1 port 80 192.168.0.10:1024:10.1.7.1:80:S:TCP:0# PSH,ACK reply from 192.168.0.10 192.168.0.10:20:10.1.7.1:1022:AP:TCP:22 # UDP packet 192.168.0.10:53:10.1.7.1:53::UDP:0 # ICMP packet type 3 code 5 192.168.0.10::10.1.7.1:::ICMP:3:5 # ranges are allowed for source address, source port, destination port<br /># source address can also be specified in CIDR form<br />192.168.0.1-255:1024:10.1.7.1:22:S:TCP:0<br />192.168.0.1:1024:10.1.7.1:1-65535:S:TCP:0<br />192.168.0.1:1-1024:10.7.0.1:20-25:S:TCP:22<br />192.168.3.0/24:1-1024:10.7.0.1:20-25:S:TCP:0<br />192.168.0.0/22:1024:10.7.0.1:80:S:TCP:0<br />

A stop signal is necessary for telling ftestd that our test is completed, so use the following syntax:

stop_signal=192.168.0.1:666:10.1.7.1:666:S:TCP:<br />

stop_signal=192.168.0.1:666:10.1.7.1:666:S:TCP:<br />

the stop_signal can be a TCP, UDP or ICMP packet, this packet will cause the termination of the sniffer so every packet specified after the stop_signal directive wont be seen by ftestd.

Now from shell…

# vi ftest.conf

# vi ftest.conf

You will see a lot of stuff in there… Just comment anything you don’t need !!! I used…

# checking privileged ports (<1025)<br />192.168.0.10:1025:10.1.7.1:1-1025:S:TCP:0<br /># checking proxy port<br />192.168.0.10:1025:10.1.7.1:3128:S:TCP:0<br />stop_signal=192.168.0.10:80:10.1.7.1:1025:AP:TCP:0

# checking privileged ports (<1025)<br />192.168.0.10:1025:10.1.7.1:1-1025:S:TCP:0<br /># checking proxy port<br />192.168.0.10:1025:10.1.7.1:3128:S:TCP:0<br />stop_signal=192.168.0.10:80:10.1.7.1:1025:AP:TCP:0

Before starting ftest, we should be root and then start ftestd, from shell:

# ./ftestd -i eth0

# ./ftestd -i eth0

Run ftest from shell:

# ./ftest -f ftest.conf

# ./ftest -f ftest.conf

Finally we copy the two log files on the same host and we compare them using freport from shell:

# ./freport ftest.log ftestd.log

# ./freport ftest.log ftestd.log

You will see something like…

Authorized packets:<br />-------------------------------<br />21 - 192.168.0.10:1025 > 10.1.7.1:21 S TCP 0<br />22 - 192.168.0.10:1025 > 10.1.7.1:22 S TCP 0<br />23 - 192.168.0.10:1025 > 10.1.7.1:23 S TCP 0<br />25 - 192.168.0.10:1025 > 10.1.7.1:25 S TCP 0<br />80 - 192.168.0.10:1025 > 10.1.7.1:80 S TCP 0<br />110 - 192.168.0.10:1025 > 10.1.7.1:110 S TCP 0<br />113 - 192.168.0.10:1025 > 10.1.7.1:113 S TCP 0<br />1027 - 192.168.0.10:80 > 10.1.7.1:1025 PA TCP 0<br />Modified packets (probably NAT):<br />--------------------------------<br />443 - 192.168.0.10:1025 > 10.1.7.1:443 S TCP 0<br />443 - 192.168.0.10:1025 > 10.1.7.5:443 S TCP 0<br />Filtered or dropped packets:<br />--------------------------------<br />1 - 192.168.0.10:1025 > 10.1.7.1:1 S TCP 0<br />2 - 192.168.0.10:1025 > 10.1.7.1:2 S TCP 0<br />3 - 192.168.0.10:1025 > 10.1.7.1:3 S TCP 0<br />...<br />...<br />...<br />1026 - 192.168.0.10:1025 > 10.1.7.1:3128 S TCP 0<br />

Authorized packets:<br />-------------------------------<br />21 - 192.168.0.10:1025 > 10.1.7.1:21 S TCP 0<br />22 - 192.168.0.10:1025 > 10.1.7.1:22 S TCP 0<br />23 - 192.168.0.10:1025 > 10.1.7.1:23 S TCP 0<br />25 - 192.168.0.10:1025 > 10.1.7.1:25 S TCP 0<br />80 - 192.168.0.10:1025 > 10.1.7.1:80 S TCP 0<br />110 - 192.168.0.10:1025 > 10.1.7.1:110 S TCP 0<br />113 - 192.168.0.10:1025 > 10.1.7.1:113 S TCP 0<br />1027 - 192.168.0.10:80 > 10.1.7.1:1025 PA TCP 0<br />Modified packets (probably NAT):<br />--------------------------------<br />443 - 192.168.0.10:1025 > 10.1.7.1:443 S TCP 0<br />443 - 192.168.0.10:1025 > 10.1.7.5:443 S TCP 0<br />Filtered or dropped packets:<br />--------------------------------<br />1 - 192.168.0.10:1025 > 10.1.7.1:1 S TCP 0<br />2 - 192.168.0.10:1025 > 10.1.7.1:2 S TCP 0<br />3 - 192.168.0.10:1025 > 10.1.7.1:3 S TCP 0<br />...<br />...<br />...<br />1026 - 192.168.0.10:1025 > 10.1.7.1:3128 S TCP 0<br />

That’s all folks.
A good idea is to run ftest each time you make changes to your firewall, or from time to time just to make sure that your firewall works !!!

Read more:
Man page (ftester.Cool
README

PS:
I don’t think is a good idea to post the results of my test !!!
😉

Learn Unix

I run Unix Tutorial website and help anyone interested to pick up Unix skills. If you have questions or just want to share your ideas – please join the Unix Tutorial on Facebook.

Tech Stack Solutions

Tech Stack Solutions is my company that provides Unix support. Sign up or simply get in touch to find out how I can help!

Search this Website

You May Also Like

Recent Posts

  • Advice on using SUDO
  • FFmpeg 4.0
  • KDE Plasma 5.9.0 Release
  • How to Install Ubuntu Linux without a DVD or USB
  • How to Securely Save All Your Passwords with Keepass
  • 9 Signs You Should Use Linux on Your Computer
  • The Easiest Way to Optimize Your MySQL Database Performance
  • Setting up a Linux Web Development Environment in Windows
  • Hunting Down Disk Space Hogs on Linux Command Line
  • 6 Simple Android Apps for Monitoring and Managing Your Linux Server

Archives

Categories

  • Community Blogs
  • Images and Screenshots
  • News
  • Technical Topics
  • Useful Articles

Basic Unix Commands

Basic Unix Commands
  • ls command
  • mkdir command
  • man command in unix
  • cd command - change directory
  • uname command

Advanced Unix Commands

Advanced Unix Commands
  • ln command - symlinks
  • tune2fs unix command - filesystem parameters
  • du command - disk usage
  • lsb_release command
  • find unix command

Unix Reference

Unix Reference
  • SSH port forwarding
  • unix commands
  • visudo tutorial
  • mtime unix
  • lrwxrwxrwx
  • Unix Tutorial digest

Unix Books

Unix Tutorials

Unix How-Tos
  • check raspbian version
  • autostart in KVM
  • List files in Ubuntu package
  • check CentOS version
  • create bootable USB in MacOS
  • Useful Articles
  • Blogs
  • Images
  • Tips
  • Archives

Copyright © 2021 · Education Pro Theme on Genesis Framework · WordPress · Log in