chiark / gitweb /
finalise changelog
[autopkgtest.git] / xen / initscript
1 #!/bin/bash
2 set -e
3 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
4
5 ### BEGIN INIT INFO
6 # Provides: adtxenlvm
7 # Required-Start: $network $remote_fs
8 # Required-Stop: $network $remote_fs
9 # Default-Start: 2 3 4 5
10 # Default-Stop: 0 1 6
11 # Short-Description: Prepare firewall tables for autopkgtest Xen guests
12 ### END INIT INFO
13
14 lsbif=/lib/lsb/init-functions
15 if test -e $lsbif; then
16   . $lsbif
17 else
18   log_daemon_msg () { printf "%s: " "$1"; }
19   log_progress_msg () { printf "%s " "$1"; }
20   log_end_msg () { echo "done."; }
21 fi
22 if test -f /etc/default/rcS; then . /etc/default/rcS; fi
23
24 chains='AdtXenIn AdtXenFwd AdtXenIcmp'
25
26 if ! type iptables >/dev/null 2>&1 || ! type xm >/dev/null 2>&1; then
27   exit 0
28 fi
29
30 safety () {
31   log_progress_msg block
32   iptables -I INPUT -j DROP
33   iptables -I FORWARD -j DROP
34   trap '
35     for chain in $chains; do iptables -I $chain -j DROP; done
36     unsafety
37     exit 127
38   ' 0
39 }
40
41 unsafety () {
42   log_progress_msg unblock
43   iptables -D INPUT -j DROP
44   iptables -D FORWARD -j DROP
45   trap '' 0
46 }
47
48 case "$1" in
49 stop)
50   log_daemon_msg "adtxenlvm: removing firewall rules"
51   safety
52   log_progress_msg clear
53   for chain in $chains; do
54     if iptables -L -n $chain >/dev/null 2>&1; then
55       log_progress_msg $chain
56       iptables -F $chain
57       iptables -X $chain
58     fi
59   done
60   unsafety
61   log_end_msg 0
62   exit 0
63   ;;
64 start|restart|force-reload)
65   ;;
66 '')
67   echo >&2 "usage: /etc/init.d/adt-xen stop|start|restart|force-reload"
68   exit 1
69   ;;
70 *)
71   echo >&2 "init.d/adt-xen unsupported action $1"
72   exit 1
73   ;;
74 esac
75
76 set --
77
78 exec 8>&1
79 case "$VERBOSE" in
80 no)     exec >/dev/null ;;
81 esac
82
83 adt_readconfig_initscript=y
84 printf "adtxenlvm: reading configuration for firewall setup:\n"
85 . ${ADT_XENLVM_SHARE:=/usr/share/autopkgtest/xenlvm}/readconfig
86
87 exec >&8 8>&-
88
89 log_daemon_msg "adtxenlvm: installing firewall rules"
90
91 safety
92
93 log_progress_msg create
94 for chain in $chains; do
95   log_progress_msg $chain
96   iptables -N $chain >/dev/null 2>&1 || iptables -F $chain
97   iptables -I $chain -j DROP
98 done
99 unsafety
100
101 log_progress_msg rules
102
103 iptables -A AdtXenIcmp -j ACCEPT -p icmp --icmp-type echo-request
104 # per RFC1122, allow ICMP echo exchanges with anyone we can talk to at all
105
106 for oktype in                                   \
107         echo-reply                              \
108         destination-unreachable source-quench   \
109         time-exceeded parameter-problem         \
110 ;do
111   iptables -A AdtXenIcmp -j ACCEPT -m conntrack --ctstate ESTABLISHED \
112                 -p icmp --icmp-type  $oktype
113 done
114
115 main=AdtXenFwd
116
117 for i in $adt_fw_localmirrors; do
118   iptables -A $main -d $i -j ACCEPT -p tcp --dport 80
119   iptables -A $main -d $i -j AdtXenIcmp -p icmp
120 done
121
122 exec </etc/resolv.conf
123 while read command rest; do
124   if [ "x$command" = "xnameserver" ]; then
125     iptables -A $main -d $rest -j ACCEPT -p tcp --dport 53
126     iptables -A $main -d $rest -j ACCEPT -p udp --dport 53
127     iptables -A $main -d $rest -j AdtXenIcmp -p icmp
128   fi
129 done
130
131 for i in $adt_fw_testbedclients; do
132   iptables -A $main -d $i -j ACCEPT -p tcp ! --syn
133   iptables -A $main -d $i -j AdtXenIcmp -p icmp
134 done
135
136 for i in $adt_fw_prohibnets; do
137   iptables -A $main -d $i -j REJECT --reject-with icmp-net-prohibited
138 done
139
140 if [ x"$adt_fw_allowglobalports" != x ]; then
141   iptables -A $main -p icmp -j AdtXenIcmp
142 fi
143 for port in $adt_fw_allowglobalports; do
144   iptables -A $main -p tcp --dport $port -j ACCEPT
145 done
146
147 if [ "x$adt_fw_hook" != x ]; then
148   log_progress_msg hook
149   . $adt_fw_hook
150 fi
151
152 log_progress_msg confirm
153
154 iptables -A $main -j REJECT --reject-with icmp-admin-prohibited
155 iptables -D $main -j DROP
156
157 log_progress_msg engage
158
159 iptables -A AdtXenIn -j ACCEPT -p icmp --icmp-type echo-request
160 iptables -A AdtXenIn -j ACCEPT -m conntrack --ctstate ESTABLISHED
161 iptables -A AdtXenIn -j AdtXenFwd
162 iptables -D AdtXenIn -j DROP
163
164 iptables -D AdtXenIcmp -j DROP
165
166 log_progress_msg proxyarp
167
168 echo 1 >/proc/sys/net/ipv4/conf/eth0/proxy_arp 
169
170 log_end_msg 0