Add default config, init and firewall script
authorNeutron Soutmun <neo.neutron@gmail.com>
Thu, 16 Oct 2008 08:33:31 +0000 (15:33 +0700)
committerNeutron Soutmun <neo.neutron@gmail.com>
Sun, 2 Nov 2008 19:43:11 +0000 (02:43 +0700)
2008-10-16  Neutron Soutmun <neo.neutron@gmail.com>

* +rahunas.{init.default,firewall}: Add the support scripts for do the
  initialize daemon, firewall and daemon config.
* data/rahunas.db: Remove the tested data from db.

rahunas.default [new file with mode: 0644]
rahunas.firewall [new file with mode: 0755]
rahunas.init [new file with mode: 0755]

diff --git a/rahunas.default b/rahunas.default
new file mode 100644 (file)
index 0000000..5e5a858
--- /dev/null
@@ -0,0 +1,27 @@
+# This file controls the behaviour of the rahunas init script.  It
+# will be parsed as a shell script.
+
+# Set to "yes" to have the init script start rahunas.
+RUN_DAEMON=no
+
+# External Interface
+DEV_WAN="eth0"
+
+# Internal Interface
+DEV_LAN="eth1"
+
+# Running in bridge mode - [yes|no]
+BRIDGE=no
+
+# Clients IP 
+# CLIENTS_RANGE_START and CLENTS_RANGE_END are [single ip].
+# CLIENTS_NETWORK is [network_address/netmask].
+# CLIENTS_IGNORE_MAC is [yes|no].
+#
+# Note: The CLIENTS_NETWORK will be used if it set whenever 
+# CLIENTS_RANGE_{START,STOP} are even set.
+
+CLIENTS_RANGE_START="192.168.0.2"
+CLIENTS_RANGE_END="192.168.0.254"
+CLIENTS_NETWORK=""
+CLIENTS_IGNORE_MAC=no
diff --git a/rahunas.firewall b/rahunas.firewall
new file mode 100755 (executable)
index 0000000..ddf0b9a
--- /dev/null
@@ -0,0 +1,117 @@
+#!/bin/sh
+# The firewall script to provides the ability to capture the web request from 
+# the clients and redirect them to the login page to get the authorization to 
+# access the network.
+
+IPTABLES=/sbin/iptables
+IPSET=/usr/sbin/ipset
+
+DESC="RahuNAS firewall support script"
+
+# These values are overriden in /etc/default/rahunas if they exist
+RUN_DAEMON=no
+DEV_WAN="eth0"
+DEV_LAN="eth1"
+BRIDGE=""
+CLIENTS_RANGE_START="192.168.0.2"
+CLIENTS_RANGE_END="192.168.0.254"
+CLIENTS_NETWORK=""
+CLIENTS_IGNORE_MAC=no
+
+# Get configuration
+if [ -r /etc/default/rahunas ]; then
+  . /etc/default/rahunas
+fi
+
+echo -n $DESC
+
+if [ "$RUN_DAEMON" = "no" ]; then
+  exit 0
+fi
+
+# Bridge config
+
+if [ "$BRIDGE" = "yes" ]; then
+  DEV_IN_PARAM="-m physdev --physdev-in"
+else
+  DEV_IN_PARAM="-i"
+fi
+
+$IPTABLES -F -t nat
+$IPTABLES -F -t mangle 
+$IPTABLES -F
+$IPTABLES -X
+
+$IPSET -X
+
+ipset_opt=""
+ipset_ignoremac=""
+
+if [ "$CLIENTS_NETWORK" != "" ]; then
+  ipset_opt="--network $CLIENTS_NETWORK"
+else
+  ipset_opt="--from $CLIENTS_RANGE_START --to $CLIENTS_RANGE_END"
+fi
+
+if [ "$CLIENTS_IGNORE_MAC" = "yes" ]; then
+  ipset_ignoremac="--ignoremac"
+fi
+
+$IPSET -N rahunas_set rahunas $ipset_opt $ipset_ignoremac 
+
+##
+# Allow all traffic for established and related connections
+##
+
+$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
+$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
+
+$IPTABLES -A INPUT $DEV_IN_PARAM $DEV_WAN -m state --state NEW -j ACCEPT
+$IPTABLES -A INPUT -i lo -j ACCEPT
+
+##
+# Allow incoming to our DNS server
+##
+$IPTABLES -I INPUT -p tcp --dport domain -j ACCEPT
+$IPTABLES -I INPUT -p udp --dport domain -j ACCEPT
+
+##
+# Allow incoming to our HTTP server for login page
+##
+$IPTABLES -I INPUT -p tcp -m multiport --dports 80,443,8888 -j ACCEPT
+
+##
+# Allow incoming to our DHCP
+##
+$IPTABLES -I INPUT $DEV_IN_PARAM $DEV_LAN \
+       -p udp --dport 67:68 -j ACCEPT
+$IPTABLES -I FORWARD $DEV_IN_PARAM $DEV_LAN \
+       -p udp --dport 67:68 -j DROP
+
+##
+# Set Default Policy
+##
+$IPTABLES -P INPUT DROP
+$IPTABLES -P OUTPUT ACCEPT
+$IPTABLES -P FORWARD DROP 
+
+##
+# Mark the connections that have been authorized to save rule check time
+##
+$IPTABLES -t mangle -A PREROUTING -m set --set rahunas_set src,dst \
+       -j CONNMARK --set-mark 0x2 
+
+##
+# Accept Forwarding for the authorized clients
+##
+$IPTABLES -A FORWARD -m connmark --mark 0x2 -j ACCEPT
+
+##
+# Redirect unauthorized clients to login page
+##
+
+$IPTABLES -t nat -A PREROUTING -p tcp -m multiport --dports 80,8080,8088,3128 \
+       $DEV_IN_PARAM $DEV_LAN -m connmark ! --mark 10 \
+       -j REDIRECT --to-port 8888
+
+echo "done"
diff --git a/rahunas.init b/rahunas.init
new file mode 100755 (executable)
index 0000000..4a564ad
--- /dev/null
@@ -0,0 +1,68 @@
+#! /bin/sh
+
+### BEGIN INIT INFO
+# Provides:          rahunas
+# Required-Start:    $syslog
+# Required-Stop:     $syslog
+# Should-Start:      $local_fs $network
+# Should-Stop:       $local_fs $network
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Handles the rahunas daemon
+# Description:       Starts, stops the rahunas daemon. 
+### END INIT INFO
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/bin/rahunasd
+NAME=rahunasd
+DESC="rahunasd: Rahu Network Access Server"
+
+# This value is overriden in /etc/default/rahunas if it exists
+RUN_DAEMON=no
+
+test -f $DAEMON || exit 0
+
+set -e
+
+# Get configuration
+if [ -r /etc/default/rahunas ]; then
+  . /etc/default/rahunas
+fi
+
+case "$1" in
+  start)
+       echo -n "Starting $DESC: "
+       /etc/rahunas/firewall.sh
+       if [ "$RUN_DAEMON" = "yes" ]; then
+               start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
+               --exec $DAEMON
+               echo done
+       else
+               echo disabled 
+       fi
+       ;;
+  stop)
+       echo -n "Stopping $DESC: "
+       start-stop-daemon --stop --oknodo --quiet --pidfile /var/run/$NAME.pid \
+               --exec $DAEMON
+       echo done 
+       ;;
+  restart|force-reload)
+       echo -n "Restarting $DESC: "
+       start-stop-daemon --stop --oknodo --quiet --pidfile \
+               /var/run/$NAME.pid --exec $DAEMON
+       sleep 1
+
+       /home/neutron/firewall.sh
+       start-stop-daemon --start --quiet --pidfile \
+               /var/run/$NAME.pid --exec $DAEMON
+       echo "$NAME."
+       ;;
+  *)
+       N=/etc/init.d/$NAME
+       echo "Usage: $N {start|stop|restart|force-reload}" >&2
+       exit 1
+       ;;
+esac
+
+exit 0