• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

sichere sshd_config

Hallo!
Ich bin ein Neuling, was Server angeht. Ich versuche gerade meinen ssh-login abzusichern. Man soll sich nur noch per keyfile mit passphrase einloggen können. Die keyfiles sind erstellt (ssh-keygen -t dsa) und überspielt (cat ~./ssh/id_dsa.pub | ssh root@domain.de "cat >> .ssh/authorized_keys2").
Wie sieht nun eine korrekte sshd_config aus?

Bisher sieht sie so aus:
# $OpenBSD: sshd_config,v 1.69 2004/05/23 23:59:53 dtucker Exp $

# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.

#Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 768

# Logging
#obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords no

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

# Set this to 'yes' to enable support for the deprecated 'gssapi' authentication
# mechanism to OpenSSH 3.8p1. The newer 'gssapi-with-mic' mechanism is included
# in this release. The use of 'gssapi' is deprecated due to the presence of
# potential man-in-the-middle attacks, which 'gssapi-with-mic' is not susceptible to.
#GSSAPIEnableMITMAttack no


# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication mechanism.
# Depending on your PAM configuration, this may bypass the setting of
# PasswordAuthentication, PermitEmptyPasswords, and
# "PermitRootLogin without-password". If you just want the PAM account and
# session checks to run without PAM authentication, then enable this but set
# ChallengeResponseAuthentication=no
UsePAM yes

#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression yes
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10

# no default banner path
#Banner /some/path

# override default of no subsystems
Subsystem sftp /usr/lib/ssh/sftp-server

# This enables accepting locale enviroment variables LC_* LANG, see sshd_config(5).
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL

Reichen folgende Änderungen:

UsePAM no
ChallengeResponseAuthentication no

Zusätzlich will ich dann noch den ssh-Port verlegen mit Port xx. und den Port natürlich in der Firewall freischalten.
Reicht das, oder fehlt was?
 

Burner

Member
Bin zwar nicht der grosse Guru in der hinsicht aber du musst schon die Sachen die du nutzen willst auskommentieren also die # entfernen. Z.B. von so
Code:
#Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::

nach
Code:
Port 22
Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::
so.

Ansonsten solltest du dir dieses Howtonoch mal durchlesen ( bzw. dieses ).

Gruss Burner
 

v.-vega

Member
Wenn die Sachen auskommentiert sind wird der Standard verwendet. Kannste also ruhig auskommentiert lassen (ausser du willt nen anderen Port dann # weg und Nummer ändern).
Empfehlen kann ich dir auch nur das Howto von framp (erster Link von Burner). Einfach und verständlich geschrieben und du hast ne sichere Verbindung.
 

Burner

Member
@vega
Gerade wenn er die # entfernt wird die Zeile ausgelesen und genutzt. Ist die # davor wird Standard genutzt.

Gruss Burner
 
OP
N

newbie1976

Member
Danke für den Link! Wenn ich die die richtigen suchbegriffe genommen hätte, dann wär ich vielleicht auch drauf gestoßen ... So ist das halt.
 
OP
N

newbie1976

Member
Wenn allesw wie gewünscht funzt ja :wink: Werde ich gleich mal ausproibieren. Und dan den Tread auf gelöst setzen.
 
OP
N

newbie1976

Member
Auf der Konsole funzt es jetzt. Ich kann mich nur noch mit key einloggen. Nur putty meckert: unable to use ... Login ist damit nicht möglich. Keine Ahnung wieso er den key nicht benutzen kann. Auch egal, hauptsache auf der konsole funzt!
 

Becksta

Hacker
Damit es mit putty klappt musst du einen key importieren. Putty konvertiert den dann in "sein" Format....
Ich bin lange drüber gestolpert, das ich die Datei "id_dsa.pub" versucht habe mit Putty zu öffnen. Du musst aber die Datei "id_dsa", also ohne Dateiendung verwenden. Dann sollte Putty dir nen Dialog zum importieren anbieten. Den importieren Key noch sicher ablegen und zukünftig für den Zugriff auf deinen Rechner mittels Putty verwenden.... ;)

