PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rpcbind - Offenen Portmapper schließen



franc
22.05.17, 09:18
Hallo

auf meinem Rootserver (Ubuntu 14.04 LTS) habe ich von meinem Provider eine automatische Mitteilung erhalten, dass ich einen offenen Portmapper (auf Port 111) unterhalte. Der sei von außen erreichbar.
Ich habe dann gleich geschaut und gesehen, dass ich rpcbind auf dem Server laufen habe, den ich vermutlich gar nicht brauche und mal mit dem nfs-common Paket installiert hatte, das ich vermutlich mal installiert hatte.
rpcbind hat bei mir aber keine Konfiguration, es wird über init.d gestartet wo ich ff. lese:


#!/bin/sh
#
# start/stop rpcbind daemon.

### BEGIN INIT INFO
# Provides: rpcbind
# Required-Start: $network $local_fs
# Required-Stop: $network $local_fs
# Default-Start: S
# Default-Stop: 0 1 6
# Short-Description: RPC portmapper replacement
# Description: rpcbind is a server that converts RPC (Remote
# Procedure Call) program numbers into DARPA
# protocol port numbers. It must be running in
# order to make RPC calls. Services that use
# RPC include NFS and NIS.
### END INIT INFO

test -f /sbin/rpcbind || exit 0

. /lib/lsb/init-functions

OPTIONS="-w"
STATEDIR=/run/rpcbind
PIDFILE=/run/rpcbind.pid

if [ -f /etc/default/rpcbind ]
then
. /etc/default/rpcbind
elif [ -f /etc/rpcbind.conf ]
then
. /etc/rpcbind.conf
fi

