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