# Docker

# How to use UFW with Docker // ufw-docker

## Why you need it

Docker publishes ports by inserting its own iptables rules before UFW can see them.
A normal `ufw deny 8080` does nothing.
`ufw-docker` fixes this by making Docker traffic go through UFW’s rules.

## PrerequisitesUbuntu / Debian (or any distro with UFW)
Docker already installed and working
UFW preferably already enabled

Make sure Docker’s iptables management is enabled (default):

```
# Check (should NOT have "iptables": false)
cat /etc/docker/daemon.json
```

##. Install ufw-docker

```
# Download the script
sudo wget -O /usr/local/bin/ufw-docker \
  https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker

# Make it executable
sudo chmod +x /usr/local/bin/ufw-docker
```

Install the necessary UFW rules:

```
sudo ufw-docker install
```

This backs up `/etc/ufw/after.rules` and adds the required Docker-aware rules.
Reload UFW:
```
sudo ufw reload
# or
sudo systemctl restart ufw
```

(Optional but recommended) Install the systemd service so rules stay updated:

```
sudo ufw-docker install-service
```

## Basic UFW setup

```
# Set defaults
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Always allow SSH (change port if needed)
sudo ufw allow 22/tcp
# or: sudo ufw allow 2222/tcp

# Enable UFW
sudo ufw enable
```

## How to allow / deny Docker containers

**Important concept:**

You allow the container port, not the host port.   
Example:

```
docker run -d --name web -p 8080:80 nginx
```

→ You allow port 80 (the container’s port).

### Allow a container

```
# Allow all published ports of the container
sudo ufw-docker allow web

# Allow only a specific port
sudo ufw-docker allow web 80
sudo ufw-docker allow web 80/tcp
sudo ufw-docker allow web 53/udp
```

### Allow only from a specific IP / network

```
sudo ufw-docker allow web 80 from 203.0.113.50
sudo ufw-docker allow web 80 from 192.168.1.0/24
```

### Delete rules

```
# Remove all rules for the container
sudo ufw-docker delete allow web

# Remove a specific port
sudo ufw-docker delete allow web 80
```

### Useful commands

```
ufw-docker status          # Show current Docker-related rules
ufw-docker list web        # Show rules for a specific container
ufw-docker check           # Verify installation
ufw-docker help            # Full help
```