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:
- 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 intnet54322
in bridged12722
op localhost (127.0.0.1
)
- test opnieuw via intnet / localhost / bridged
oefening in Red-Hat (rocky linux)
- 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
- tweede netwerkkaart
Plaats een tweede netwerkkaart in je virtual-server. Zet deze in intnet.
Gebruik private adress172.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 ...
- poort toewijzing
- Wijs in
sshd_config
een poort12722
toe aan netwerkkaartlo
- Behoud poort 22 op de intnet kaart
- Zet de bridged netwerkkaart van je server op poort 54322
We passensshd_config
aan
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 oplocalhost:
$
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 via10.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 werkt10.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 ~]$
- Wijs in