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:

  • Werk virtueel op CentOS7
  • zet het netwerk statisch
  • check ssh vanaf localhost
  • check ssh vanaf een bridged client
  • steek een extra netwerkkaart in (intnet) -- adres 172.16.xy.101
  • test vanaf een client in intnet (172.16.xy.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
  • zet SElinux correct met semanage
  • zet de CentOS firewall correct met firewall-cmd
     
    1. test - installeer ssh-server
       
      Zet de netwerkkaart van je CentOS7 op bridged,
      Installeer ssh-server op CentOS7, (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 CentOS 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 CentOS 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@centOS74-30-101 ~]$ hostname
        centOS74-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 CentOS 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@centOS74-xy-101 ~]$