Firewall Annoyed Me. So I Built ufWall

Ansari
Category : Development
Time to read : 5 mins
I built ufWall not because I had a grand vision, not because I spotted a gap in the open-source ecosystem, and definitely not because some product manager handed me a spec sheet. I built it because I was annoyed and bored to be honest.
First What Even Is a Firewall?
Think of your server as a building. It has dozens of doors some for web traffic, some for databases, some for remote access. A firewall is the security guard standing at the entrance deciding which doors are open, which are locked, and who’s allowed through which one.

On Linux, that security guard has a name: UFW short for Uncomplicated Firewall. It’s the tool that lets you say things like “allow web traffic on port 80” or “block everything except SSH” without having to write networking rules that look like alien code.
It ships with Ubuntu by default. It works well. And it is, genuinely, pretty uncomplicated, ok fine then whats wrong ?
The Setup: Arch, UFW, and a Brain That Refuses to Memorize Things
I use Arch, by the way. (I know. I’m sorry. We can’t help it.)
When you use Arch, you install things manually. You configure things manually. You break things manually and then fix them at 1AM while questioning your life choices also manually. Part of the deal is that you actually understand what’s running on your system, which means you end up reaching for ufw pretty often to lock things down.
UFW mostly lives up to that name. But here’s the thing every time I set up a fresh machine, I’d stare at the terminal and go completely blank.
# Is it this?
sudo ufw allow 8080/tcp
# Or this?
sudo ufw allow from 192.168.1.0/24 to any port 5432
# Wait, what rules do I even have right now?
sudo ufw status numbered
# And to delete one?
sudo ufw delete 3
None of these are hard. They’re just… forgettable.The kind of commands you only run often enough to be annoyed when you can’t remember them, but not often enough to commit to muscle memory. Every time I sat down to manage firewall rules, I’d have three browser tabs open, cross-referencing the man page like I was decoding ancient scripture.
I was tired of it and fuking bored at that time.
Enter 'Go' My Latest Learning Obsession
Around the same time, I was picking up Go. I have this thing where I learn languages by building something real. Tutorials and toy projects don’t stick with me, I need a problem I actually care about solving. Go had been on my radar for a while: statically compiled, fast, great standard library, and the tooling is honestly a pleasure. Clean, no ceremony, ships a single binary. I was sold on the philosophy. (But still i prefer C/C++ over anything)
So I had the language (Go), I had the annoyance (UFW), and I had the itch to build something. The only missing piece was the “what.”
Then middle of some random night, after asking claude again how to ufw delete rule by number I thought what if I just didn't have to do this at all?
The Idea: A TUI for UFW
If you’ve never used a TUI (Terminal User Interface), think of it like a GUI that lives inside your terminal. No browser, no Electron app eating 800MB of RAM — just your terminal window, rendered beautifully with keyboard navigation. Tools like htop, lazygit, and impala live in this world. Once you get used to them, going back to typing everything by hand feels like punishment.
I wanted that for UFW. Pull up a clean interface, see all my rules at a glance, add a new one, delete an old one without consulting a man page, without the stack of browser tabs, and without the mild existential dread of typing sudo ufw delete and hoping I got the rule number right. So thats how i ended up with ufWall
Was It Necessary?

I want to be honest here: UFW is already fine. Like, it works. It was designed to be uncomplicated. There are six UFW commands that cover 90% of real-world usage. If you use servers daily, you probably have these memorized and you probably don’t need ufWall.
But that’s not who I built it for.
I built it for the version of me that wants to learn new things in practical way. I built it because I was learning Go and I needed a real problem. ufWall was the perfect size not too small to be meaningless, not too large to finish. Just right for learning how Go handles system calls, how to structure a TUI application, and how to ship something that actually works on a real machine.
What’s Next
ufWall is a work in progress. There are lots of features i could add. If any of this sounds useful to you especially if you’re also an Linux user who love TUI and OSS check it out on GitHub: github.com/the-robin-hood/ufWall
Takeaway
The best side projects aren’t the ones you plan. They’re the ones that fall out of a specific, personal annoyance colliding with a skill you’re actively trying to develop. I was learning Go. I was annoyed at UFW. So i built ufWall.