include setup.sh in distribution
[rrq/hourglass.git] / setup.sh
1 #!/bin/bash
2 #
3 # This is a control script to start and stop the network activity
4 # listening.
5
6 CONF="hourglass.conf"
7 function getcfg() {
8     grep -E "\\s*[^;#]$1]\\s*=" $CONF | sed 's/.*=\s*(.*)/\1/;s/\s*$//'
9 }
10
11 NET="$(getcfg listener.ip)"
12 TAP="$(getcfg listener.tap)"
13 SET="$(getcfg ipset.table)"
14
15 cd $(dirname $0)
16
17 RULE=( ! -o $TAP -j TEE --gateway $NET.2 --oif $TAP )
18 case "$CMD" in
19     start)
20         # start the blocking rule
21         if iptables-save | grep -qs "match-set $SET" ; then
22             : # all fine
23         else
24             if ipset list $SET >& /dev/null ; then
25                 : # The set exists
26             else
27                 ipset create $SET hash:net
28             fi
29             iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
30             iptables -A FORWARD -p udp --dport 53 -j ACCEPT
31             iptables -A FORWARD -m set --match-set $SET src -j DROP
32         fi
33         # Start the traffic listener
34         if ifconfig $TAP >& /dev/null ; then
35             echo "Already started"
36         else
37             date >> /tmp/hourglass-listener.log
38             newlisp listener.lsp >> /tmp/hourglass-listener.log 2>&1 &
39             while sleep 1 ; do
40                 ifconfig $TAP >& /dev/null && break
41                 echo $TAP not up yet
42             done
43             ifconfig $TAP $NET.1 up
44             iptables -t mangle -A FORWARD -p tcp --dport 53 -j RETURN
45             iptables -t mangle -A FORWARD -p udp --dport 53 -j RETURN
46             iptables -t mangle -A FORWARD ${RULE[@]}
47         fi
48         ;;
49     stop)
50         iptables -t mangle -F FORWARD
51         if ifconfig $TAP >& /dev/null ; then
52             pkill -2 -f listener.lsp
53         else
54             echo "Already stopped"
55         fi
56         ipset flush $SET
57         ;;
58     *)
59         echo "Unknown: $CMD"
60         ;;
61 esac