#!/usr/bin/env bash # @file ~/.local/bin/setup-firewall # @brief Setup and enable the firewall # @description # This script sets up and configures the firewall. On Linux systems, it prefers `firewall-cmd` and, if that is not available, # it uses `ufw`. By default, it allows outgoing traffic and denies incoming traffic. # # ## CloudFlare # # The script will allow incoming traffic on port 80 and 443 from any CloudFlare IP address. The logic was adapted from # [cloudflare-ufw](https://github.com/Paul-Reed/cloudflare-ufw). if command -v firewall-cmd > /dev/null; then echo "firewall-cmd detected - preferring this over UFW" elif command -v ufw > /dev/null; then ### Deny incoming and allow outgoing sudo ufw default deny incoming sudo ufw default allow outgoing ### Allow CloudFlare IPs to connect to port 80 and 443 for CF_IP in `curl -sw '\n' https://www.cloudflare.com/ips-v{4,6}`; do sudo ufw allow proto tcp from "$CF_IP" to any port 80,443 comment 'CloudFlare IP' done ### Enable / reload the firewall sudo ufw enable sudo ufw reload fi