Files

2.6 KiB

Ubuntu Server 3.3: Firewalls: ufw and iptables

ufw with a default policy, a rule for one address and a rate limit, and a plain iptables firewall that lasts over a reboot.

Before you start

This VM is s1. The peer, at 10.99.0.2 (name peer), is s2: it sits on this VM's second network, 10.99.0.0/24, where this VM is 10.99.0.1 on interface le-host. It has a second address, 10.99.0.3, which stands in for "any other machine". Get a shell there with sudo ip netns exec lepeer bash; from it, curl --interface 10.99.0.3 sends from the second address. The peer runs its own sshd and a test web server on 10.99.0.2:8000, and has no ufw.

On this VM the lab runs a web server on port 80. It saves ufw's rules and turns ufw off, so you start from scratch; reset puts them back. Keep a console open: a firewall mistake can cut off SSH.

The peer is a network namespace, rebuilt at every boot, so its rules can't be kept by iptables-persistent (which would also replace ufw on this VM). Instead, save them to /etc/netns/lepeer/iptables.rules; the lab's le-lab-peer-iptables.service, once enabled, loads that file into the peer at boot.

Tasks

  1. On s1, with ufw: deny incoming by default, allow SSH from anywhere, and allow HTTP only from s2's address. Enable it. sudo ufw status verbose shows deny (incoming) and the two rules; curl http://10.99.0.1/ works from the peer and times out from 10.99.0.3; your SSH session is still alive.
  2. Remove the HTTP rule by its number, then rate-limit SSH. sudo ufw status numbered no longer lists port 80 and shows LIMIT IN for SSH; seven quick nc -z 10.99.0.1 22 from the peer leave [UFW LIMIT BLOCK] lines in /var/log/ufw.log.
  3. On s2, without ufw, use iptables to allow only loopback traffic, SSH, ping and replies to its own connections, dropping everything else, and keep the rules over a reboot. After a reboot, sudo ip netns exec lepeer iptables -S INPUT shows -P INPUT DROP and your rules, and ping -c1 10.99.0.2 from s1 works.

Hints

  • ufw default deny incoming, ufw allow OpenSSH, ufw allow from ADDRESS to any port 80 proto tcp, ufw enable, ufw status verbose.
  • ufw status numbered, ufw delete N, ufw limit OpenSSH; for i in $(seq 7); do nc -z -w1 10.99.0.1 22; done, grep 'LIMIT BLOCK' /var/log/ufw.log.
  • iptables -A INPUT -i lo -j ACCEPT, -m conntrack --ctstate ESTABLISHED,RELATED, -p tcp --dport 22, -p icmp, iptables -P INPUT DROP, all run in the peer. sudo ip netns exec lepeer iptables-save | sudo tee /etc/netns/lepeer/iptables.rules; systemctl enable le-lab-peer-iptables.