start ()
{
if [ ! -d $STATEDIR ] ; then
mkdir $STATEDIR
fi
if [ ! -O $STATEDIR ] ; then
log_begin_msg "$STATEDIR not owned by root"
log_end_msg 1
exit 1
fi
if [ ! -f $STATEDIR/rpcbind.xdr ]
then
touch $STATEDIR/rpcbind.xdr
fi
if [ ! -f $STATEDIR/portmap.xdr ]
then
touch $STATEDIR/portmap.xdr
fi
[ -x /sbin/restorecon ] && /sbin/restorecon $STATEDIR/*.xdr
pid=$( pidofproc /sbin/rpcbind )
if [ -n "$pid" ]
then
log_action_msg "Already running: rcpbind"
exit 0
fi
log_begin_msg "Starting rpcbind daemon..."
start-stop-daemon --start --quiet --oknodo --exec /sbin/rpcbind -- "$@"
pid=$( pidofproc /sbin/rpcbind )
echo -n "$pid" >"$PIDFILE"
# /run/sendsigs.omit.d is created by /etc/init.d/mountkernfs.sh
ln -sf "$PIDFILE" /run/sendsigs.omit.d/rpcbind
log_end_msg $?

}

stop ()
{
log_begin_msg "Stopping rpcbind daemon..."
start-stop-daemon --stop --quiet --oknodo --exec /sbin/rpcbind
rm -f "$PIDFILE"
log_end_msg $?
}

case "$1" in
start)
if init_is_upstart; then
exit 1
fi
start $OPTIONS
;;
stop)
if init_is_upstart; then
exit 0
fi
stop
;;
restart|force-reload)
if init_is_upstart; then
exit 1
fi
stop
start $OPTIONS
;;
status)
status_of_proc /sbin/rpcbind rpcbind && exit 0 || exit $?
;;
*)
log_success_msg "Usage: /etc/init.d/rpcbind {start|stop|force-reload|restart|status}"
exit 1
;;
esac

exit 0

Weder /etc/rpcbind.conf noch /etc/default/rpcbind sind vorhanden.

Da ich nicht mehr weiß, warum das wirklich installiert wurde (das /var/log/apt/history hat den Eintrag der Installation schon raus rotiert) und ich nicht experimentieren will, was danach nicht mehr geht, würde ich gerne rpcbind auf lokale Anfragen beschränken, statt es komplett zu deinstallieren.

Wie geht das?

Danke

franc

marce
22.05.17, 09:31
https://www.google.de/search?q=rpcbind+localhost+only meint, die Options-Zeile wäre Dein Freund.

florian0285
22.05.17, 10:04
if [ -f /etc/default/rpcbind ]
then
. /etc/default/rpcbind
elif [ -f /etc/rpcbind.conf ]
then
. /etc/rpcbind.conf
fi


Weder /etc/rpcbind.conf noch /etc/default/rpcbind sind vorhanden.



Ich würde sie dann einfach erstellen, immerhin wird das "vorhanden sein" geprüft.

Dort dann



Options='blabla'

eintragen.

Das Init-Script als "Konfigurationsdatei" missbrauchen kann man machen, soll man aber nicht.

Options: https://linux.die.net/man/8/rpcbind

franc
22.05.17, 10:21
Das habe ich auch schon gelesen aber keine passende Option gefunden.
Das -h gilt ja nur für UDP Verbindungen.

Ich habe schon eine Weile im Netz gesucht, so ist es nicht ;)
Z.B.
https://access.redhat.com/solutions/106563
Ohne Lösung.

florian0285
22.05.17, 11:37
Auch wenn sich das aus der Man-Page nicht ergibt soll ein



Options="-i 127.0.0.1"


geholfen haben.

https://forum.ubuntuusers.de/post/2008572/

Da würde ich aber nochmal prüfen ob der dann wirklich nur auf localhost läuft.

Nachtrag:
Steht unter 5.13.2 und es wird auf die Datei "portmap" verwisen:
https://www.debian.org/doc/manuals/securing-debian-howto/ch-sec-services.de.html#s-rpc


Unter Systemd würde das ganze relativ einfach funktionieren:



rcpbind.socket
#ListenStream=127.0.0.1:111
ListenStream=0.0.0.0:111
#ListenDatagram=127.0.0.1:111
ListenDatagram=0.0.0.0:111


Vielleicht solltest du da auch mal xinetd unter die Lupe nehmen.

franc
22.05.17, 13:58
Auch wenn sich das aus der Man-Page nicht ergibt soll ein



Options="-i 127.0.0.1"
...
Vielleicht solltest du da auch mal xinetd unter die Lupe nehmen.
Das hilft nichts, danach ist rpcbind immer noch auf 0.0.0.0 lauschend.
xinetd habe ich gar nicht installiert.

Ich habe mittlerweile rausgefunden, warum ich das Paket damals installiert hatte.
Es ist für einen Cloudspeicher von netcup, den sogenannten storagespace.
Damit ich den als dauerhaftes Laufwerk einbinden kann musste ich das folgende tun:



apt-get install nfs-common
mkdir /mnt/storagespace
mount -t nfs 1.2.3.4:/vol-12345-1 /mnt/storagespace

und in /etc/fstab eintragen:

...
1.2.3.4:/vol-12345-1 /mnt/storagespace nfs defaults 0 0
Wie ich das verstehe, brauche ich sozusagen nur den Client von rpcbind und nicht den Server.
Aber wie kriege ich den Server weg?

florian0285
22.05.17, 15:00
So wie es aussieht zieht sich das schon seit 2007 durch die Weltgeschichte:

https://bugs.launchpad.net/ubuntu/+source/rpcbind/+bug/1430181

Zumindest sollte das Problem gelöst sein, wenn du mal auf systemd migrierst :rolleyes:

Im Zweifelsfall kannst du den Dienst ja auch einfach deaktivieren oder Firewall Regen setzen.

franc
29.05.17, 21:44
Also ich habe mit iptables gesperrt wie mir im netcup Forum (https://forum.netcup.de/administration-eines-server-vserver/vserver-server-kvm-server/p82994-storagespace-wurde-von-netcup-ausgeh%C3%A4ngt/#post82994) empfohlen wurde.
Jetzt ist der 111 nicht mehr offen und rpcbind überhaupt nicht mehr von außen aufrufbar.

nopes
29.05.17, 22:05
Schön, dass du die Lösung gelinkt hast und guter Service vom Provider.
Merke einfach mal ab und an checken, wer wo lauscht oder besser noch schreien, wenn was unerwartetst lauscht ;)

franc
11.09.17, 11:44
Anscheinend fliegt die Regel aber immer wieder raus, ich habe fail2ban im Verdacht, der da auch munter rein schreibt.
Wie kann ich so eine Regel dauerhaft halten?
EDIT: nach ein bisschen nachlesen muss ich erkennen, dass das normal ist und ich z.B. iptables-persistent verwenden kann, mit:



*filter
-A INPUT -s 1.2.3.4/32 -p tcp -m tcp --dport 111 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 111 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 111 -j REJECT
-A INPUT -p udp -m udp --dport 111 -j DROP
COMMIT
in die /etc/iptables/rules.v4
Beim Booten ist das dann als einziges Regelwerk drin.