Skip to content

Instantly share code, notes, and snippets.

@aqhmal
Last active May 13, 2022 08:13
Show Gist options
  • Save aqhmal/1d953e3c4cc6db2e538bc81dec863bca to your computer and use it in GitHub Desktop.
Save aqhmal/1d953e3c4cc6db2e538bc81dec863bca to your computer and use it in GitHub Desktop.
Setup Docker with UFW

Setup Docker with UFW

In this scenario, I am using DigitalOcean VPS to demonstrate on this tutorial.

Setup the VPS

  1. Update & upgrade the repository
$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get dist-upgrade -y
$ sudo apt-get autoremove -y
$ sudo apt clean
  1. Reboot
sudo reboot
  1. Install Docker Engine
$ sudo apt install -y ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install -y docker-ce docker-ce-cli containerd.io
  1. Start Docker NGINX container
$ docker run -d -p 80:80 --name nginx nginx:latest

Firewall Configuration

  1. Append the following in /etc/ufw/after.rules
# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:ufw-docker-logging-deny - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j ufw-user-forward

-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16

-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN

-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12

-A DOCKER-USER -j RETURN

-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
-A ufw-docker-logging-deny -j DROP

COMMIT
# END UFW AND DOCKER
  1. Make sure DEFAULT_FORWARD_POLICY="DROP" in /etc/default/ufw
$ cat /etc/default/ufw | grep DEFAULT_FORWARD_POLICY
  1. Enable ufw
$ sudo ufw enable
  1. Allow SSH port
$ sudo ufw allow from any to any port 22
  1. Allow port from Docker (80)
$ sudo ufw route allow proto tcp from any to any port 80
  1. Reload ufw
$ sudo ufw reload
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment