#!/bin/bash # Dynamic firewall setup script set -euo pipefail # Function to parse WireGuard endpoint parse_wg_endpoint() { local wg_config="${1:-/etc/wireguard/wg0.conf}" if [[ ! -f $wg_config ]]; then echo "Error: WireGuard config not found at $wg_config" return 1 fi grep -oP 'Endpoint = \K[0-9.]+:[0-9]+' "$wg_config" || { echo "Error: Could not parse endpoint from WireGuard config" return 1 } } # Function to generate nftables rules generate_nftables_rules() { local endpoint="$1" local ip="${endpoint%:*}" local port="${endpoint#*:}" cat </etc/nftables.conf systemctl enable nftables systemctl restart nftables echo "Firewall configured for endpoint: $endpoint" else echo "Warning: Could not parse WireGuard endpoint, using default deny policy" fi else echo "Warning: WireGuard config not found, using default deny policy" fi } # Main setup main() { echo "Setting up dynamic firewall..." apply_firewall "${1:-}" echo "Firewall setup completed." } # Run main if script is executed directly if [[ ${BASH_SOURCE[0]} == "${0}" ]]; then main "$@" fi