Gefördert vom
Einführung und Ziele
1. Was ist die IUNO Insec - Sichere Fernwartungslösung?
-
Die Fernwartungslösung ermöglicht den Zugang zu Endpunkten in SDN basierten Unternehmensnetzen aus dem Internet, über verschlüsselte Verbindungen mit einer automatisierten Zugangskontrolle
-
Sie dient zur Demonstration der technischen Umsetzung von sicheren Industrie 4.0 Prozessen
-
Die Lösung dient zur Orientierung für Dritte und kann als Startpunkt für den weiteren Ausbau einer solchen Lösung genutzt werden
-
Ziel ist nicht ein umfangreicher Funktionsumfang, sondern ein minimaler Funktionsumfang der eine auf IT-Sicherheit fokussierte implementierung demonstriert und sich an den Anforderungen von KMUs orientiert
2. Wesentliche Features:
-
Implementierung aller Software-Elemente, die von allen Parteien erforderlich sind, und die Voraussetzungen zu erfüllen für eine sichere Durchführung des Industrie 4.0 Prozesses - Fernwartung
-
Zusammen mit der Umsetzung Industrie 4.0 wird modernste IT-Infrastruktur erwartet. Dies beeinflusst die Auswahl der einzusetzenden Technologien (siehe SDN und wireguard)
-
Die Lösung soll KMU freundlich sein, oder IT-Integrator/IT-Dienstleitser freundlich. Die IT-Architektur und Software Auswahl nutzt deshalb einen modularer Aufbau und Open-Source technologie
-
Mögliche Integration mit weiteren IT-Sicherheitslösungen und Strategien soll verfolgt werden, deshalb wird mt Standardschnittstellen entwickelt
2.1. Qualitätsziele
Die folgende Tabelle beschreibt die Qualitätsziele bei der Entwicklung der Lösung. Die Reihenfolge macht keine Aussage über die Priorität.
Qualitätsziel | Motivation und Erläuterung |
---|---|
Für Industrie 4.0-Prozesse |
Folgt einer Beschreibung wie eine Fernwartung für Industrie 4.0 aussehen könnte |
Verbessert die IT-Sicherheit |
IT-Sicherheit ist zentrale Voraussetzung für Industrie 4.0 |
KMU kompatibel |
Technologieauswahl, Komplexität, Kompatibilität, Lizenz, Integrierbarkeit, Kosten sind eine Auswahl an Kriterien, die wichtig sind bei Software für KMUs |
Kombinierbar bar mit anderen Insec Lösungen |
Die IT-Sicherheit in KUMs lässt sich weiter steigern, wenn diese Lösung mit weiteren IUNO Insec lösungen oder Drittanbietern |
2.2. Stakeholder
Tabelle mit Rollen- oder Personennamen, sowie deren Erwartungshaltung bezüglich der Architektur und deren Dokumentation.
Role/Name | Expectations |
---|---|
axxessio |
Fähigkeit zur Entwicklung von IT-Sicherheitssensitiver Software |
IUNO Insec |
Demonstrator |
Fraunhofer AISEC (orga.) |
Abschlussbericht |
BMBF/VDI |
IT-Sicherheits-Software für KMUs um Industrie 4.0 weiter zu bewerben |
KMUs |
Eine funktionierende Lösung zu minimalen Kosten |
KMU-IT-Dienstleister |
Software die sich einfach integrieren, warten, anpassen lässt |
3. Randbedingungen
3.1. Technische Randbedingung
ID | Randbedingung | Beschreibung |
---|---|---|
Randbedingungen für die Software |
||
TR1 |
Basiert auf dem SDN-Controller Faucet |
|
TR2 |
Programmiersprache ist Python und bash-script |
|
TR3 |
Für das Frontend werden Web-Technologien eingesetzt |
|
Operating System Constraints |
||
TR4 |
Ziel-Betriebsystem ist Linux |
|
Hardware |
||
TR5 |
Switch |
|
TR6 |
Faucet |
|
3.2. Organisatorische Randbedingungen
ID | Randbedingung | Beschreibung |
---|---|---|
Organisatorische Randbedingungen für die KMU |
||
OR1 |
Zugangsdaten |
Mit Zugangsdaten, insbesondere Passwörter muss sicher umgegangen werden |
OR2 |
Administration |
Maschinen und Benutzer der Lösung müssen eingerichtet werden |
OR3 |
IT-Dienstleister |
Für die Installation und den laufenden Betrieb wird ein IT-Dienstleister mit passendem Know-How benötigt |
Organisatorische Randbedingungen für den IT-Dienstleister der KMU |
||
OR4 |
Know-How |
Zum Anpassen und Updaten, muss der IT-Dienstleister das passende Know-How haben, um die IT-Sicherheit zu gewährleisten |
Organisatorische Randbedingungen für den Fernwartungsanbieter |
||
OR5 |
VPN |
Ein Tool, dass Mitarbeiter beim Aufbau der VPN-Verbindung unterstützt ist Teil dieser Softwarelösung |
OR6 |
Fernwartungsplanung |
Zur Planung und Berechtigung einer Wartungssitzung wird das Webfrontend eingesetzt |
4. Kontextabgrenzung
4.1. Fachlicher Kontext
Die IUNO Insec Fernwartungslösung wird von der KMU als Zugang zu den Maschinen angeboten. Der Maschinendienstleister baut die Verbindung über diese technische Lösung zu den Maschinen auf. Ein IT-Dienstleister der KMU integriert und wartet die IUNO Insec Fernwartungslösung.
Eine KMU möchte die Fernwartungsmöglichkeiten seiner Maschinen nutzen. Die gestellten Anforderungen hierfür sind IT-Sicherheit und Industrie 4.0
(Industrie 4.0 erwartet moderne Dienstleistungen und Infrastruktur, die fähig ist sich einem dynamischen Umfeld anzupassen, es macht keinen Unterschied, ob die Anpassungen manuell oder automatisiert sind. Im Kontext von Unternehmensnetzwerken erwarten wir hier deshalb vorrausschauend den Einsatz von SDN)
(Fokus auf IT-Sicherheit. Der Einsatz von Fernwartung soll die IT-Sicherheit des Unternehmens nicht schwächen. Daraus folgt, dass die Datenflüsse für die Fernwartung begrenzt sein müssen auf Maschine und Dienstleister. Im Kontrast hierzu, wird bei traditionellen Ansätzen eine Verbindung zwischen Dienstleister und dem Unternehmensnetz hergestellt. Was das vertrauenswürdige Unternehmensnetz damit auf das Unternehmensnetz des Dienstleister ausweitet.)
Der Maschinenhersteller oder ein anderer Dienstleister möchte eine Fernwartungsdienstleistung anbieten, für die in der KMU eingesetzten Maschinen. Zugang soll über das Internet erfolgen.
Der IT-Dienstleister der KMU möchte eine Lösung anbieten können, welche der KMU Sichere Fernwartung für ihre Maschinen ermöglicht.
4.2. Technischer Kontext
5. Lösungsstrategie
5.1. Einstieg
Qualitätsziel | Motivation und Erläuterung |
---|---|
Für Industrie 4.0-Prozesse * Verwendung von SDN * Orientierung an Web-Technologien * Vernetzung kleiner spezialisierter Services, statt monolitischer Lösungen * OpenSource |
Verbessert die IT-Sicherheit * Verbindungen müssen autorisiert werden * Datenflüsse sind begrenzt auf die Prozessteilnehmer * Verbindungen sind gegenüber dritten verschlüsselt * Es können weitere IT-Sicherheitslösungen kombiniert werden |
KMU kompatibel |
|
Kombinierbar mit anderen Lösungen |
Die IT-Sicherheit in KUMs lässt sich weiter steigern, wenn diese Lösung mit weiteren IUNO Insec lösungen oder Drittanbietern kombiniert wird |
5.2. Technologien
- Python
-
-
Weit verbreitete Programmiersprache
-
Besonders geeignet für die gestellten Aufgaben
-
Python wird von anderen Projekten für derartige Lösungen gerne verwendet
-
Viele potenziell notwendige funktionen sind in ausgereiften Bibliotheken/Paketen zu finden
-
Der SDN-Controller wird ebenfalls in python geschrieben
-
Es gibt ein Ticketing System, dass in python geschrieben wurde und von uns verwendet wird
-
Alle selbst zu entwickelnden Komponenten des Systems können in python geschrieben werden
-
Der Einsatz von python und einer passenden Entwicklungsumgebung ist mit open-source Mitteln möglich. Es gibt hierfür eine große Auswahl
-
- Wireguard
-
-
Es ist eine relativ neue Lösung für VPN
-
Das Projekt hat mit dem Design auf Sicherheit, Leistung und Kompatibilität mit aktueller Software gesetzt
-
Wireguard wird aktuell mit hoher geschwindigkeit von relevanten Projekten aufgenommen.
-
Weitere Punkte auf der Webseite
-
- Faucet
-
-
Nach ausgiebiger evaluierung ist es das einzige open-souce Projekt, deren Lösung funktioniert, aktiv weiter entwickelt wird, ?(und eine gute Softwarearchitektur aufweist)
-
Ist in python geschrieben TODO:Warum ist das ein Vorteil?
-
6. Glossar
Begriff | Definition |
---|---|
<Begriff-1> |
<Definition-1> |
<Begriff-2 |
<Definition-2> |
FAUCET
7. Install Faucet
use APT on Ubuntu
with Package faucet-all-in-one
sudo apt-get install faucet-all-in-one
apt list -a faucet
8. Prometheus
/etc/default/prometheus/prometheus.yml
sudo systemctl restart prometheus
Name: Prometheus Type: Prometheus
9. Grafana
sudo systemctl daemon-reload sudo systemctl enable grafana-server sudo systemctl start grafana-server
Login: admin
admin
10. Faucet
/etc/faucet/faucet.yaml
check_faucet_config faucet.yaml
sudo systemctl reload faucet
/var/log/faucet/faucet.log
/etc/default/faucet
11. Gauge
/etc/faucet/gauge.yaml
sudo systemctl restart gauge
Maintenance Manager
12. Setup on AWS EC2 Ubuntu 20 LTS
13. SSH into EC2 instance
ssh -i /path/my-key-pair.pem my-instance-user-name@my-instance-public-dns-name
ssh -i /home/username/.ssh/keypairfile.pem ubuntu@ec2-18-192-22-216.eu-central-1.compute.amazonaws.com
14. Update distro packages
sudo apt update sudo apt upgrade
python3 -V
sudo apt install python3-pip
virtualenv --version
sudo pip install virtualenv
15. Install MM
sudo mkdir /mm
cd mm virtualenv venv
Caution
|
use rsync instead |
download tar/zip of the repository. Pay attention to use the right branch. Then copy it over with scp…
We have to do it this way because the EC2 instance has no VPN access to axxessios gitlab
scp -F /home/[local-user]/.ssh/config iuno-insec-sdn-ticket-system-SD_dev.tar [hostname-in-ssh-configfile]:~/mm/
tar -xvf [filename]
source venv/bin/activate
.../mm/iuno-insec-sdn-ticket-system-mm_ec2
pip3 install -r requirements.txt
python3 -m scripts.create_json
choose option 1
for SQL Lite
database name: flicket.db
python3 manage.py db upgrade
on AWS EC2 use private IP of the instance
python3 manage.py run_set_up
Base url> https://mm.axxessio.com
on AWS EC2 use private IP of the instance manager.add_command('runserver', Server( host="192.168.56.7", port=5001,
python3 manage.py runserver
nohup python3 manage.py runserver
16. Install nginx
sudo apt install nginx
http://[IP]:80
sudo unlink /etc/nginx/sites-enabled/default
cd /etc/nginx/sites-available sudo touch mm
server {
server_name maintenancemanager.axxessio.com mm.axxessio.com;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
location /doku {
root /var/www;
index index.html;
}
<font color="#00ACC1"># timeout</font>
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_send_timeout 120;
location / {
client_max_body_size 0;
gzip off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:5001;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/maintenancemanager.axxessio.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/maintenancemanager.axxessio.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = mm.axxessio.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = maintenancemanager.axxessio.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name maintenancemanager.axxessio.com mm.axxessio.com;
return 404; # managed by Certboot
}
sudo ln -s /etc/nginx/sites-available/mm /etc/nginx/sites-enabled/mm
sudo nginx -t
sudo systemctl restart nginx
Tip
|
if Bad Gateway Error: recheck all paths in all config files |
17. Letsencrypt
Domains:
maintenancemanager.axxessio.com mm.axxessio.com
server { listen 80; listen [::]:80; server_name [DOMAIN] [2ndDOMAIN]; access_log /var/log/nginx/reverse-access.log; error_log /var/log/nginx/reverse-error.log; location / { include uwsgi_params; uwsgi_pass unix:/home/[username]/mm/iuno-insec-sdn-ticketsystem-SD_dev/mm.sock; } }
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx --expand -d [DOMAIN] -d[2te DOMAIN]
sudo certbot --nginx --expand -d maintenance.manageri.fi,maintenancemanager.axxessio.com,mm.axxessio.com
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/maintenance.manageri.fi/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/maintenance.manageri.fi/privkey.pem Your cert will expire on 2022-01-05. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew all of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
18. Update MM
rsync -haxHAX <quelle> <user@host:/pfad>
rsync -haxHAX --info=progress2 /home/udel/PycharmProjects/iuno-insec-sdn-ticket-system/ mmec2:/home/ubuntu/mm/iuno-insec-sdn-ticket-system-mm_ec2
rsync -haxHAX --info=progress2 --exclude 'flicket.db' /home/udel/PycharmProjects/iuno-insec-sdn-ticket-system/ mmec2:/home/ubuntu/mm/iuno-insec-sdn-ticket-system-mm_ec2
mit htop nohup python3 manage.py runserver
19. gunicorn
rsync -haxHAX --info=progress2 /home/udel/PycharmProjects/iuno-insec-sdn-ticket-system/ mmec2:/home/ubuntu/mm/iuno-insec-sdn-ticket-system-mm_ec2
rsync -haxHAX --info=progress2 --exclude 'flicket.db' /home/udel/PycharmProjects/iuno-insec-sdn-ticket-system/ mmec2:/home/ubuntu/mm/iuno-insec-sdn-ticket-system-mm_ec2
mit htop nohup python3 manage.py runserver
unicorn --bind unix:/home/ubuntu/mm/iuno-insec-sdn-ticket-system-mm_ec2/mm.sock manage:app
gunicorn --bind 0.0.0.0:5001 manage:app
server { server_name maintenance.manageri.fi maintenancemanager.axxessio.com mm.axxessio.com; access_log /var/log/nginx/reverse-access.log; error_log /var/log/nginx/reverse-error.log; # gunicorn config location / { include proxy_params; proxy_pass http://unix:/home/ubuntu/mm/iuno-insec-sdn-ticket-system-mm_ec2/mm.sock; } # using socket # location / { # client_max_body_size 0; # gzip off; # proxy_redirect off; # proxy_http_version 1.1; # proxy_set_header Host $http_host; # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-Ssl on; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-Proto $scheme; # proxy_pass http://localhost:5001; # } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/maintenance.manageri.fi/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/maintenance.manageri.fi/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = mm.axxessio.com) { return 301 https://$host$request_uri; } # managed by Certbot if ($host = maintenancemanager.axxessio.com) { return 301 https://$host$request_uri; } # managed by Certbot if ($host = maintenance.manageri.fi) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name maintenance.manageri.fi maintenancemanager.axxessio.com mm.axxessio.com; return 404; # managed by Certbot }
20. Install uwsgi
sudo apt install libpcre3 libpcre-dev
pip install uwsgi
[uwsgi] ;socket = 10.0.0.148:5001 socket = mm.sock chmod-socket = 666 ;http = 192.168.56.6:5001 chdir = ~/mm/iuno-insec-sdn-ticket-system-SD_dev module = manage:app processes = 4 threads = 2 virtualenv = ~/mm/venv master = true vacuum = true die-on-term = true
uwsgi uwsgi.ini
IIII - IUNO Insec Intelligent Interface
21. Paket generierung
cp iiii dpkg/iiii_0.1_all/usr/bin/
dpkg-deb --build --root-owner-group dpkg/iiii_0.1_all
dpkg-deb: error: maintainer script 'preinst' has bad permissions 777 (must be >=0555 and <=0775)
21.1. Build script verwenden
chmod +x build.sh
./build.sh
22. In-/Unstallation
sudo dpkg -i iiii_0.1_i386.deb
sudo dpkg -r IIII
23. Download IIII
IIII steht immer als Download bei einem Ticket auf MM zur Verfügung.
24. Starten einer Fernwartungssitzung
24.1. Automatisch
Nach der installation von IIII, auf den START
Button bei einem Ticket klicken.
Die Fernwartungssitzung wird automatische für IIII konfiguriert und IIII wird gestartet, damit wird die Fernwartungssitzung automatisch gestartet.
24.2. Manuell
24.2.1. Konfigurieren
Im IIII Menü
-
VPN Schlüsselpaar für wiregurad erzeugen
Generate new VPN key
-
API URL zu Maintenance Manager eintragen
Change API URL
-
Den Public-Key des VPN Schlüssels in den MM laden
Upload key to Maintenance Manger
24.2.2. Starten
Die Konfigurationsdatei speichern.
Im IIII Menü Start maintenance session
auswählen, dann die Konfigurationsdatei laden.
25. Stoppen einer Fernwartungssitzung
Im IIII Menü End maintenance session
auswählen