Merge pull request #5054 from lucize/libreswan
libreswan: add libreswan 3.27
This commit is contained in:
commit
d1a7d35ebe
4 changed files with 395 additions and 0 deletions
125
net/libreswan/Makefile
Normal file
125
net/libreswan/Makefile
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2019 Lucian Cristian <lucian.cristian@gmail.com>
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=libreswan
|
||||||
|
PKG_VERSION:=3.27
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
|
PKG_SOURCE_URL:=https://download.libreswan.org/
|
||||||
|
PKG_HASH:=ead07dd701116094b483dc57e54e2a5ee9a06d3982bb142260bcbf3d1faf7b82
|
||||||
|
|
||||||
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
PKG_MAINTAINER:=Lucian Cristian <lucian.cristian@gmail.com>
|
||||||
|
|
||||||
|
PKG_BUILD_PARALLEL:=1
|
||||||
|
PKG_INSTALL:=1
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
|
define Package/libreswan/Default
|
||||||
|
TITLE:=Libreswan
|
||||||
|
URL:=https://libreswan.org/
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/libreswan/Default/description
|
||||||
|
Libreswan is a free software implementation of the most widely supported and
|
||||||
|
standardized VPN protocol based on ("IPsec") and the Internet Key Exchange
|
||||||
|
("IKE"). These standards are produced and maintained by the Internet
|
||||||
|
Engineering Task Force ("IETF").
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/libreswan
|
||||||
|
$(call Package/libreswan/Default)
|
||||||
|
SUBMENU:=VPN
|
||||||
|
SECTION:=net
|
||||||
|
CATEGORY:=Network
|
||||||
|
DEPENDS:= +kmod-libreswan +libnss +librt +libevent2 +libevent2-pthreads \
|
||||||
|
+ip-full
|
||||||
|
PROVIDES:=openswan
|
||||||
|
CONFLICTS:=strongswan
|
||||||
|
TITLE+= IPsec Server
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/libreswan/description
|
||||||
|
$(call Package/libreswan/Default/description)
|
||||||
|
Libreswan is a free software implementation of the most widely supported and
|
||||||
|
standardized VPN protocol based on ("IPsec") and the Internet Key Exchange
|
||||||
|
("IKE"). These standards are produced and maintained by the Internet
|
||||||
|
Engineering Task Force ("IETF").
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/libreswan
|
||||||
|
$(call Package/libreswan/Default)
|
||||||
|
SUBMENU:=Network Support
|
||||||
|
TITLE+= (kernel module)
|
||||||
|
FILES:=$(PKG_BUILD_DIR)/modobj*/ipsec.$(LINUX_KMOD_SUFFIX)
|
||||||
|
DEPENDS:= +kmod-crypto-authenc +kmod-crypto-hash +kmod-ipt-ipsec +iptables-mod-ipsec \
|
||||||
|
+kmod-ipsec +kmod-ipsec4 +kmod-crypto-rng +IPV6:kmod-ipsec6
|
||||||
|
endef
|
||||||
|
|
||||||
|
define KernelPackage/libreswan/description
|
||||||
|
$(call Package/libreswan/Default/description)
|
||||||
|
This package contains the Libreswan kernel module.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/libreswan/conffiles
|
||||||
|
/etc/ipsec.d
|
||||||
|
/etc/ipsec.conf
|
||||||
|
/etc/ipsec.secrets
|
||||||
|
endef
|
||||||
|
|
||||||
|
TARGET_CFLAGS+= -Wno-error=format-nonliteral
|
||||||
|
MAKE_FLAGS+= \
|
||||||
|
WERROR_CFLAGS=" " \
|
||||||
|
USE_DNSSEC=false \
|
||||||
|
USE_LINUX_AUDIT=false \
|
||||||
|
USE_LABELED_IPSEC=false \
|
||||||
|
USE_NM=false \
|
||||||
|
USE_LIBCURL=false \
|
||||||
|
USE_GLIBC_KERN_FLIP_HEADERS=true \
|
||||||
|
USE_XAUTHPAM=false \
|
||||||
|
USE_FIPSCHECK=false \
|
||||||
|
USE_LIBCAP_NG=false \
|
||||||
|
USE_SYSTEMD_WATCHDOG=false \
|
||||||
|
INC_USRLOCAL="/usr" \
|
||||||
|
FINALRUNDIR="/var/run/pluto" \
|
||||||
|
KERNELSRC="$(LINUX_DIR)"
|
||||||
|
|
||||||
|
define Build/Prepare
|
||||||
|
$(call Build/Prepare/Default)
|
||||||
|
$(SED) 's,include $$$$(top_srcdir)/mk/manpages.mk,,g' \
|
||||||
|
$(PKG_BUILD_DIR)/mk/program.mk
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
$(call Build/Compile/Default,base)
|
||||||
|
$(call Build/Compile/Default,module)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/libreswan/install
|
||||||
|
$(INSTALL_DIR) \
|
||||||
|
$(1)/etc/init.d \
|
||||||
|
$(1)/etc/ipsec.d/policies \
|
||||||
|
$(1)/usr/libexec/ipsec \
|
||||||
|
$(1)/usr/sbin
|
||||||
|
|
||||||
|
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ipsec \
|
||||||
|
$(1)/usr/sbin/ipsec
|
||||||
|
$(INSTALL_BIN) ./files/ipsec.init $(1)/etc/init.d/ipsec
|
||||||
|
$(INSTALL_DATA) ./files/ipsec.conf $(1)/etc/ipsec.conf
|
||||||
|
$(INSTALL_DATA) ./files/ipsec.secrets $(1)/etc/ipsec.secrets
|
||||||
|
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/etc/ipsec.d/policies/* \
|
||||||
|
$(1)/etc/ipsec.d/policies/
|
||||||
|
$(CP) $(PKG_INSTALL_DIR)/usr/libexec/ipsec/* \
|
||||||
|
$(1)/usr/libexec/ipsec/
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,libreswan))
|
||||||
|
$(eval $(call KernelPackage,libreswan))
|
46
net/libreswan/files/ipsec.conf
Normal file
46
net/libreswan/files/ipsec.conf
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
# /etc/ipsec.conf - Libreswan IPsec configuration file
|
||||||
|
#
|
||||||
|
# see 'man ipsec.conf' and 'man pluto' for more information
|
||||||
|
#
|
||||||
|
# For example configurations and documentation, see https://libreswan.org/wiki/
|
||||||
|
|
||||||
|
config setup
|
||||||
|
# Normally, pluto logs via syslog.
|
||||||
|
#logfile=/var/log/pluto.log
|
||||||
|
#
|
||||||
|
# Do not enable debug options to debug configuration issues!
|
||||||
|
#
|
||||||
|
# plutodebug="control parsing"
|
||||||
|
# plutodebug="all crypt"
|
||||||
|
plutodebug=none
|
||||||
|
#
|
||||||
|
# NAT-TRAVERSAL support
|
||||||
|
# exclude networks used on server side by adding %v4:!a.b.c.0/24
|
||||||
|
# It seems that T-Mobile in the US and Rogers/Fido in Canada are
|
||||||
|
# using 25/8 as "private" address space on their wireless networks.
|
||||||
|
# This range has never been announced via BGP (at least up to 2015)
|
||||||
|
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:100.64.0.0/10,%v6:fd00::/8,%v6:fe80::/10
|
||||||
|
|
||||||
|
# if it exists, include system wide crypto-policy defaults
|
||||||
|
# include /etc/crypto-policies/back-ends/libreswan.config
|
||||||
|
|
||||||
|
# It is best to add your IPsec connections as separate files in /etc/ipsec.d/
|
||||||
|
|
||||||
|
conn L2TP-PSK-NAT
|
||||||
|
rightsubnet=vhost:%priv
|
||||||
|
also=L2TP-PSK-noNAT
|
||||||
|
|
||||||
|
conn L2TP-PSK-noNAT
|
||||||
|
authby=secret
|
||||||
|
pfs=no
|
||||||
|
auto=add
|
||||||
|
keyingtries=8
|
||||||
|
ikelifetime=8h
|
||||||
|
keylife=1h
|
||||||
|
type=transport
|
||||||
|
left=A.B.C.D
|
||||||
|
leftprotoport=17/1701
|
||||||
|
right=%any
|
||||||
|
rightprotoport=17/%any
|
||||||
|
|
||||||
|
include /etc/ipsec.d/*.conf
|
207
net/libreswan/files/ipsec.init
Executable file
207
net/libreswan/files/ipsec.init
Executable file
|
@ -0,0 +1,207 @@
|
||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
|
||||||
|
START=90
|
||||||
|
STOP=10
|
||||||
|
|
||||||
|
#USE_PROCD=1
|
||||||
|
|
||||||
|
. $IPKG_INSTROOT/lib/functions.sh
|
||||||
|
|
||||||
|
EXTRA_COMMANDS=status
|
||||||
|
EXTRA_HELP=" status Show the status of the service"
|
||||||
|
|
||||||
|
# Check that networking is up.
|
||||||
|
[ "${NETWORKING}" = "no" ] && exit 6
|
||||||
|
|
||||||
|
if [ $(id -u) -ne 0 ]; then
|
||||||
|
echo "permission denied (must be superuser)" | \
|
||||||
|
logger -s -p daemon.error -t ipsec_setup 2>&1
|
||||||
|
exit 4
|
||||||
|
fi
|
||||||
|
|
||||||
|
# where the private directory and the config files are
|
||||||
|
IPSEC_EXECDIR="${IPSEC_EXECDIR-/usr/libexec/ipsec}"
|
||||||
|
IPSEC_SBINDIR="${IPSEC_SBINDIR-/usr/sbin}"
|
||||||
|
IPSEC_CONF="${IPSEC_CONF-/etc/ipsec.conf}"
|
||||||
|
unset PLUTO_OPTIONS
|
||||||
|
|
||||||
|
rundir=/var/run/pluto
|
||||||
|
plutopid=${rundir}/pluto.pid
|
||||||
|
plutoctl=${rundir}/pluto.ctl
|
||||||
|
lockdir=/var/lock
|
||||||
|
lockfile=${lockdir}/ipsec
|
||||||
|
ipsecversion=/proc/net/ipsec_version
|
||||||
|
kamepfkey=/proc/net/pfkey
|
||||||
|
|
||||||
|
# /etc/resolv.conf related paths
|
||||||
|
LIBRESWAN_RESOLV_CONF=${rundir}/libreswan-resolv-conf-backup
|
||||||
|
ORIG_RESOLV_CONF=/etc/resolv.conf
|
||||||
|
|
||||||
|
# misc setup
|
||||||
|
umask 022
|
||||||
|
|
||||||
|
# standardize PATH, and export it for everything else's benefit
|
||||||
|
PATH="${IPSEC_SBINDIR}":/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin
|
||||||
|
export PATH
|
||||||
|
|
||||||
|
mkdir -p ${rundir}
|
||||||
|
chmod 700 ${rundir}
|
||||||
|
|
||||||
|
verify_config() {
|
||||||
|
[ -f ${IPSEC_CONF} ] || exit 6
|
||||||
|
config_error=$(ipsec addconn --config ${IPSEC_CONF} --checkconfig 2>&1)
|
||||||
|
RETVAL=$?
|
||||||
|
if [ ${RETVAL} -gt 0 ]; then
|
||||||
|
echo "Configuration error - the following error occurred:"
|
||||||
|
echo ${config_error}
|
||||||
|
echo "IKE daemon status was not modified"
|
||||||
|
exit ${RETVAL}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
echo -n "Starting pluto IKE daemon for IPsec: "
|
||||||
|
ipsec _stackmanager start
|
||||||
|
# pluto searches the current directory, so this is required for making it selinux compliant
|
||||||
|
cd /
|
||||||
|
# Create nss db or convert from old format to new sql format
|
||||||
|
ipsec --checknss
|
||||||
|
# Enable nflog if configured
|
||||||
|
ipsec --checknflog > /dev/null
|
||||||
|
# This script will enter an endless loop to ensure pluto restarts on crash
|
||||||
|
ipsec _plutorun --config ${IPSEC_CONF} --nofork ${PLUTO_OPTIONS} & [ -d ${lockdir} ] || mkdir -p ${lockdir}
|
||||||
|
touch ${lockfile}
|
||||||
|
# Because _plutorun starts pluto at background we need to make sure pluto is started
|
||||||
|
# before we know if start was successful or not
|
||||||
|
for waitsec in 1 2 3 4 5; do
|
||||||
|
if status >/dev/null; then
|
||||||
|
RETVAL=0
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo -n "."
|
||||||
|
sleep 1
|
||||||
|
RETVAL=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ ${RETVAL} -ge 1 ]; then
|
||||||
|
rm -f ${lockfile}
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
return ${RETVAL}
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
if [ -e ${plutoctl} ]; then
|
||||||
|
echo "Shutting down pluto IKE daemon"
|
||||||
|
ipsec whack --shutdown 2>/dev/null
|
||||||
|
# don't use seq, might not exist on embedded
|
||||||
|
for waitsec in 1 2 3 4 5 6 7 8 9 10; do
|
||||||
|
if [ -s ${plutopid} ]; then
|
||||||
|
echo -n "."
|
||||||
|
sleep 1
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
rm -f ${plutoctl} # we won't be using this anymore
|
||||||
|
fi
|
||||||
|
if [ -s ${plutopid} ]; then
|
||||||
|
# pluto did not die peacefully
|
||||||
|
pid=$(cat ${plutopid})
|
||||||
|
if [ -d /proc/${pid} ]; then
|
||||||
|
kill -TERM ${pid}
|
||||||
|
RETVAL=$?
|
||||||
|
sleep 5;
|
||||||
|
if [ -d /proc/${pid} ]; then
|
||||||
|
kill -KILL ${pid}
|
||||||
|
RETVAL=$?
|
||||||
|
fi
|
||||||
|
if [ ${RETVAL} -ne 0 ]; then
|
||||||
|
echo "Kill failed - removing orphaned ${plutopid}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Removing orphaned ${plutopid}"
|
||||||
|
fi
|
||||||
|
rm -f ${plutopid}
|
||||||
|
fi
|
||||||
|
|
||||||
|
ipsec _stackmanager stop
|
||||||
|
ipsec --stopnflog > /dev/null
|
||||||
|
|
||||||
|
# cleaning up backup resolv.conf
|
||||||
|
if [ -e ${LIBRESWAN_RESOLV_CONF} ]; then
|
||||||
|
if grep 'Libreswan' ${ORIG_RESOLV_CONF} > /dev/null 2>&1; then
|
||||||
|
cp ${LIBRESWAN_RESOLV_CONF} ${ORIG_RESOLV_CONF}
|
||||||
|
fi
|
||||||
|
rm -f ${LIBRESWAN_RESOLV_CONF}
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f ${lockfile}
|
||||||
|
return ${RETVAL}
|
||||||
|
}
|
||||||
|
|
||||||
|
restart() {
|
||||||
|
verify_config
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
status() {
|
||||||
|
local RC
|
||||||
|
if [ -f ${plutopid} ]; then
|
||||||
|
if [ -r ${plutopid} ]; then
|
||||||
|
pid=$(cat ${plutopid})
|
||||||
|
if [ -n "$pid" -a -d /proc/${pid} ]; then
|
||||||
|
RC=0 # running
|
||||||
|
else
|
||||||
|
RC=1 # not running but pid exists
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
RC=4 # insufficient privileges
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ -z "${RC}" ]; then
|
||||||
|
if [ -f ${lockfile} ]; then
|
||||||
|
RC=2
|
||||||
|
else
|
||||||
|
RC=3
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
case "${RC}" in
|
||||||
|
0)
|
||||||
|
echo "ipsec: pluto (pid ${pid}) is running..."
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
echo "ipsec: pluto dead but pid file exits"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
echo "ipsec: pluto dead but subsys locked"
|
||||||
|
return 2
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
echo "ipsec: pluto status unknown due to insufficient privileges."
|
||||||
|
return 4
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo "ipsec: pluto is stopped"
|
||||||
|
return 3
|
||||||
|
}
|
||||||
|
|
||||||
|
condrestart() {
|
||||||
|
verify_config
|
||||||
|
RETVAL=$?
|
||||||
|
if [ -f ${lockfile} ]; then
|
||||||
|
restart
|
||||||
|
RETVAL=$?
|
||||||
|
fi
|
||||||
|
return ${RETVAL}
|
||||||
|
}
|
||||||
|
|
||||||
|
version() {
|
||||||
|
ipsec version
|
||||||
|
return $?
|
||||||
|
}
|
17
net/libreswan/files/ipsec.secrets
Normal file
17
net/libreswan/files/ipsec.secrets
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# This file holds shared secrets (PSK) and XAUTH user passwords used for
|
||||||
|
# authentication. See pluto(8) manpage or the libreswan website.
|
||||||
|
|
||||||
|
# Unlike older openswan, this file does NOT contain any X.509 related
|
||||||
|
# information such as private key :RSA statements as these now reside
|
||||||
|
# in the NSS database. See:
|
||||||
|
#
|
||||||
|
# https://libreswan.org/wiki/Using_NSS_with_libreswan
|
||||||
|
# https://libreswan.org/wiki/Migrating_from_Openswan
|
||||||
|
#
|
||||||
|
# The preferred method for adding secrets is to create a new file in
|
||||||
|
# the /etc/ipsec.d/ directory, so it will be included via the include
|
||||||
|
# line below
|
||||||
|
|
||||||
|
#A.B.C.D %any : PSK "SsEeCcRrEeTt"
|
||||||
|
|
||||||
|
include /etc/ipsec.d/*.secrets
|
Loading…
Reference in a new issue