Greetz
Becksta
 
Welche Option ist in sshd zuständig dafür, dass man auch über das internet reinkommen kann? Über mein netzwerk erreiche ich den server mit puti, aber nicht über internet. Linux kommt ins internet und auch port 22 ist im router offen.
 

Burner

Member
Davuer ist nicht die sshd verantwortlich sondern deine Firewall. Dort sollte der entsprechende Port freigeschaltet sein. Falls du den Server hinter einem Router betreibst sollte dort auch eine Portweiterleitung geschaltet sein.

Gruss Burner
 

marce

Guru
... und zum Testen dann auch von einem System außerhalb Deines Netzes den Zugriff versuchen. Viele Home-Router können mit ssh $externeIP nicht aus dem internen Netzi zugreifen...
 
Also das script hat Port 22 offen im Server und weitergeleitet in dem Router:

Code:
#!/bin/sh
# iptables suchen
iptables=`which iptables`
 
# wenn iptables nicht installiert abbrechen
test -f $iptables || exit 0
 
case "$1" in
   start)
      echo "Firewall gestartet..."
      # alle Regeln loeschen
      $iptables -t nat -F
      $iptables -t filter -F
      $iptables -X
 
      # neue Regeln erzeugen
      $iptables -N garbage
      $iptables -I garbage -p TCP -j LOG --log-prefix="DROP TCP-Packet: " --log-level err
      $iptables -I garbage -p UDP -j LOG --log-prefix="DROP UDP-Packet: " --log-level err
      $iptables -I garbage -p ICMP -j LOG --log-prefix="DROP ICMP-Packet: " --log-level err
 
      # default Policy
      $iptables -P INPUT DROP
      $iptables -P OUTPUT DROP
      $iptables -P FORWARD DROP
 
      # ueber Loopback alles erlauben
      $iptables -I INPUT -i lo -j ACCEPT
      $iptables -I OUTPUT -o lo -j ACCEPT
 
      #####################################################
      # ausgehende Verbindungen
      # Port 21
      $iptables -I OUTPUT -o eth0 -p TCP --sport 1024:65535 --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p TCP --sport 21 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p TCP --sport 49152:65535 --dport 20 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p TCP --sport 20 --dport 49152:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
      # Port 22
      $iptables -I OUTPUT -o eth0 -p TCP --sport 1024:65535 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p TCP --sport 22 --dport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      # Port 80
      $iptables -I OUTPUT -o eth0 -p TCP --sport 1024:65535 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p TCP --sport 80 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
      # Port 443
      $iptables -I OUTPUT -o eth0 -p TCP --sport 1024:65535 --dport 443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p TCP --sport 443 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
      # ICMP
      $iptables -I OUTPUT -o eth0 -p ICMP --icmp-type echo-reply -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p ICMP --icmp-type echo-reply -m state --state ESTABLISHED,RELATED -j ACCEPT
      # Port 137
      $iptables -I OUTPUT -o eth0 -p UDP --sport 1024:65535 --dport 137 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p UDP --sport 137:65535 --dport 1024 -m state --state ESTABLISHED,RELATED -j ACCEPT
      # Port 138
      $iptables -I OUTPUT -o eth0 -p UDP --sport 1024:65535 --dport 138 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p UDP --sport 138:65535 --dport 1024 -m state --state ESTABLISHED,RELATED -j ACCEPT
      # Port 139
      $iptables -I OUTPUT -o eth0 -p TCP --sport 1024:65535 --dport 139 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p TCP --sport 139:65535 --dport 1024 -m state --state ESTABLISHED,RELATED -j ACCEPT
 
      #####################################################
      # eingehende Verbindungen
      # Port 21
      $iptables -I INPUT -i eth0 -p TCP --sport 1024:65535 --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p TCP --sport 21 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p TCP --sport 1024:65535 --dport 1024:65535 -m state --state NEW -j ACCEPT
      $iptables -I INPUT -i eth0 -p TCP --sport 1024:65535 --dport 20 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p TCP --sport 49152:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p TCP --sport 20 --dport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      # Port 22
      $iptables -I INPUT -i eth0 -p TCP --sport 1024:65535 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p TCP --sport 22 --dport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      # Port 80
      $iptables -I INPUT -i eth0 -p TCP --sport 1024:65535 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p TCP --sport 80 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
      # Port 123
      $iptables -I INPUT -i eth0 -p TCP --sport 1024:65535 --dport 123 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p TCP --sport 123 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p UDP --sport 1024:65535 --dport 123 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p UDP --sport 123 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
      # Port 443
      $iptables -I INPUT -i eth0 -p TCP --sport 1024:65535 --dport 443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p TCP --sport 443 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
      # Port 137
      $iptables -I INPUT -i eth0 -p UDP --sport 1024:65535 --dport 137 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p UDP --sport 137:65535 --dport 1024 -m state --state ESTABLISHED,RELATED -j ACCEPT
      # Port 138
      $iptables -I INPUT -i eth0 -p UDP --sport 1024:65535 --dport 138 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p UDP --sport 138:65535 --dport 1024 -m state --state ESTABLISHED,RELATED -j ACCEPT
      # Port 139
      $iptables -I INPUT -i eth0 -p TCP --sport 1024:65535 --dport 139 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p TCP --sport 139:65535 --dport 1024 -m state --state ESTABLISHED,RELATED -j ACCEPT
 
      #####################################################
      # erweiterte Sicherheitsfunktionen
      # SynFlood
      $iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
      # PortScan
      $iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
      # Ping-of-Death
      $iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
 
      #####################################################
      # bestehende Verbindungen akzeptieren
      $iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
      $iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
      #####################################################
      # garbage uebergeben wenn nicht erlaubt
      $iptables -A INPUT -m state --state NEW,INVALID -j garbage
 
      #####################################################
      # alles verbieten was bisher erlaubt war
      $iptables -A INPUT -j garbage
      $iptables -A OUTPUT -j garbage
      $iptables -A FORWARD -j garbage
      ;;
   stop)
      echo "Firewall abgeschaltet..."
      $iptables -t nat -F
      $iptables -t filter -F
      $iptables -X
      $iptables -P INPUT ACCEPT
      $iptables -P OUTPUT ACCEPT
      $iptables -P FORWARD ACCEPT
      ;;
   restart|reload|force-reload)
   $0 stop
   $0 start
      ;;
   *)
      echo "Aufruf: /etc/init.d/firewall (start|stop)"
      exit 1
      ;;
