From: Michael Tremer <michael.tremer@ipfire.org>
To: development@lists.ipfire.org
Subject: Re: [PATCH] sslh: Update to version 1.20
Date: Sat, 11 May 2019 11:06:23 +0100 [thread overview]
Message-ID: <D5F0EB83-8383-4320-AA1B-63E670656508@ipfire.org> (raw)
In-Reply-To: <c36c80bf74b50f4129712929a38301403280ea12.camel@ipfire.org>
[-- Attachment #1: Type: text/plain, Size: 16982 bytes --]
Hi,
The parameter is “in-reply-to”. You got an extra “a” there.
-Michael
> On 10 May 2019, at 12:54, ummeegge <ummeegge(a)ipfire.org> wrote:
>
> Hi Michael,
> and thanks for your feedback. Made a V2 patch now but i get an
>
> $ git send-email -v2 -1 --in-replay-to 690B105B-733E-4283-9D05-9967D09BA86F(a)ipfire.org
> fatal: ambiguous argument '690B105B-733E-4283-9D05-9967D09BA86F(a)ipfire.org': unknown revision or path not in the working tree.
> Use '--' to separate paths from revisions, like this:
> 'git <command> [<revision>...] -- [<file>...]'
> format-patch -o /tmp/qnlL0LbJPZ -v2 -1 --in-replay-to 690B105B-733E-4283-9D05-9967D09BA86F(a)ipfire.org: command returned error: 128
>
> am currently not sure how to fix this. Have nevertheless pushed the new version
> (hopefully all wanted is included) to Git -->
> https://git.ipfire.org/?p=people/ummeegge/ipfire-2.x.git;a=commit;h=314975a6703f78d8e4c0cb9071819597ad72d48e
>
> Since my time is currently a little less it might be great if you can
> review it in that way.
>
> Best,
>
> Erik
>
>
> On Mi, 2019-05-01 at 12:13 +0100, Michael Tremer wrote:
>> Hi,
>>
>> Apologies for the late reply again… I am trying to catch up on my
>> rather large inbox.
>>
>>> On 26 Apr 2019, at 05:55, ummeegge <ummeegge(a)ipfire.org> wrote:
>>>
>>> Hi Michael and thanks for looking into this.
>>>
>>> On Mi, 2019-04-24 at 12:04 +0100, Michael Tremer wrote:
>>>> Hi,
>>>>
>>>> Thanks for working on this. I have a couple of questions and
>>>> remarks.
>>>>
>>>>> On 23 Apr 2019, at 08:06, Erik Kapfer <ummeegge(a)ipfire.org>
>>>>> wrote:
>>>>>
>>>>> - Added USELIBCAP=1 to enable the possibility for transparent
>>>>> option.
>>>>> - Wrote configuration directives in initscript into variable
>>>>> for
>>>>> better overview.
>>>>> - Introduce chroot directive in start parameter.
>>>>> - Added new user and group sslh (will be deleted if uninstall).
>>>>> - Changed EXTERNAL_IP_FUNCT to serve data also for
>>>>> configuration
>>>>> block but use it also as check as before.
>>>>> - Added symlinks in sslh paks since the initscripts LFS do not
>>>>> serves it in old installation (a reboot does not started sslh
>>>>> again).
>>>>> - Deleted sslh symlinks in initscripts LFS since they are
>>>>> served
>>>>> via sslh paks and are not needed anymore.
>>>>>
>>>>> Signed-off-by: Erik Kapfer <ummeegge(a)ipfire.org>
>>>>> ---
>>>>> lfs/initscripts | 3 --
>>>>> lfs/sslh | 12 ++++----
>>>>> src/initscripts/packages/sslh | 65
>>>>> +++++++++++++++++++++++++++++++++----------
>>>>> src/paks/sslh/install.sh | 13 +++++++++
>>>>> src/paks/sslh/uninstall.sh | 9 ++++++
>>>>> 5 files changed, 79 insertions(+), 23 deletions(-)
>>>>>
>>>>> diff --git a/lfs/initscripts b/lfs/initscripts
>>>>> index 055e106d0..3173a04e4 100644
>>>>> --- a/lfs/initscripts
>>>>> +++ b/lfs/initscripts
>>>>> @@ -136,9 +136,6 @@ $(TARGET) :
>>>>> ln -sf
>>>>> ../init.d/client175 /etc/rc.d/rc0.d/K34client175
>>>>> ln -sf
>>>>> ../init.d/client175 /etc/rc.d/rc3.d/S66client175
>>>>> ln -sf
>>>>> ../init.d/client175 /etc/rc.d/rc6.d/K34client175
>>>>> - ln -sf ../init.d/sslh /etc/rc.d/rc3.d/S98sslh
>>>>> - ln -sf ../init.d/sslh /etc/rc.d/rc0.d/K02sslh
>>>>> - ln -sf ../init.d/sslh /etc/rc.d/rc6.d/K02sslh
>>>>> ln -sf
>>>>> ../init.d/vdradmin /etc/rc.d/rc3.d/S99vdradmin
>>>>> ln -sf
>>>>> ../init.d/vdradmin /etc/rc.d/rc0.d/K01vdradmin
>>>>> ln -sf
>>>>> ../init.d/vdradmin /etc/rc.d/rc6.d/K01vdradmin
>>>>> diff --git a/lfs/sslh b/lfs/sslh
>>>>> index 100cec065..dedd10272 100644
>>>>> --- a/lfs/sslh
>>>>> +++ b/lfs/sslh
>>>>> @@ -1,7 +1,7 @@
>>>>> ###############################################################
>>>>> ####
>>>>> ############
>>>>> #
>>>>>
>>>>> #
>>>>> # IPFire.org - A linux based
>>>>> firewall #
>>>>> -# Copyright (C) 2007-2018 IPFire Team <info(a)ipfire.org>
>>>>>
>>>>> #
>>>>> +# Copyright (C) 2007-2019 IPFire Team <info(a)ipfire.org>
>>>>>
>>>>> #
>>>>> #
>>>>>
>>>>> #
>>>>> # This program is free software: you can redistribute it and/or
>>>>> modify #
>>>>> # it under the terms of the GNU General Public License as
>>>>> published
>>>>> by #
>>>>> @@ -24,7 +24,7 @@
>>>>>
>>>>> include Config
>>>>>
>>>>> -VER = 1.7a
>>>>> +VER = 1.20
>>>>>
>>>>> THISAPP = sslh-$(VER)
>>>>> DL_FILE = $(THISAPP).tar.gz
>>>>> @@ -32,7 +32,7 @@ DL_FROM = $(URL_IPFIRE)
>>>>> DIR_APP = $(DIR_SRC)/$(THISAPP)
>>>>> TARGET = $(DIR_INFO)/$(THISAPP)
>>>>> PROG = sslh
>>>>> -PAK_VER = 5
>>>>> +PAK_VER = 6
>>>>>
>>>>> DEPS = ""
>>>>>
>>>>> @@ -44,7 +44,7 @@ objects = $(DL_FILE)
>>>>>
>>>>> $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
>>>>>
>>>>> -$(DL_FILE)_MD5 = ee124654412198a5e11fe28acf10634d
>>>>> +$(DL_FILE)_MD5 = 0db26ed2825b1ef6c83959a988279912
>>>>>
>>>>> install : $(TARGET)
>>>>>
>>>>> @@ -77,8 +77,8 @@ $(subst %,%_MD5,$(objects)) :
>>>>> $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
>>>>> @$(PREBUILD)
>>>>> @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf
>>>>> $(DIR_DL)/$(DL_FILE)
>>>>> - cd $(DIR_APP) && make CFLAGS="$(CFLAGS)" $(MAKETUNING)
>>>>> USELIBWRAP=
>>>>> - cd $(DIR_APP) && install -v -m 755 sslh /usr/sbin
>>>>> + cd $(DIR_APP) && make CFLAGS="$(CFLAGS)" $(MAKETUNING)
>>>>> USELIBCAP=1 USELIBWRAP=
>>>>> + cd $(DIR_APP) && install -v -m 755 sslh-fork
>>>>> /usr/sbin/sslh
>>>>>
>>>>> #install initscripts
>>>>> $(call INSTALL_INITSCRIPT,sslh)
>>>>
>>>> It looks all fine up to this point.
>>>>
>>>>> diff --git a/src/initscripts/packages/sslh
>>>>> b/src/initscripts/packages/sslh
>>>>> index 43e58f392..0935b1114 100644
>>>>> --- a/src/initscripts/packages/sslh
>>>>> +++ b/src/initscripts/packages/sslh
>>>>> @@ -3,31 +3,68 @@
>>>>>
>>>>> # Based on sysklogd script from LFS-3.1 and earlier.
>>>>> # Rewritten by Gerard Beekmans - gerard(a)linuxfromscratch.org
>>>>> +#
>>>>> +# $LastChangedBy: ummeegge - ummeegge(a)ipfire.org $
>>>>> +# $Date: 2019-04-04 04:35:09 -0500 (Thu, 04 Apr 2019) $
>>>>> +#
>>>>> +#############################################################
>>>>> +#
>>>>
>>>> You do not need to include authorship headers because Git will
>>>> take
>>>> care of this.
>>>
>>> Done.
>>>
>>>>
>>>>>
>>>>> . /etc/sysconfig/rc
>>>>> . $rc_functions
>>>>>
>>>>> +DAEMON="/usr/sbin/sslh"
>>>>> +
>>>>> +# Check for external IP address and provide it to listening
>>>>> option
>>>>> +EXTERNAL_IP_ADDRESS="$(</var/ipfire/red/local-ipaddress)"
>>>>> +EXTERNAL_IP_FUNCT() {
>>>>> + if [ -z "${EXTERNAL_IP_ADDRESS}" ]; then
>>>>> + echo_failure
>>>>> + boot_mesg -n "FAILURE:\n\nCould not determine"
>>>>> ${FAILURE}
>>>>> + boot_mesg -n " your external IP address."
>>>>> + boot_mesg "" ${NORMAL}
>>>>> + exit 1
>>>>> + fi
>>>>> +}
>>>>
>>>> Although you are starting the service rather late in the boot
>>>> process, it might indeed happen that this goes wrong. How do we
>>>> recover from this? The service should be started eventually when
>>>> RED
>>>> comes up.
>>>
>>> I tried to leave the most options pretty much the same as they
>>> where
>>> before whereby the numbers of the symlinks are a part of this the
>>> testings did not delivered problems with this but better to stay
>>> save
>>> there.
>>> The network initscript starts at 'S20' where i think RED will be
>>> started too what you think is a good starting point for sslh ?
>>
>> If there is a cable plugged into RED and it actually comes up this is
>> a good time to start the service. But what if the DSL modem takes
>> longer to sync or so? It should still be started in red.up then.
>>
>>>
>>>>
>>>> What if the IP address on RED changes? How is sslh notified?
>>>
>>> I think it won´t currently. Have seen some configurations which
>>> uses
>>> 0.0.0.0 for the --listen option but this can cause bigger troubles
>>> if
>>> '443' is the --listen port here i think. As far as i can see only a
>>> restart of sslh would fix this currently.
>>> May you have an idea here ?
>>
>> Have a script in red.up which restarts the whole service - but only
>> if the IP address has actually changed so that standing connections
>> won’t be interrupted. I think that is what we need here, isn’t it?
>>
>>>
>>>
>>>>
>>>>> +
>>>>> +# Loopback interface
>>>>> +LO="127.0.0.1"
>>>>> +# Used TCP ports
>>>>> +LISTENPORT="443"
>>>>> +SSHPORT="222"
>>>>> +TLSPORT="444"
>>>>> +OPENVPNPORT=“1194"
>>>>
>>>> Can we use hard-coded port numbers here?
>>>
>>> Here arises also some more questions for me.
>>> We can grep for them in the configuration files but also may a
>>> check
>>> for the correct usage can be made since e.g. OpenVPN needs to run
>>> with
>>> TCP for example.
>>
>> I would say that 443 probably masks traffic best and is most likely
>> to be open even in more restricted environments.
>>
>> OpenVPN has to be running in TCP mode, but that is something the user
>> has to configure. It isn’t even certain if they are using OpenVPN
>> here. So that should be optional.
>>
>>> Should we really provide TCP 444 in here for external access ? I
>>> think
>>> also SSH might be more secure via VPN but may a little more
>>> acceptable
>>> if no VPN is in usage?!
>>
>> The Web UI? No, that should not be open by default. People should use
>> OpenVPN to access the firewall.
>>
>>> The main topic in the tests we made in the forum where mainly for
>>> LAN
>>> instances on seperated machines (mostly webservers) where those
>>> questions may be not that critical?!
>>
>> We do not know how critical the application of the user is. So
>> assuming it is most critical is best.
>>
>>>
>>>>
>>>>> +
>>>>> +# Configuration options
>>>>> +DAEMON_OPTS="
>>>>> +--user sslh
>>>>> +--listen ${EXTERNAL_IP_ADDRESS}:${LISTENPORT}
>>>>> +--ssh ${LO}:${SSHPORT}
>>>>> +--tls ${LO}:${TLSPORT}
>>>>> +--openvpn ${LO}:${OPENVPNPORT}
>>>>> +--pidfile /var/run/sslh.pid
>>>>> +-C /var/empty
>>>>> +"
>>>>> +
>>>>> +# Check for binary
>>>>> +if ! [ -x "$(command -v ${DAEMON})" ]; then
>>>>> + echo "Error: could not find ${DAEMON}" >&2
>>>>> + exit 1
>>>>> +fi
>>>>
>>>> No need for this check really. We don’t have it anywhere else.
>>>
>>> Done.
>>>
>>>>
>>>>> +
>>>>> +# Check for external IP
>>>>> +EXTERNAL_IP_FUNCT
>>>>
>>>> This does not really need to be a function because the if
>>>> statement
>>>> above isn’t either.
>>>>
>>>> And it should not be evaluated in the stop case. If the system is
>>>> not
>>>> online, this service can never be stopped.
>>>>
>>>> I think it is best for this code to have it in the start section
>>>> where is was before - unless I missed something here.
>>>
>>> Have externalised the investigation of the RED address to provide
>>> it
>>> also for the --listen option in the configuration block. To keep
>>> the
>>> start) case also a little cleaner have decided to set the external
>>> IP
>>> check completely outside of the start) case and set the check
>>> before
>>> but this is fast changed.
>>
>> You won’t be able to stop the service then if the script is ended in
>> that block.
>>
>> I think it should only be evaluated in the start block. The check
>> isn’t needed for stopping the service.
>>
>>>
>>>>
>>>>> +
>>>>> case "$1" in
>>>>> start)
>>>>> boot_mesg "Starting SSLH Deamon..."
>>>>> -
>>>>> - LOCAL_IP_ADDRESS="$(</var/ipfire/red/local-
>>>>> ipaddress)"
>>>>> - if [ -z "${LOCAL_IP_ADDRESS}" ]; then
>>>>> - echo_failure
>>>>> - boot_mesg -n "FAILURE:\n\nCould not
>>>>> determine"
>>>>> ${FAILURE}
>>>>> - boot_mesg -n " your external IP
>>>>> address."
>>>>> - boot_mesg "" ${NORMAL}
>>>>> - exit 1
>>>>> - fi
>>>>> -
>>>>> - loadproc /usr/sbin/sslh -u nobody \
>>>>> - -p "${LOCAL_IP_ADDRESS}:443" -s
>>>>> localhost:222
>>>>> -l localhost:444
>>>>> + loadproc ${DAEMON} ${DAEMON_OPTS}
>>>>> evaluate_retval
>>>>> ;;
>>>>>
>>>>> stop)
>>>>> boot_mesg "Stopping SSLH Deamon..."
>>>>> - killproc /usr/sbin/sslh
>>>>> + killproc ${DAEMON}
>>>>> evaluate_retval
>>>>> ;;
>>>>>
>>>>> @@ -38,7 +75,7 @@ case "$1" in
>>>>> ;;
>>>>>
>>>>> status)
>>>>> - statusproc /usr/sbin/sslh
>>>>> + statusproc ${DAEMON}
>>>>> ;;
>>>>>
>>>>> *)
>>>>> diff --git a/src/paks/sslh/install.sh
>>>>> b/src/paks/sslh/install.sh
>>>>> index 626884bdd..df7cafc78 100644
>>>>> --- a/src/paks/sslh/install.sh
>>>>> +++ b/src/paks/sslh/install.sh
>>>>> @@ -23,5 +23,18 @@
>>>>> #
>>>>> . /opt/pakfire/lib/functions.sh
>>>>> extract_files
>>>>> +
>>>>> +# Add user and group for sslh if not already done
>>>>> +if ! grep -q sslh /etc/passwd; then
>>>>> + groupadd sslh;
>>>>> + useradd -g sslh -M -s /sbin/nologin sslh
>>>>> +fi
>>>>
>>>> Can you change this to use getent? There are a couple of examples
>>>> in
>>>> some other scripts (e.g. tor).
>>>
>>> Done.
>>>
>>>>
>>>> You should also check if the group existed already.
>>>
>>> I think the getent solution -->
>>> if ! getent group sslh &>/dev/null; then
>>> ...
>>> will do this.
>>
>> OK!
>>
>>>>
>>>>> +
>>>>> ln -s /etc/init.d/sslh /etc/rc.d/init.d/networking/red.up/50-
>>>>> sslh
>>>>
>>>> Why is this link not in the package?
>>>
>>> You mean in the LFS ? This is also a part of the old
>>> implementation,
>>> might it be an idea to have it in the initscript (incl. deletion of
>>> the
>>> symlink) ?
>>
>> I think it is easiest to have it in the package so it will be deleted
>> when the package is being removed.
>>
>> This might become a script now - see above.
>>
>>>>
>>>> Should we not check if the service is running and only then
>>>> restart?
>>>
>>> Via pgrep check in start) ?
>>
>> Not in start, but in the red.up script.
>>
>> That way we would only touch the service when it is active. If it
>> isn’t started, we need to figure out if it should be started - or
>> check if the boot process brought it up - even though RED wasn’t up.
>>
>>>> What happens when the service is disabled at boot time?
>>>
>>> You mean disabled via WUI ?
>>
>> Yes.
>>
>>>
>>>>
>>>>> +
>>>>> +# Set symlink for runlevels
>>>>> +ln -svf ../init.d/sslh /etc/rc.d/rc0.d/K02sslh
>>>>> +ln -svf ../init.d/sslh /etc/rc.d/rc3.d/S98sslh
>>>>> +ln -svf ../init.d/sslh /etc/rc.d/rc6.d/K02sslh
>>>>> +
>>>>> start_service --background ${NAME}
>>>>> diff --git a/src/paks/sslh/uninstall.sh
>>>>> b/src/paks/sslh/uninstall.sh
>>>>> index dca34ccbd..05bb27945 100644
>>>>> --- a/src/paks/sslh/uninstall.sh
>>>>> +++ b/src/paks/sslh/uninstall.sh
>>>>> @@ -23,5 +23,14 @@
>>>>> #
>>>>> . /opt/pakfire/lib/functions.sh
>>>>> stop_service ${NAME}
>>>>> +
>>>>> +# Delete user and group sslh
>>>>> +if grep -q sslh /etc/passwd; then
>>>>> + userdel sslh
>>>>> + groupdel sslh
>>>>> +fi
>>>>
>>>> We don’t delete users. This will cause that log files or so will
>>>> have
>>>> no owner any more.
>>>>
>>>> This won’t be an issue because we check if the user exists in the
>>>> install script and if it does we are not trying to create it any
>>>> more.
>>>
>>> Done.
>>
>> Thanks!
>>
>>>>
>>>>> +
>>>>> remove_files
>>>>> rm -f /etc/rc.d/init.d/networking/red.up/50-sslh
>>>>> +# Delete initscript symlinks
>>>>> +rm -f /etc/rc.d/rc?.d/???sslh
>>>>> --
>>>>> 2.12.2
>>>>>
>>>>
>>>> Overall this looks good and makes this a better add-on. It looks
>>>> like
>>>> many things to change, but they are all small and should not take
>>>> too
>>>> long.
>>>
>>> This Addon is really a old one and i was not sure if it should be
>>> updated again or if it would be dropped since stunnel do a similar
>>> job
>>> i think. But am happy if it can be a better one and the time to
>>> bring
>>> it back to life was not wasted.
>>
>> If you are using it, it should of course be updated.
>>
>> There is a little bit of work to be done and some add-ons are really
>> just the package itself with little integration, but I think it is a
>> good idea to make high-quality add-on out of this.
>>
>> Maybe we should have awesome documentation on the Wiki so that more
>> people are aware of it and therefore use it.
>>
>> -Michael
>>
>>>
>>>>
>>>> Best,
>>>> -Michael
>>>>
>>>
>>> Best,
>>>
>>> Erik
>>
>>
>
next prev parent reply other threads:[~2019-05-11 10:06 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-23 7:06 Erik Kapfer
2019-04-23 7:09 ` ummeegge
2019-04-24 11:04 ` Michael Tremer
2019-04-26 4:55 ` ummeegge
2019-05-01 11:13 ` Michael Tremer
2019-05-10 11:54 ` ummeegge
2019-05-11 10:06 ` Michael Tremer [this message]
2019-05-12 4:35 ` ummeegge
2019-05-12 4:24 ` [PATCH v2] sslh: update to 1.20 Erik Kapfer
2019-05-13 13:33 ` Michael Tremer
2019-05-19 5:29 ` ummeegge
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=D5F0EB83-8383-4320-AA1B-63E670656508@ipfire.org \
--to=michael.tremer@ipfire.org \
--cc=development@lists.ipfire.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox