Rebuild library.lo after changing ./configure options
[strongswan.git] / src / _updown / _updown.in
1 #! /bin/sh
2 # iproute2 version, default updown script
3 #
4 # Copyright (C) 2003-2004 Nigel Meteringham
5 # Copyright (C) 2003-2004 Tuomo Soini
6 # Copyright (C) 2002-2004 Michael Richardson
7 # Copyright (C) 2005-2007 Andreas Steffen <andreas.steffen@strongswan.org>
8 #
9 # This program is free software; you can redistribute it and/or modify it
10 # under the terms of the GNU General Public License as published by the
11 # Free Software Foundation; either version 2 of the License, or (at your
12 # option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
13 #
14 # This program is distributed in the hope that it will be useful, but
15 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17 # for more details.
18
19 # CAUTION:  Installing a new version of strongSwan will install a new
20 # copy of this script, wiping out any custom changes you make.  If
21 # you need changes, make a copy of this under another name, and customize
22 # that, and use the (left/right)updown parameters in ipsec.conf to make
23 # strongSwan use yours instead of this default one.
24
25 # things that this script gets (from ipsec_pluto(8) man page)
26 #
27 #      PLUTO_VERSION
28 #              indicates  what  version of this interface is being
29 #              used.  This document describes version  1.1.   This
30 #              is upwardly compatible with version 1.0.
31 #
32 #       PLUTO_VERB
33 #              specifies the name of the operation to be performed
34 #              (prepare-host, prepare-client, up-host, up-client,
35 #              down-host, or down-client).  If the address family
36 #              for security gateway to security gateway communica-
37 #              tions is IPv6, then a suffix of -v6 is added to the
38 #              verb.
39 #
40 #       PLUTO_CONNECTION
41 #              is the name of the  connection  for  which  we  are
42 #              routing.
43 #
44 #       PLUTO_NEXT_HOP
45 #              is the next hop to which packets bound for the peer
46 #              must be sent.
47 #
48 #       PLUTO_INTERFACE
49 #              is the name of the ipsec interface to be used.
50 #
51 #       PLUTO_REQID
52 #              is the requid of the ESP policy
53 #
54 #       PLUTO_ME
55 #              is the IP address of our host.
56 #
57 #       PLUTO_MY_ID
58 #              is the ID of our host.
59 #
60 #       PLUTO_MY_CLIENT
61 #              is the IP address / count of our client subnet.  If
62 #              the  client  is  just  the  host,  this will be the
63 #              host's own IP address / max (where max  is  32  for
64 #              IPv4 and 128 for IPv6).
65 #
66 #       PLUTO_MY_CLIENT_NET
67 #              is the IP address of our client net.  If the client
68 #              is just the host, this will be the  host's  own  IP
69 #              address.
70 #
71 #       PLUTO_MY_CLIENT_MASK
72 #              is  the  mask for our client net.  If the client is
73 #              just the host, this will be 255.255.255.255.
74 #
75 #       PLUTO_MY_SOURCEIP
76 #              if non-empty, then the source address for the route will be
77 #              set to this IP address.
78 #
79 #       PLUTO_MY_PROTOCOL
80 #              is the IP protocol that will be transported.
81 #
82 #       PLUTO_MY_PORT
83 #              is  the  UDP/TCP  port  to  which  the IPsec SA  is
84 #              restricted on our side.
85 #
86 #       PLUTO_PEER
87 #              is the IP address of our peer.
88 #
89 #       PLUTO_PEER_ID
90 #              is the ID of our peer.
91 #
92 #       PLUTO_PEER_CA
93 #              is the CA which issued the cert of our peer.
94 #
95 #       PLUTO_PEER_CLIENT
96 #              is the IP address / count of the peer's client sub-
97 #              net.   If the client is just the peer, this will be
98 #              the peer's own IP address / max (where  max  is  32
99 #              for IPv4 and 128 for IPv6).
100 #
101 #       PLUTO_PEER_CLIENT_NET
102 #              is the IP address of the peer's client net.  If the
103 #              client is just the peer, this will  be  the  peer's
104 #              own IP address.
105 #
106 #       PLUTO_PEER_CLIENT_MASK
107 #              is  the  mask  for  the  peer's client net.  If the
108 #              client   is   just   the   peer,   this   will   be
109 #              255.255.255.255.
110 #
111 #       PLUTO_PEER_PROTOCOL
112 #              is the IP protocol that will be transported.
113 #
114 #       PLUTO_PEER_PORT
115 #              is  the  UDP/TCP  port  to  which  the IPsec SA  is
116 #              restricted on the peer side.
117 #
118 #       PLUTO_XAUTH_ID
119 #              is an optional user ID employed by the XAUTH protocol
120 #
121 #       PLUTO_MARK_IN
122 #              is an optional XFRM mark set on the inbound IPsec SA
123 #
124 #       PLUTO_MARK_OUT
125 #              is an optional XFRM mark set on the outbound IPsec SA
126 #
127 #       PLUTO_ESP_ENC
128 #              contains the remote UDP port in the case of ESP_IN_UDP
129 #              encapsulation
130 #
131
132 # define a minimum PATH environment in case it is not set
133 PATH="/sbin:/bin:/usr/sbin:/usr/bin:@sbindir@"
134 export PATH
135
136 # uncomment to log VPN connections
137 VPN_LOGGING=1
138 #
139 # tag put in front of each log entry:
140 TAG=vpn
141 #
142 # syslog facility and priority used:
143 FAC_PRIO=local0.notice
144 #
145 # to create a special vpn logging file, put the following line into
146 # the syslog configuration file /etc/syslog.conf:
147 #
148 # local0.notice                   -/var/log/vpn
149
150 # in order to use source IP routing the Linux kernel options
151 # CONFIG_IP_ADVANCED_ROUTER and CONFIG_IP_MULTIPLE_TABLES
152 # must be enabled
153 #
154 # special routing table for sourceip routes
155 SOURCEIP_ROUTING_TABLE=@routing_table@
156 #
157 # priority of the sourceip routing table
158 SOURCEIP_ROUTING_TABLE_PRIO=@routing_table_prio@
159
160 # check interface version
161 case "$PLUTO_VERSION" in
162 1.[0|1])        # Older Pluto?!?  Play it safe, script may be using new features.
163         echo "$0: obsolete interface version \`$PLUTO_VERSION'," >&2
164         echo "$0:       called by obsolete Pluto?" >&2
165         exit 2
166         ;;
167 1.*)    ;;
168 *)      echo "$0: unknown interface version \`$PLUTO_VERSION'" >&2
169         exit 2
170         ;;
171 esac
172
173 # check parameter(s)
174 case "$1:$*" in
175 ':')                    # no parameters
176         ;;
177 iptables:iptables)      # due to (left/right)firewall; for default script only
178         ;;
179 custom:*)               # custom parameters (see above CAUTION comment)
180         ;;
181 *)      echo "$0: unknown parameters \`$*'" >&2
182         exit 2
183         ;;
184 esac
185
186 # utility functions for route manipulation
187 # Meddling with this stuff should not be necessary and requires great care.
188 uproute() {
189         doroute add
190         ip route flush cache
191 }
192 downroute() {
193         doroute delete
194         ip route flush cache
195 }
196
197 addsource() {
198         st=0
199         if ! ip -o route get ${PLUTO_MY_SOURCEIP%/*} | grep -q ^local
200         then
201             it="ip addr add ${PLUTO_MY_SOURCEIP%/*}/32 dev $PLUTO_INTERFACE"
202             oops="`eval $it 2>&1`"
203             st=$?
204             if test " $oops" = " " -a " $st" != " 0"
205             then
206                 oops="silent error, exit status $st"
207             fi
208             if test " $oops" != " " -o " $st" != " 0"
209             then
210                 echo "$0: addsource \`$it' failed ($oops)" >&2
211             fi
212         fi
213         return $st
214 }
215
216 doroute() {
217         st=0
218
219         if [ -z "$PLUTO_MY_SOURCEIP" ]
220         then
221             for dir in /etc/sysconfig /etc/conf.d; do
222                 if [ -f "$dir/defaultsource" ]
223                 then
224                     . "$dir/defaultsource"
225                 fi
226             done
227
228             if [ -n "$DEFAULTSOURCE" ]
229             then
230                 PLUTO_MY_SOURCEIP=$DEFAULTSOURCE
231             fi
232         fi
233
234         if [ -z "$KLIPS" -a -z "$PLUTO_MY_SOURCEIP" ]
235         then
236             # leave because no route entry is required
237             return $st
238         fi
239
240         parms1="$PLUTO_PEER_CLIENT"
241
242         if [ -n "$PLUTO_NEXT_HOP" ]
243         then
244             parms2="via $PLUTO_NEXT_HOP"
245         else
246             parms2="via $PLUTO_PEER"
247         fi
248         parms2="$parms2 dev $PLUTO_INTERFACE"
249
250         parms3=
251         if [ -n "$PLUTO_MY_SOURCEIP" ]
252         then
253             if test "$1" = "add"
254             then
255                 addsource
256                 if ! ip rule list | grep -q "lookup $SOURCEIP_ROUTING_TABLE"
257                 then
258                     ip rule add pref $SOURCEIP_ROUTING_TABLE_PRIO table $SOURCEIP_ROUTING_TABLE
259                 fi
260             fi
261             parms3="$parms3 src ${PLUTO_MY_SOURCEIP%/*} table $SOURCEIP_ROUTING_TABLE"
262         fi
263
264         case "$PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK" in
265         "0.0.0.0/0.0.0.0")
266                 # opportunistic encryption work around
267                 # need to provide route that eclipses default, without
268                 # replacing it.
269                 it="ip route $1 0.0.0.0/1 $parms2 $parms3 &&
270                         ip route $1 128.0.0.0/1 $parms2 $parms3"
271                 ;;
272         *)      it="ip route $1 $parms1 $parms2 $parms3"
273                 ;;
274         esac
275         oops="`eval $it 2>&1`"
276         st=$?
277         if test " $oops" = " " -a " $st" != " 0"
278         then
279             oops="silent error, exit status $st"
280         fi
281         if test " $oops" != " " -o " $st" != " 0"
282         then
283             echo "$0: doroute \`$it' failed ($oops)" >&2
284         fi
285         return $st
286 }
287
288 # in the presence of KLIPS and ipsecN interfaces do not use IPSEC_POLICY
289 if [ `echo "$PLUTO_INTERFACE" | grep "ipsec"` ]
290 then
291         KLIPS=1
292         IPSEC_POLICY_IN=""
293         IPSEC_POLICY_OUT=""
294 else
295         KLIPS=
296         IPSEC_POLICY="-m policy --pol ipsec --proto esp --reqid $PLUTO_REQID"
297         IPSEC_POLICY_IN="$IPSEC_POLICY --dir in"
298         IPSEC_POLICY_OUT="$IPSEC_POLICY --dir out"
299 fi
300
301 # are there port numbers?
302 if [ "$PLUTO_MY_PORT" != 0 ]
303 then
304         S_MY_PORT="--sport $PLUTO_MY_PORT"
305         D_MY_PORT="--dport $PLUTO_MY_PORT"
306 fi
307 if [ "$PLUTO_PEER_PORT" != 0 ]
308 then
309         S_PEER_PORT="--sport $PLUTO_PEER_PORT"
310         D_PEER_PORT="--dport $PLUTO_PEER_PORT"
311 fi
312
313 # resolve octal escape sequences
314 PLUTO_MY_ID=`printf "$PLUTO_MY_ID"`
315 PLUTO_PEER_ID=`printf "$PLUTO_PEER_ID"`
316
317 # the big choice
318 case "$PLUTO_VERB:$1" in
319 prepare-host:*|prepare-client:*)
320         if [ -z "$KLIPS" -a -z "$PLUTO_MY_SOURCEIP" ]
321         then
322             # exit because no route will be added,
323             # so that existing routes can stay
324             exit 0
325         fi
326
327         # delete possibly-existing route (preliminary to adding a route)
328         case "$PLUTO_PEER_CLIENT_NET/$PLUTO_PEER_CLIENT_MASK" in
329         "0.0.0.0/0.0.0.0")
330                 # need to provide route that eclipses default, without
331                 # replacing it.
332                 parms1="0.0.0.0/1"
333                 parms2="128.0.0.0/1"
334                 it="ip route delete $parms1 2>&1 ; ip route delete $parms2 2>&1"
335                 oops="`ip route delete $parms1 2>&1 ; ip route delete $parms2 2>&1`"
336                 ;;
337         *)
338                 parms="$PLUTO_PEER_CLIENT"
339                 it="ip route delete $parms 2>&1"
340                 oops="`ip route delete $parms 2>&1`"
341                 ;;
342         esac
343         status="$?"
344         if test " $oops" = " " -a " $status" != " 0"
345         then
346                 oops="silent error, exit status $status"
347         fi
348         case "$oops" in
349         *'RTNETLINK answers: No such process'*)
350                 # This is what route (currently -- not documented!) gives
351                 # for "could not find such a route".
352                 oops=
353                 status=0
354                 ;;
355         esac
356         if test " $oops" != " " -o " $status" != " 0"
357         then
358                 echo "$0: \`$it' failed ($oops)" >&2
359         fi
360         exit $status
361         ;;
362 route-host:*|route-client:*)
363         # connection to me or my client subnet being routed
364         uproute
365         ;;
366 unroute-host:*|unroute-client:*)
367         # connection to me or my client subnet being unrouted
368         downroute
369         ;;
370 up-host:)
371         # connection to me coming up
372         # If you are doing a custom version, firewall commands go here.
373         ;;
374 down-host:)
375         # connection to me going down
376         # If you are doing a custom version, firewall commands go here.
377         ;;
378 up-client:)
379         # connection to my client subnet coming up
380         # If you are doing a custom version, firewall commands go here.
381         ;;
382 down-client:)
383         # connection to my client subnet going down
384         # If you are doing a custom version, firewall commands go here.
385         ;;
386 up-host:iptables)
387         # connection to me, with (left/right)firewall=yes, coming up
388         # This is used only by the default updown script, not by your custom
389         # ones, so do not mess with it; see CAUTION comment up at top.
390         iptables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
391             -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
392             -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
393         iptables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
394             -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
395             -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
396         #
397         # log IPsec host connection setup
398         if [ $VPN_LOGGING ]
399         then
400           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
401           then
402             logger -t $TAG -p $FAC_PRIO \
403               "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
404           else
405             logger -t $TAG -p $FAC_PRIO \
406               "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
407           fi
408         fi
409         ;;
410 down-host:iptables)
411         # connection to me, with (left/right)firewall=yes, going down
412         # This is used only by the default updown script, not by your custom
413         # ones, so do not mess with it; see CAUTION comment up at top.
414         iptables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
415             -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
416             -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
417         iptables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
418             -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
419             -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
420         #
421         # log IPsec host connection teardown
422         if [ $VPN_LOGGING ]
423         then
424           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
425           then
426             logger -t $TAG -p $FAC_PRIO -- \
427               "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
428           else
429             logger -t $TAG -p $FAC_PRIO -- \
430             "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
431           fi
432         fi
433         ;;
434 up-client:iptables)
435         # connection to client subnet, with (left/right)firewall=yes, coming up
436         # This is used only by the default updown script, not by your custom
437         # ones, so do not mess with it; see CAUTION comment up at top.
438         if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/32" ]
439         then
440           iptables -I FORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
441               -s $PLUTO_MY_CLIENT $S_MY_PORT \
442               -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
443           iptables -I FORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
444               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
445               -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
446         fi
447         #
448         # a virtual IP requires an INPUT and OUTPUT rule on the host
449         # or sometimes host access via the internal IP is needed
450         if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
451         then
452           iptables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
453               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
454               -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
455           iptables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
456               -s $PLUTO_MY_CLIENT $S_MY_PORT \
457               -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
458         fi
459         #
460         # log IPsec client connection setup
461         if [ $VPN_LOGGING ]
462         then
463           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
464           then
465             logger -t $TAG -p $FAC_PRIO \
466               "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
467           else
468             logger -t $TAG -p $FAC_PRIO \
469               "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
470           fi
471         fi
472         ;;
473 down-client:iptables)
474         # connection to client subnet, with (left/right)firewall=yes, going down
475         # This is used only by the default updown script, not by your custom
476         # ones, so do not mess with it; see CAUTION comment up at top.
477         if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/32" ]
478         then
479           iptables -D FORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
480               -s $PLUTO_MY_CLIENT $S_MY_PORT \
481               -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
482                  $IPSEC_POLICY_OUT -j ACCEPT
483           iptables -D FORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
484               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
485               -d $PLUTO_MY_CLIENT $D_MY_PORT \
486                  $IPSEC_POLICY_IN -j ACCEPT
487         fi
488         #
489         # a virtual IP requires an INPUT and OUTPUT rule on the host
490         # or sometimes host access via the internal IP is needed
491         if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
492         then
493           iptables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
494               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
495               -d $PLUTO_MY_CLIENT $D_MY_PORT \
496                  $IPSEC_POLICY_IN -j ACCEPT
497           iptables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
498               -s $PLUTO_MY_CLIENT $S_MY_PORT \
499               -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
500                  $IPSEC_POLICY_OUT -j ACCEPT
501         fi
502         #
503         # log IPsec client connection teardown
504         if [ $VPN_LOGGING ]
505         then
506           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
507           then
508             logger -t $TAG -p $FAC_PRIO -- \
509               "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
510           else
511             logger -t $TAG -p $FAC_PRIO -- \
512               "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
513           fi
514         fi
515         ;;
516 #
517 # IPv6
518 #
519 prepare-host-v6:*|prepare-client-v6:*)
520         ;;
521 route-host-v6:*|route-client-v6:*)
522         # connection to me or my client subnet being routed
523         #uproute_v6
524         ;;
525 unroute-host-v6:*|unroute-client-v6:*)
526         # connection to me or my client subnet being unrouted
527         #downroute_v6
528         ;;
529 up-host-v6:)
530         # connection to me coming up
531         # If you are doing a custom version, firewall commands go here.
532         ;;
533 down-host-v6:)
534         # connection to me going down
535         # If you are doing a custom version, firewall commands go here.
536         ;;
537 up-client-v6:)
538         # connection to my client subnet coming up
539         # If you are doing a custom version, firewall commands go here.
540         ;;
541 down-client-v6:)
542         # connection to my client subnet going down
543         # If you are doing a custom version, firewall commands go here.
544         ;;
545 up-host-v6:iptables)
546         # connection to me, with (left/right)firewall=yes, coming up
547         # This is used only by the default updown script, not by your custom
548         # ones, so do not mess with it; see CAUTION comment up at top.
549         ip6tables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
550             -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
551             -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
552         ip6tables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
553             -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
554             -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
555         #
556         # log IPsec host connection setup
557         if [ $VPN_LOGGING ]
558         then
559           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
560           then
561             logger -t $TAG -p $FAC_PRIO \
562               "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
563           else
564             logger -t $TAG -p $FAC_PRIO \
565               "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
566           fi
567         fi
568         ;;
569 down-host-v6:iptables)
570         # connection to me, with (left/right)firewall=yes, going down
571         # This is used only by the default updown script, not by your custom
572         # ones, so do not mess with it; see CAUTION comment up at top.
573         ip6tables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
574             -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
575             -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
576         ip6tables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
577             -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
578             -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
579         #
580         # log IPsec host connection teardown
581         if [ $VPN_LOGGING ]
582         then
583           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
584           then
585             logger -t $TAG -p $FAC_PRIO -- \
586               "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
587           else
588             logger -t $TAG -p $FAC_PRIO -- \
589             "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
590           fi
591         fi
592         ;;
593 up-client-v6:iptables)
594         # connection to client subnet, with (left/right)firewall=yes, coming up
595         # This is used only by the default updown script, not by your custom
596         # ones, so do not mess with it; see CAUTION comment up at top.
597         if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/128" ]
598         then
599           ip6tables -I FORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
600               -s $PLUTO_MY_CLIENT $S_MY_PORT \
601               -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
602           ip6tables -I FORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
603               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
604               -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
605         fi
606         #
607         # a virtual IP requires an INPUT and OUTPUT rule on the host
608         # or sometimes host access via the internal IP is needed
609         if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
610         then
611           ip6tables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
612               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
613               -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
614           ip6tables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
615               -s $PLUTO_MY_CLIENT $S_MY_PORT \
616               -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
617         fi
618         #
619         # log IPsec client connection setup
620         if [ $VPN_LOGGING ]
621         then
622           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
623           then
624             logger -t $TAG -p $FAC_PRIO \
625               "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
626           else
627             logger -t $TAG -p $FAC_PRIO \
628               "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
629           fi
630         fi
631         ;;
632 down-client-v6:iptables)
633         # connection to client subnet, with (left/right)firewall=yes, going down
634         # This is used only by the default updown script, not by your custom
635         # ones, so do not mess with it; see CAUTION comment up at top.
636         if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/128" ]
637         then
638           ip6tables -D FORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
639               -s $PLUTO_MY_CLIENT $S_MY_PORT \
640               -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
641                  $IPSEC_POLICY_OUT -j ACCEPT
642           ip6tables -D FORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
643               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
644               -d $PLUTO_MY_CLIENT $D_MY_PORT \
645                  $IPSEC_POLICY_IN -j ACCEPT
646         fi
647         #
648         # a virtual IP requires an INPUT and OUTPUT rule on the host
649         # or sometimes host access via the internal IP is needed
650         if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
651         then
652           ip6tables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
653               -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
654               -d $PLUTO_MY_CLIENT $D_MY_PORT \
655                  $IPSEC_POLICY_IN -j ACCEPT
656           ip6tables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
657               -s $PLUTO_MY_CLIENT $S_MY_PORT \
658               -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
659                  $IPSEC_POLICY_OUT -j ACCEPT
660         fi
661         #
662         # log IPsec client connection teardown
663         if [ $VPN_LOGGING ]
664         then
665           if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
666           then
667             logger -t $TAG -p $FAC_PRIO -- \
668               "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
669           else
670             logger -t $TAG -p $FAC_PRIO -- \
671               "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
672           fi
673         fi
674         ;;
675 *)      echo "$0: unknown verb \`$PLUTO_VERB' or parameter \`$1'" >&2
676         exit 1
677         ;;
678 esac