esac
exit 0

Der Router ist ein Netgear WNDR3300 WLAN Router.
 

framp

Moderator
Teammitglied
Die iptable rules sehen OK aus. Wie ist es mit Deinem Router? Routet der auch den einkommenden Port 22 an Deinen Server weiter?
 
Ok das Problem ist gelöst. War was anderes. Ein paralleles firewallscript war - obwohl ich es abschaltete - wieder an. Ich schätze es lag an der Reparatur die wir durchgeführt hatten.

Jetzt habe ich ein anderes Problem. Das Script soll alle SSH Verbindungen blockieren wenn es gestartet ist, aber bereits bestehende Verbindungen nicht abbrechen. Aber ich kann über das Internet den Server erreichen und komme per SSH rein!?
 

framp

Moderator
Teammitglied
So ganz verstehe ich nicht warum Du das machen willst. Aber anyhow: Warum so umständlich? Einfach den sshd stoppen. Dann kann keiner mehr rein - und die, die eine Session haben, können weiterarbeiten :roll:
 
Ja, ist schon klar. Aber ich möchte das nur halt ausprobieren. Es geht mir darum zu lernen und Erfahrungen zu sammeln und nicht einfach wie ein windows Anwender alles so hinzunehmen wie es ist. Anbei - wo schalte ich den Start von sshd ab? Ich meine - ohne yast zu benutzen. In welcher Datei.
 
Oben