[strongSwan] local_ts based on user/group
Christian Salway
christian.salway at naimuri.com
Thu Oct 31 23:56:45 CET 2019
Thanks, Tobias,
I went down the route of writing a custom updown script as I didn’t know how to write hooks so this seemed easiest.
cat <<EOF > /opt/strongswan/_updown
#!/bin/bash
LDAPURL='${LDAPURL}'
BASEOU='${BASEOU}'
BINDUN='${BINDUN}'
BINDPW='${BINDPW}'
TAG=charon-route
FAC_PRIO=local0.notice
IPSEC_POLICY="-m policy --pol ipsec --proto \$PLUTO_PROTO --reqid \$PLUTO_REQID"
IPSEC_POLICY_IN="\$IPSEC_POLICY --dir in"
IPSEC_POLICY_OUT="\$IPSEC_POLICY --dir out"
case "\$PLUTO_VERB" in
up-client)
# expects a group name in the format cidr-xx.xx.xx.xx-nn, eg: cidr-172.31.0.0-16
ldapsearch -H "\${LDAPURL}" -x -D "\${BINDUN}" -w "\${BINDPW}" -b "\${BASEOU}" -LLL "(sAMAccountName=\${PLUTO_XAUTH_ID})" memberOf | \\
grep -oP '(?<=memberOf: CN=cidr-).+?(?=,OU.+)' | \\
sed 's|-|/|' | while read CIDR
do
iptables -I FORWARD 1 -o \$PLUTO_INTERFACE -p \$PLUTO_PEER_PROTOCOL \\
-s \$CIDR -d \$PLUTO_PEER_CLIENT \$IPSEC_POLICY_OUT -j ACCEPT
iptables -I FORWARD 1 -i \$PLUTO_INTERFACE -p \$PLUTO_MY_PROTOCOL \\
-s \$PLUTO_PEER_CLIENT -d \$CIDR \$IPSEC_POLICY_IN -j ACCEPT
logger -t \$TAG -p \$FAC_PRIO \\
"+ \$PLUTO_XAUTH_ID (\$PLUTO_REQID) \$PLUTO_PEER_CLIENT == \$PLUTO_PEER -- \$PLUTO_ME == \$CIDR"
done
;;
down-client)
# remove rules - yet to be written. Needs to assume the user might have been removed from the Group before disconnection
iptables -F FORWARD # TESTING ONLY
;;
*) echo "\$0: unknown verb '\$PLUTO_VERB'" >&2
;;
esac
EOF
chmod +x /opt/strongswan/_updown
children {
child {
local_ts = ${CLIENT_ROUTES}
updown = /opt/strongswan/_updown
}
}
> On 31 Oct 2019, at 09:22, Tobias Brunner <tobias at strongswan.org> wrote:
>
> Hi Christian,
>
>> How would that work? Because a user can be a member of one or more groups and thus how does strongswan select the connection with all the groups.
>
> Since a single group match is currently enough to satisfy the group
> constraint (there is also no "best"-match based on groups), you'll have
> to assign unique groups to the users that have access to specific
> networks. That is, groups for individual networks won't work (unless
> members of such groups only have access to one network), you need groups
> that allow access to combinations of networks. If you can't change the
> original group assignment, you'll need to map them somehow, for
> instance, write a plugin that implements the authorize hook and assign a
> new group based on the ones already assigned. Alternatively, write a
> plugin that implements the narrow hook and assigns traffic selectors
> based on whatever strategy you like.
>
> Regards,
> Tobias
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.strongswan.org/pipermail/users/attachments/20191031/8a85a28c/attachment-0001.html>
More information about the Users
mailing list