| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #!/bin/bash
- ((EUID == 0 )) || { echo "Need root"; exit 1; }
- set -euo pipefail
- CONFD=/etc/e-router
- source $CONFD/config
- if $debug ; then
- set -x
- fi
- set_defaults() {
- /usr/lib/systemd/scripts/iptables-flush
- iptables -P FORWARD DROP
- iptables -P OUTPUT ACCEPT
- iptables -P INPUT DROP
- }
- create_tables() {
- iptables -N FORWARD-LOG-DROP
- iptables -N WAN-LOG-DROP
- iptables -N FW-FILTERED
- iptables -N FW-OPEN
- iptables -N FW-CAST
- ipset create -! $banset hash:ip hashsize 4096 timeout $bantime
- ipset create -! $whiteset hash:net hashsize 4096
- }
- setup_wandroplog() {
- iptables -A WAN-LOG-DROP -p tcp -j LOG --log-prefix "WAN-LOG-DROP TCP: " --log-level 7
- iptables -A WAN-LOG-DROP -p udp -j LOG --log-prefix "WAN-LOG-DROP UDP: " --log-level 7
- iptables -A WAN-LOG-DROP -p icmp -j LOG --log-prefix "WAN-LOG-DROP ICMP: " --log-level 7
- iptables -A WAN-LOG-DROP -j DROP
- }
- setup_fordroplog() {
- iptables -A FORWARD-LOG-DROP -p tcp -j LOG --log-prefix "FORWARD-LOG-DROP TCP: " --log-level 7
- iptables -A FORWARD-LOG-DROP -p udp -j LOG --log-prefix "FORWARD-LOG-DROP UDP: " --log-level 7
- iptables -A FORWARD-LOG-DROP -p icmp -j LOG --log-prefix "FORWARD-LOG-DROP ICMP: " --log-level 7
- iptables -A FORWARD-LOG-DROP -j DROP
- }
- setup_forward() {
- iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- iptables -A FORWARD -i ${eth0} -o ${wan} -j ACCEPT
- if $debug ; then
- iptables -A FORWARD -j FORWARD-LOG-DROP
- else
- iptables -A FORWARD -j DROP
- fi
- }
- setup_nat() {
- iptables -t nat -A POSTROUTING -o ${wan} -s ${locnet} -j MASQUERADE
- }
- setup_white() {
- while read -r net ; do
- [[ "$net" =~ ^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}.[0-9]{1,}/[0-9]{1,}$ ]] || continue
- ipset -! add $whiteset $net
- done < $CONFD/WHITE.nets
- }
- banbadips() {
- iptables -A WAN-IN -m set --match-set $banset src -j REJECT
- }
- setup_white() {
- while read -r port ; do
- [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
- iptables -A FW-FILTERED -m udp -p udp --dport $port -j ACCEPT
- done < $CONFD/WHITE.udp
- while read -r port ; do
- [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
- iptables -A FW-FILTERED -m tcp -p tcp --dport $port -j ACCEPT
- done < $CONFD/WHITE.tcp
- }
- setup_open() {
- while read -r port ; do
- [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
- iptables -A FW-OPEN -m udp -p udp --dport $port -j ACCEPT
- done < $CONFD/ACCEPT.udp
- while read -r port ; do
- [[ "$port" =~ ^[0-9]{1,}$ ]] || continue
- iptables -A FW-OPEN -m tcp -p tcp --dport $port -j ACCEPT
- done < $CONFD/ACCEPT.tcp
- }
- setup_cast() {
- iptables -A FW-CAST -m pkttype --pkt-type broadcast -j ACCEPT
- iptables -A FW-CAST -m pkttype --pkt-type multicast -j ACCEPT
- }
- setup_input() {
- iptables -A INPUT -i lo -j ACCEPT
- iptables -A INPUT -i ${eth0} -j ACCEPT
- iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
- iptables -A INPUT -i ${wan} -m set --match-set $banset src -j REJECT
- iptables -A INPUT -i ${wan} -m set --match-set $whiteset src -j FW-FILTERED
- iptables -A INPUT -i ${wan} -j FW-OPEN
- iptables -A INPUT -i ${wan} -j FW-CAST
- if $debug ; then
- iptables -A INPUT -j WAN-LOG-DROP
- else
- iptables -A INPUT -j DROP
- fi
- }
- main () {
- set_defaults
- create_tables
- setup_fordroplog
- setup_wandroplog
- setup_white
- setup_nat
- setup_forward
- setup_white
- setup_open
- setup_cast
- setup_input
- }
- main
|