chiark / gitweb /
Scripts from /etc
[autopkgtest.git] / xen / etc--init.d--adt-xen
1 #!/bin/sh
2
3 set -e
4
5 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
6
7 default=/etc/default/adt-xen
8 if test -f $default; then
9   . $default
10 fi
11
12 chains='AdtXenIn AdtXenFwd AdtXenIcmp'
13
14 if ! type iptables >/dev/null 2>&1 || ! type xm >/dev/null 2>&1; then
15   exit 0
16 fi
17
18 safety () {
19   iptables -I INPUT -j DROP
20   iptables -I FORWARD -j DROP
21   trap '
22     for chain in $chains; do iptables -I $chain -j DROP; done
23     unsafety
24     exit 127
25   ' 0
26 }
27
28 unsafety () {
29   iptables -D INPUT -j DROP
30   iptables -D FORWARD -j DROP
31   trap '' 0
32 }
33
34 case "$1" in
35 stop)
36   safety
37   for chain in $chains; do
38     if iptables -L $chain >/dev/null 2>&1; then
39       iptables -F $chain
40       iptables -X $chain
41     fi
42   done
43   unsafety
44   exit 0
45   ;;
46 start|restart|force-reload)
47   ;;
48 '')
49   echo >&2 "usage: /etc/init.d/adt-xen stop|start|restart|force-reload"
50   exit 1
51   ;;
52 *)
53   echo >&2 "init.d/adt-xen unsupported action $1"
54   exit 1
55   ;;
56 esac
57
58 safety
59 for chain in $chains; do
60   iptables -N $chain >/dev/null 2>&1 || iptables -F $chain
61   iptables -I $chain -j DROP
62 done
63 unsafety
64
65 iptables -A AdtXenIcmp -j ACCEPT -p icmp --icmp-type echo-request
66 # per RFC1122, allow ICMP echo exchanges with anyone we can talk to at all
67
68 for oktype in                                   \
69         echo-reply                              \
70         destination-unreachable source-quench   \
71         time-exceeded parameter-problem         \
72 ;do
73   iptables -A AdtXenIcmp -j ACCEPT -m conntrack --ctstate ESTABLISHED \
74                 -p icmp --icmp-type  $oktype
75 done
76
77 main=AdtXenFwd
78
79 for i in $LOCAL_MIRROR_IPS; do
80   iptables -A $main -d $i -j ACCEPT -p tcp --dport 80
81   iptables -A $main -d $i -j AdtXenIcmp -p icmp
82 done
83
84 exec </etc/resolv.conf
85 while read command rest; do
86   if [ "x$command" = "xnameserver" ]; then
87     iptables -A $main -d $rest -j ACCEPT -p tcp --dport 53
88     iptables -A $main -d $rest -j ACCEPT -p udp --dport 53
89     iptables -A $main -d $rest -j AdtXenIcmp -p icmp
90   fi
91 done
92
93 for i in $LOCAL_CLIENT_IPS; do
94   iptables -A $main -d $i -j ACCEPT -p tcp ! --syn
95   iptables -A $main -d $i -j AdtXenIcmp -p icmp
96 done
97
98 for i in $LOCAL_NETWORKS; do
99   iptables -A $main -d $i -j REJECT --reject-with icmp-net-prohibited
100 done
101
102 case "$ALLOW_GLOBAL_HTTP" in
103 y*|1*|t*) 
104   iptables -A $main -p tcp --dport 80 -j ACCEPT
105   iptables -A $main -p icmp -j AdtXenIcmp
106   ;;
107 esac
108
109 if test -f $default-rules; then
110   . $default-rules
111 fi
112
113 iptables -A $main -j REJECT --reject-with icmp-admin-prohibited
114 iptables -A $main -j ACCEPT
115 iptables -D $main -j DROP
116
117 iptables -A AdtXenIn -j ACCEPT -p icmp --icmp-type echo-request
118 iptables -A AdtXenIn -j ACCEPT -m conntrack --ctstate ESTABLISHED
119 iptables -A AdtXenIn -j AdtXenFwd
120 iptables -D AdtXenIn -j DROP
121
122 echo 1 >/proc/sys/net/ipv4/conf/eth0/proxy_arp