home       inleiding       sysadmin       services       links       bash       werk       nothing      

SSH advanced 

 
bekijk eerst de volgende pagina's uit linux-inleiding:
 
http://linux800.be/inleiding/basic-services/ssh-client
http://linux800.be/inleiding/basic-services/ssh-server-inleiding
 

opdracht in ubuntu server en linux mint:

 

ssh-oef-multiports
  • Werk virtueel
  • zet het netwerk op dhcp voor de bridged netkaarten: 1 voor ubuntu, 1 voor een linux mint bridged en een voor je host-OS.
    netplan configuratie voor ubuntu dhcp:
    ### ubuntu server in dhcpv4
    ###
    # This is the network config written by 'subiquity'
    network:
    version: 2
    ethernets:
    enp0s3:
        dhcp4: true
  • check ssh vanaf localhost
  • check ssh vanaf een bridged client
  • steek een extra netwerkkaart in (intnet) -- adres 172.16.10.1
  • test vanaf een client in intnet (172.16.10.123)
  • wijs vervolgens verschillende poorten toe: 
    • 22 in intnet
    • 54322 in bridged
    • 12722 op localhost (127.0.0.1)
  • test opnieuw via intnet / localhost / bridged

oefening in Red-Hat (rocky linux)

  1. test - installeer ssh-server
     
    Zet de netwerkkaart van je RH8 op bridged,
    Installeer ssh-server op RH8, (dat gebeurde waarschijnlijk al bij installatie)
    kijk naar de standaardconfiguratie: /etc/ssh/sshd_config:
      
    de /etc/ssh/sshd_config ziet er zonder kommentaar als volgt uit:
     
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_ed25519_key
    SyslogFacility AUTHPRIV
    AuthorizedKeysFile  .ssh/authorized_keys
    PasswordAuthentication yes
    ChallengeResponseAuthentication no
    GSSAPIAuthentication yes
    GSSAPICleanupCredentials no
    UsePAM yes
    X11Forwarding yes
    UsePrivilegeSeparation sandbox      # Default for new installations.
    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 LANGUAGE
    AcceptEnv XMODIFIERS
    Subsystem   sftp    /usr/libexec/openssh/sftp-server

     

  2. tweede netwerkkaart
     
    Plaats een tweede netwerkkaart in je virtual-server. Zet deze in intnet.
    Gebruik private adress 172.16.xy.101/16
    Zet je bridged-card ook statisch: 10.104.xy.101/16
     
    In RH8 ziet de netwerkconfig er als volgt uit:
    $ ifconfig
    enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.104.255.121  netmask 255.255.0.0  broadcast 10.104.255.255
        inet6 fe80::a00:27ff:fe70:2dee  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:70:2d:ee  txqueuelen 1000  (Ethernet)
        RX packets 1614  bytes 168246 (164.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 259  bytes 44155 (43.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
     
    enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 08:00:27:e6:b3:14  txqueuelen 1000  (Ethernet)
        RX packets 130  bytes 21497 (20.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 102  bytes 17988 (17.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
     
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    De netwerkkaart enp0s8 heeft in dit voorbeeld nu nog geen ip-address,
    We passen dit aan met ...
      
    $ sudo vi /etc/sysconfig/network-scripts/ifcfg-enp0s8

    TYPE="Ethernet"
    BOOTPROTO="none"
    IPADDR=172.16.xy.101
    NETMASK=255.255.0.0
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    NAME="enp0s8"
    UUID="e0ecee8e-33ea-4c10-a0bf-f624e354165d"
    DEVICE="enp0s8"
    ONBOOT="yes"
    PEERDNS="yes"
    PEERROUTES="yes"
    IPV6_PEERDNS="yes"
    IPV6_PEERROUTES="yes"
    IPV6_PRIVACY="no"

    Zoek zelf uit hoe je in RH8 een uuid genereert voor je netwerkkaart, en stop die in je config.
     
     
    enp0s3 stond nog op DHCP, en moeten statisch worden ingesteld (laat hier je uuid staan):

    TYPE="Ethernet"
    BOOTPROTO="none"
    IPADDR=10.104.xy.101
    NETMASK=255.255.255.0
    GATEWAY=10.28.104.254
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    NAME="enp0s3"
    UUID=15729269-1099-434d-a5f6-a80987fe68a1
    DEVICE="enp0s3"
    ONBOOT="yes"
    PEERDNS="yes"
    PEERROUTES="yes"
    IPV6_PEERDNS="yes"
    IPV6_PEERROUTES="yes"
    IPV6_PRIVACY="no"

     
    We herstarten on systeem en proberen nu in te loggen op het statische adres:

    $ ssh 10.28.101.14
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that a host key has just been changed.
    The fingerprint for the ECDSA key sent by the remote host is
    78:47:d7:3c:8e:34:3d:17:1e:ec:b6:8d:b4:ce:ae:66.
    Please contact your system administrator.
    Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
    Offending ECDSA key in /home/user/.ssh/known_hosts:25
    remove with: ssh-keygen -f "/home/user/.ssh/known_hosts" -R 10.104.xy.101
    ECDSA host key for 10.104.xy.101 has changed and you have requested strict checking.
    Host key verification failed.

    we krijgen deze melding omdat we vroeger ditzelfde statisch adres gebruikten voor een andere machine.
    In de message hierboven zit echter de oplossing van dit probleem op de derde-laatste regel:
    "remove with: ssh-keygen -f ...".
    Dat doen we dan ook:
     
    $  ssh-keygen -f "/home/user/.ssh/known_hosts" -R 10.104.xy.101

    # Host 10.104.xy.101 found: line 25 type ECDSA
    /home/user/.ssh/known_hosts updated.
    Original contents retained as /home/user/.ssh/known_hosts.old

    En we hebben toegang.
    user@machine:~ > ssh 10.104.xy.101

    The authenticity of host '10.28.101.14 (10.28.101.14)' can't be established.
    ECDSA key fingerprint is 78:47:d7:3c:8e:34:3d:17:1e:ec:b6:8d:b4:ce:ae:66.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '10.104.xy.101' (ECDSA) to the list of known hosts.
    user@10.104.xy.101's password:  x-x-x-x-x-x
    Last login: Fri Apr 29 10:02:07 2016 from 10.104.xy.101

     
    We moeten nog kijken of het netwerk nu goed staat:
    $ ifconfig

    enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.104.xy.101  netmask 255.255.255.0  broadcast 10.104.255.255
    ...
    enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.xy.101  netmask 255.255.0.0  broadcast 172.16.255.255
    ...

    $ route -n

    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         10.104.255.254  0.0.0.0         UG    100    0        0 enp0s3
    10.104.0.0      0.0.0.0         255.255.0.0     U     100    0        0 enp0s3
    172.16.0.0      0.0.0.0         255.255.0.0     U     100    0        0 enp0s8

    pingen vanaf bridged-client lukt:

    C:\>ping 10.104.xy.101
    Pingen naar 10.104.xy.101 met 32 byte gegevens:
    Antwoord van 10.104.xy.101: bytes=32 tijd<10 ms TTL=64
    Antwoord van 10.104.xy.101: bytes=32 tijd<10 ms TTL=64

    pingen vanaf de intnet-client lukt ook ...
     

  3. poort toewijzing
     
    • Wijs in sshd_config een poort 12722 toe aan netwerkkaart lo
    • Behoud poort 22 op de intnet kaart
    • Zet de bridged netwerkkaart van je server op poort 54322
       
      We passen sshd_configaan
      Er moeten (bovenaan) twee settings worden nagekeken:
       
      • Port zet poorten open
      • ListenAddress verbindt de poort(en) met ip-adressen
         
        # $OpenBSD: sshd_config,v 1.93 2014/01/10 05:59:19 
        # This is the sshd server configuration file.  
        # See sshd_config(5) for more information.
        # This sshd was compiled with 
        # PATH=/usr/local/bin:/usr/bin
        # snip ...
        # >>> IMPORTANT
        # >>> If you want to change the port on a 
        # >>> SELinux system,  you have to tell
        # >>> SELinux about this change.
        # >>> semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
        #
        Port 22
        Port 12722
        Port 54322
        # Use these options to restrict which interfaces/protocols sshd will bind to
        #ListenAddress ::
        #ListenAddress 0.0.0.0
        ListenAddress 10.100.1.1:22
        ListenAddress 127.0.0.1:12722
        ListenAddress 10.28.101.14:54322
        ...

         
        Lees de commentaar in de header: we moeten SElinux inlichten over de extra poorten. Dat doen we als volgt:

        $ sudo yum install policycoreutils-python
        $ sudo semanage port -a -t ssh_port_t -p tcp 12722
        $ sudo semanage port -a -t ssh_port_t -p tcp 54322
        $ sudo semanage port -l | grep  ssh_port_t
        ssh_port_t       tcp      54322, 12722, 22 

        herstart vervolgens ssh:
         
        $ sudo systemctl restart sshd
        en daarna kunne we een eerste test uitvoeren met netstat:
         
        $ netstat -vatn

        Active Internet connections (servers and established)
        Proto Recv-Q Send-Q Local Address           Foreign Address         State      
        tcp        0      0 127.0.0.1:12722         0.0.0.0:*               LISTEN     
        tcp        0      0 10.28.101.14:54322      0.0.0.0:*               LISTEN     
        tcp        0      0 10.100.1.1:22           0.0.0.0:*               LISTEN     
        tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
        tcp        0      0 10.28.101.14:22         10.28.101.101:59252     ESTABLISHED
        tcp        0      0 10.28.101.14:22         10.28.101.101:59255     ESTABLISHED
        tcp        0      0 10.100.1.1:22           10.100.100.10:1029      ESTABLISHED
        tcp6       0      0 ::1:25                  :::*                    LISTEN  

         
        we testen vervolgens op localhost:
        $ ssh localhost

        ssh: connect to host localhost port 22: Connection refused
        [user@localhost ~]$ ssh localhost -p 12722
        The authenticity of host '[localhost]:12722 ([127.0.0.1]:12722)' can't be established.
        ECDSA key fingerprint is 78:47:d7:3c:8e:34:3d:17:1e:ec:b6:8d:b4:ce:ae:66.
        Are you sure you want to continue connecting (yes/no)? yes
        Warning: Permanently added '[localhost]:12722' (ECDSA) to the list of known hosts.
        user@localhost's password: 
        Last login: Fri Apr 29 11:07:58 2016

        De verbinding naar 172.16 via intnet werkt ook op poort 22:
        $ ssh user@172.16.30.101

        user@172.16.30.101's password: 
        Last login: Thu Feb  1 14:42:42 2018 from 10.104.255.239
        [user@RH8-30-101 ~]$ hostname
        RH8-30-101

         
        De verbinding via 10.104.xy.101 (onze verbinding met het internet) werkt echter niet -- we krijgen een time-out:
        $ ssh 10.104.xy.101 -p 54322
        ssh: connect to host 10.104.xy.101 port 54322: No route to host
         
        We moeten de RH8 firewall nog openzetten voor de poort 54322. dat doen we als volgt:
        $ sudo firewall-cmd --zone=public --add-port=54322/tcp --permanent
        success
         
        daarna herstarten we de firewall met:
        $ sudo firewall-cmd --reload
        success
         
        Daarna werkt 10.104.xy.101:54322 wel:
        $ ssh 10.104.xy.101 -p 54322

        user@10.104.xy.101's password: 
        Last login: Thu Feb  1 15:30:21 2018 from 172.16.xy.123
        [user@RH8-xy-101 ~]$