#!/bin/bash
OPEN_INTERNET=1
declare
-a NO_SURFING=(
'wii-u'
'kids-computer'
)
declare
-a OK_SURFING=(
'parents-computer'
'parents-phone'
)
declare
-a OPEN_TCP_PORTS=(
'ssh'
'http'
'mail'
'submission'
)
declare
-a OPEN_UDP_PORTS=(
'submission'
)
declare
-a CLOSED_PORTS=(
'0:1055'
'svn'
'distcc'
'x11'
'nfs'
'icpv2'
'mysql'
'rtsp'
'3128'
'3130'
'3551'
)
declare
-a LAN_SERVICES=(
"svn"
)
declare
-a IP_BLACKLIST=(
...
)
LAN=enp3s5
WLAN=wlp3s6
WAN=enp2s0
SIT=he-ipv6
INSIDE=( $LAN $WLAN )
LOCAL_RANGE_IPV4=
'192.168.0.0/16'
LOCAL_RANGE_IPV6=
'2001:470:891a::'
iptables -F
iptables -t nat -F
ip6tables -F
ip6tables -t nat -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
ip6tables -P INPUT ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -P FORWARD DROP
iptables -I INPUT 1 -i ${LAN} -j ACCEPT
iptables -I INPUT 1 -i ${WLAN} -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT
ip6tables -I INPUT 1 -i ${LAN} -j ACCEPT
ip6tables -I INPUT 1 -i ${WLAN} -j ACCEPT
ip6tables -I INPUT 1 -i lo -j ACCEPT
for
IP
in
${IP_BLACKLIST[@]} ;
do
iptables -I INPUT -s ${IP} -p TCP --dport
ssh
-j DROP
done
for
IP
in
$@;
do
iptables -I INPUT -s ${IP} -d 0
/0
-j REJECT
done
iptables -A INPUT -p UDP --dport bootps -i ${WAN} -j REJECT
ip6tables -A INPUT -p UDP --dport bootps -i ${SIT} -j REJECT
iptables -A INPUT -p UDP --dport domain -i ${WAN} -j REJECT
ip6tables -A INPUT -p UDP --dport domain -i ${SIT} -j REJECT
for
SERVICE
in
${LAN_SERVICES[@]} ;
do
for
IFACE
in
${INSIDE[@]} ;
do
iptables -A INPUT -p TCP --dport svn -i ${IFACE} -j ACCEPT
iptables -A INPUT -p UDP --dport svn -i ${IFACE} -j ACCEPT
ip6tables -A INPUT -p TCP --dport svn -i ${IFACE} -j ACCEPT
ip6tables -A INPUT -p UDP --dport svn -i ${IFACE} -j ACCEPT
done
done
for
PORT
in
${OPEN_TCP_PORTS[@]} ;
do
iptables -A INPUT -p TCP --dport $PORT -i ${WAN} -j ACCEPT
ip6tables -A INPUT -p TCP --dport $PORT -i ${SIT} -j ACCEPT
done
for
PORT
in
${OPEN_UPD_PORTS[@]} ;
do
iptables -A INPUT -p UDP --dport PORT -i ${WAN} -j ACCEPT
ip6tables -A INPUT -p UDP --dport PORT -i ${SIT} -j ACCEPT
done
for
PORT
in
${CLOSED_PORTS[@]} ;
do
iptables -A INPUT -p TCP -i ${WAN} -d 0
/0
--dport ${PORT} -j DROP
ip6tables -A INPUT -p TCP -i ${SIT} -d 0
/0
--dport ${PORT} -j DROP
iptables -A INPUT -p UDP -i ${WAN} -d 0
/0
--dport ${PORT} -j DROP
ip6tables -A INPUT -p UDP -i ${SIT} -d 0
/0
--dport ${PORT} -j DROP
done
iptables -I FORWARD -i ${LAN} -d $LOCAL_RANGE_IPV4 -j ACCEPT
iptables -A FORWARD -i ${LAN} -s $LOCAL_RANGE_IPV4 -j ACCEPT
ip6tables -I FORWARD -i ${LAN} -d $LOCAL_RANGE_IPV6 -j ACCEPT
ip6tables -A FORWARD -i ${LAN} -s $LOCAL_RANGE_IPV6 -j ACCEPT
if
(( OPEN_INTERNET ));
then
echo
'yay, everybody gets internet'
iptables -I FORWARD -i ${WLAN} -d $LOCAL_RANGE_IPV4 -j ACCEPT
iptables -A FORWARD -i ${WLAN} -s $LOCAL_RANGE_IPV4 -j ACCEPT
ip6tables -I FORWARD -i ${WLAN} -d $LOCAL_RANGE_IPV6 -j ACCEPT
ip6tables -A FORWARD -i ${WLAN} -s $LOCAL_RANGE_IPV6 -j ACCEPT
else
echo
"boo, only ${OK_SURFING[@]} get internet"
for
IP
in
${OK_SURFING[@]};
do
iptables -I FORWARD -i ${WLAN} -d $IP
/255
.255.255.255 -j ACCEPT
iptables -A FORWARD -i ${WLAN} -s $IP
/255
.255.255.255 -j ACCEPT
done
fi
iptables -A FORWARD -i ${WAN} -d $LOCAL_RANGE_IPV4 -j ACCEPT
ip6tables -A FORWARD -i ${WAN} -d $LOCAL_RANGE_IPV6 -j ACCEPT
iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE
ip6tables -t nat -A POSTROUTING -o ${SIT} -j MASQUERADE
/etc/init
.d
/iptables
save
/etc/init
.d
/ip6tables
save
/etc/init
.d
/fail2ban
reload