Git Product home page Git Product logo

simplepf's Introduction

simplepf

simplepf is a simple packet filtering firewall module for the Linux kernel, written using the netfilter framework.

It started as the third homework of CENG489 (Introduction to Computer Security) that I took in 2018 Fall at METU, but it turned out to be an introduction to Linux kernel programming for me.

Configuration interface

When loaded, the module exposes a file in procfs, /proc/simplepf/rules. Rules can be configured by writing struct simplepf_cmd structures to this file. See the header file ./src/uapi/simplepf.h for a detailed explanation of the API.

Userspace helper

There is a userspace helper program (in ./src/tools/) that constructs a struct simplepf_cmd` according to its command line arguments and writes it to the proc file. It is written in C++ and uses Boost's program options library, so Boost is required to build and run it. (tested with Boost 1.66)

Its --help option summarizes its usage. It is not very user friendly and does not try to do much input checking etc. but should still work.

What can be improved

  • Make the default action configurable. However, in this kind of a stateless packet filter, a default deny action would require lots of open ports to operate properly. So, for this to be practical, there needs to be a way of matching a range of ports and IP addresses in rules.
  • Dump the rule list in effect to userspace.
  • Add a way to remove a specific rule.
  • Filter traffic only in specified interfaces.
  • Log matched packets, of course without giving an attacker too much opportunities for a DoS attack.
  • Use something better than procfs for userspace communication. A netlink socket comes to mind but I don't yet know how to use it and I need to finish the homework part quick.

simplepf's People

Contributors

tansly avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

simplepf's Issues

Selectively remove rules

Add a mechanism to remove a specific rule from a chain.

May idenfity rules with an integer id, but how does the user know which rule is which? Of course by consulting the rule list that we dump in proc, see #7.

Write a userspace helper

Define a grammar for commands.
Parse the command, fill a command struct and write it to /proc/simplepf/rules.

Sanitize input

Don't let user set port numbers for ICMP filters or ICMP types for UDP/TCP filters.

Without this sanitization, nothing will break; the fields will just be ignored. But we can at least warn the user.

Make the default action configurable

Default accept policy does not always make sense. Give an option to set the default policy.

However, default deny policy would be too strict for this kind of a packet filter. Without an option to allow a range of ports etc. it will be simply unusable.

Write a README

Document:

  • Kernel/user API
  • Usage of userspace helper
  • Build instructions; especially dependencies of userspace helper such as Boost program options

Add range rules

For more practical configuration, and for a default deny policy to be even marginally practical (#10), there needs to be a way to match a range of ports, IP addresses etc.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.