Skip to content
This repository has been archived by the owner on Oct 26, 2023. It is now read-only.

Hornos3/CoLin-Firewall

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

CoLin's Firewall -- Based on Linux

This is a student's project for Linux firewall.

Development environment:

  • Ubuntu version: Ubuntu 20.04
  • Linux version: 5.15.0-87-generic
  • Qt version: 5.12.8

0x01. Basic Functions

The firewall contains a kernel module and a GUI. The kernel module is used for hooking 2 hooks: PRE_ROUTING and POST_ROUTING. The kernel module provides lots of interfaces for communication with the GUI.

Until the latest version, the firewall can manage:

  • Add and delete rules.
  • Inspect connections, rules and logs
  • Do some settings.

Usage:

  • make in dir 'kernel' to build the kernel module
  • build the GUI in dir 'user'
  • run firewall_user in dir 'user' to run GUI, the GUI will insert and remove kernel modules automatically

0x02. Kernel Interfaces

The firewall kernel module has many interfaces, including saving data, set rules, etc. All interfaces are provided through ioctl function with different command ids.

The chart of commands is shown below:

                           bits                         functions
       7     6     5     4     3     2     1     0
  1 |  0  |  0  |  1  |  0  |  1  |  1  |  0  |  1  |   return pat rules
  2 |  0  |  0  |  1  |  0  |  1  |  1  |  1  |  0  |   add/delete a nat rule
  3 |  0  |  0  |  1  |  0  |  1  |  1  |  1  |  1  |   set configs                         (tested)
  4 |  0  |  0  |  1  |  p  |  p  |  x  |  x  |  h  |   return rules                        (tested)
  5 |  0  |  0  |  1  |  1  |  1  |  1  |  0  |  1  |   set the filename for saving rules   (tested)
  6 |  0  |  0  |  1  |  1  |  1  |  1  |  1  |  0  |   get the filename for saving rules   (tested)
  7 |  0  |  0  |  1  |  1  |  1  |  1  |  1  |  1  |   add a rule for a hook               (tested)
  8 |  0  |  1  |  0  |  x  |  x  |  x  |  x  |  x  |   delete rules                        (tested)
  9 |  0  |  1  |  1  |  1  |  1  |  0  |  0  |  0  |   return connections                  (tested)
 10 |  0  |  1  |  1  |  1  |  1  |  0  |  0  |  1  |   save connections into a file        (will not test)
 11 |  0  |  1  |  1  |  1  |  1  |  0  |  1  |  0  |   clear logs                          (tested)
 12 |  0  |  1  |  1  |  1  |  1  |  0  |  1  |  1  |   return all saved logs               (will not test)
 13 |  0  |  1  |  1  |  1  |  1  |  1  |  0  |  0  |   save all logs into a file           (will not test)
 14 |  0  |  1  |  1  |  1  |  1  |  1  |  0  |  1  |   return newly generated logs         (tested)
 15 |  0  |  1  |  1  |  1  |  1  |  1  |  1  |  0  |   return current configs              (tested)
 16 |  0  |  1  |  1  |  1  |  1  |  1  |  1  |  1  |   save/load rules from a file         (tested)
 17 |  1  |  0  |  0  |  p  |  p  |  x  |  x  |  h  |   set default activity                (tested)
 * p for protocol bits, 0 for TCP, 1 for UDP, 2 for ICMP
 * h for hook id, 0: PRE_ROUTING, 1: POST_ROUTING
 * x for not important
 
      arg formats
  1   a user pointer of enough size
  2   a nat_config* pointer, lsb = 0 for add, others for delete
  3   a config_user* pointer
  4   a user pointer of enough size
  5   a char* pointer
  6   a user pointer
  7   a rule_tbi* pointer
  8   if NULL: delete all rules, else: rule_tbd* pointer
  9   a user pointer of enough size, 3 LSB bit of the pointer for protocol id
 10   a char* pointer for filename
 11   protocol id, if PROTOCOL_SUPPORTED (3 for now): clear all logs, else: clear logs for a protocol
 12   a user pointer of enough size, 3 LSB bit of the pointer for protocol id
 13   a char* pointer for filename, 3 LSB bit of the pointer for protocol id
 14   a user pointer of enough size
 15   config id
 16   a char* pointer for filename, 3 LSB bit of the pointer: 0 for save, 1 for load
 17   bit 0: accept/reject, bit 1: log/no log, bit 7: get(from return value)/set (1/0)

About

HUST Curriculum Design

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published