mirror of
				https://github.com/flynx/proxmox-utils.git
				synced 2025-11-04 06:00:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/usr/bin/env bash
 | 
						|
# IP Forwarding
 | 
						|
# add to wan interface in: /etc/network/interfaces:
 | 
						|
#       post-up echo 1 > /proc/sys/net/ipv4/ip_forward
 | 
						|
# or:
 | 
						|
#       # sysctl -w net.ipv4.ip_forward=1
 | 
						|
#
 | 
						|
 | 
						|
 | 
						|
# Enable traefik config parsing...
 | 
						|
TRAEFIC=1
 | 
						|
 | 
						|
 | 
						|
# Enable iptables
 | 
						|
#       # apk add iptables iptables-doc
 | 
						|
#       # rc-update add iptables 
 | 
						|
#       # rc-service iptables save
 | 
						|
 | 
						|
LAN=lan
 | 
						|
WAN=wan
 | 
						|
 | 
						|
 | 
						|
# keep connections while configuring...
 | 
						|
iptables -P INPUT ACCEPT
 | 
						|
iptables -P OUTPUT ACCEPT
 | 
						|
iptables -P FORWARD ACCEPT
 | 
						|
 | 
						|
 | 
						|
# Flush iptables rules
 | 
						|
iptables -F
 | 
						|
iptables -X
 | 
						|
iptables -t nat -F
 | 
						|
 | 
						|
 | 
						|
# Statefull connections
 | 
						|
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 | 
						|
 | 
						|
# Loop-back rules
 | 
						|
iptables -A INPUT -i lo -j ACCEPT
 | 
						|
iptables -A OUTPUT -o lo -j ACCEPT
 | 
						|
 | 
						|
# DNS
 | 
						|
iptables -A INPUT -p udp --sport 53 -j ACCEPT
 | 
						|
iptables -A INPUT -p udp --dport 53 -j ACCEPT
 | 
						|
 | 
						|
# ICMP
 | 
						|
#iptables -A INPUT -i $WAN -p icmp -j ACCEPT
 | 
						|
iptables -A INPUT -p icmp -j ACCEPT
 | 
						|
 | 
						|
 | 
						|
# Traefik
 | 
						|
if ! [ -z $TRAEFIC ] ; then
 | 
						|
	# NOTE: we only open ports here not caring about addresses...
 | 
						|
	IFS=$'\n'
 | 
						|
	RULES=($(
 | 
						|
		cat /etc/traefik/traefik.yaml \
 | 
						|
			| grep '^[^#]*address:' \
 | 
						|
			| grep -o "\'.*\'"))
 | 
						|
	for addr in "${RULES[@]}" ; do
 | 
						|
		addr=${addr:1:-1}
 | 
						|
		host=${addr/:*}
 | 
						|
		port=${addr/*:}
 | 
						|
 | 
						|
		udp=
 | 
						|
		tcp=
 | 
						|
		if [[ $port == *udp* ]] ; then
 | 
						|
			udp=1
 | 
						|
		fi
 | 
						|
		if [[ $port == *tcp* ]] ; then
 | 
						|
			tcp=1
 | 
						|
		fi
 | 
						|
		if [ -z $tcp ] && [ -z $udp ] ; then
 | 
						|
			tcp=1
 | 
						|
			udp=1
 | 
						|
		fi
 | 
						|
		port=${port/\/*/}
 | 
						|
 | 
						|
		if ! [ -z $udp ] ; then
 | 
						|
			iptables -A INPUT -p udp --dport $port -j ACCEPT 
 | 
						|
		fi
 | 
						|
		if ! [ -z $tcp ] ; then
 | 
						|
			iptables -A INPUT -p tcp --dport $port -j ACCEPT 
 | 
						|
		fi
 | 
						|
	done
 | 
						|
fi
 | 
						|
 | 
						|
 | 
						|
 | 
						|
# NAT
 | 
						|
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
 | 
						|
 | 
						|
 | 
						|
 | 
						|
# Default policies
 | 
						|
iptables -P INPUT DROP
 | 
						|
iptables -P OUTPUT ACCEPT
 | 
						|
# XXX do we actually need this???
 | 
						|
#       ...uncommenting this breaks forwarding...
 | 
						|
#iptables -P FORWARD DROP
 |