In dit hoofdstuk staat beschreven wat benodigd is voor het aanmaken van een nieuwe sFTP koppeling.
Inleiding standaard sFTP koppeling
Transport: twee smaken; van intern naar extern, van extern naar intern Security: twee smaken; username/password, keyfile Frequentie: in te stellen middels frequency scheduler of CRON job Bestandslokaties: volgens vast format op nfsshare, of op de ESB ftp server, in te stellen middels properties file. Geen andere opties toegestaan.
Uit de aansluitvoorwaarden
Het is ten alle tijde mogelijk dat een broker wegens verschillende redenen niet beschikbaar is. Voor de sFTP verbindingen wordt gebruik gemaakt van een VIP adres. Achter dit VIP adres liggen twee FTP servers waarbij de loadbalancer zorgt dat de connectie altijd naar een van de twee wordt opgezet. Bij het aanvragen van sFTP koppeling moet er gebruik worden gemaakt van een NFS share. Deze NFS share moet door de klant worden aangevraagd bij IRN Infra via het self service portaal van Topdesk. Belangrijk om te vermelden is dat het tpb-esb team geen onderhoud/beheer uitvoert op de NFS shares. Het onderhoud en beheer van deze NFS share is de verantwoordelijkheid van IRN Infra. Wanneer er gebruik wordt gemaakt van de sFTP connector van Mulesoft is het verplicht om de velden van de connector dynamisch te maken. Hiermee wordt bedoeld dat alle velden middels properties kunnen worden aangepast door het tpb-esb team. Reconnectie strategie is verplicht bij de sFTP en/of FTPs connector. Het integratie platform met haar MFT koppeling is geschikt voor een maximale bestandsoverdracht van 10 GB per dag. De code maakt gebruik van extra component, eerst te installeren in anypoint studio. https://www.mulesoft.com/exchange/68ef9520-24e9-4cf2-b2f5-620025690913/requester-module/Blocked active content: img Al worden in principe alle benodigde libraries via de pom-file opgehaald.
Naamgeving
Domein-KomtVanaf-GaatNaartoe-mft-ms In de template staat dit vooraf in gevuld als: rwsdomein-leverendepartij-ontvangendepartij Met een search en replace door alle bestanden die onderdeel zijn van het template project kun je eenvoudig de naamgeving op de juiste manier aanpassen. Voorbeeld van Intern-naar-Extern wm-amice-inspectieview-mft-ms wm=rwsdomain amice= leverendepartij inspectieview / ilt = ontvangendepartij
Activiteiten bij sFTP change
Procesoverzicht
Top down activiteiten
Actie
Details
Wie
Adviseur
Uitvoerder
Firewall & LB
Aanvragen poort 22 toegang
ESB Team
Netwerk Team
FTP user & rechten
Aanmaken DMZ FTP Server user en rechten
ESB Team
ESB Team
Share pad
Share naam aanvragen
ESB Team
Infra adviseur
Infra Team
Share pad mapping
NFS <-> Samba share mapping maken
ESB Team
Infra adviseur
Infra Team
Share user & rechten
Aanmaken Interne FTP Server user en rechten
ESB Team
ESB Team
User account + directory aanmaken Belangrijk: ftp server bevindt zicht op een cluster ftp101 / 102 Het is belangrijk dat de unixnummer en het wachtwoord op beide hosts gelijk zijn. Anders werkt het niet in het geval dat het VIP adres van 101 --> 102 over gaat.
Stappenplan
Stap 1 log met ssh in op de twee ftp servers Stap 2 Navigeer naar de directory /etc Stap 3 open het passwd file met het volgende commando: cat passwd Stap 4 Bekijk wat het laatste unixnummer is en tel daar 1 bij op (kijk naar laatste entry). Voorbeeld: ftp_a_aim:x:20032:20032::A_FTP_001/ftp_a_aim:/bin/bash Het nieuwe unixnummer wordt in dit geval dus: 20033 Voer het volgende commando uit: sudo adduser -u <eerst_vrije_nummer> <userid> (het moet hetzelfde commando zijn !!) (Verwijderen van verkeerd aangemaakte user, commando: sudo userdel <userid>) Stap 5 Maak de directory aan door het volgende commando: sudo mkdir /A_FTP_001/<ftp_a_<projectnaam>> Voorbeeld voor ftp acceptatie!!: sudo mkdir /A_FTP_001/ftp_a_ivsnext Voorbeeld voor ftp productie!!: sudo mkdir /P_FTP_001/ftp_ivsnext Stap 6 Maak de chroot directory aan op beide servers: Commando 1: sudo chown root:root /A_FTP_001/ftp_a_ivsnext Commando 2: sudo chmod 0755 /A_FTP_001/ftp_a_ivsnext Stap 7 Maak ftp directory aan op beide servers: Commando 1: sudo mkdir /A_FTP_001/ftp_a_ivsnext/ftp_a_ivsnext (1 server) Commando 2: sudo chown ftp_a_ivsnext:ftp_a_ivsnext /A_FTP_001/ftp_a_ivsnext/ftp_a_ivsnext Commando 3: sudo chmod 0755 /A_FTP_001/ftp_a_ivsnext/ftp_a_ivsnext Stap 8 Autoriseer <userid> voor het gebruik van FTP d.m.v. chroot. Save het bestand door het volgende commando: sudo cp /etc/ssh/sftp_sshd_config /etc/ssh/sftp_config.<datumvanvandaag> Stap 9 Voeg nieuwe entry toe door te navigeren naar: cd /etc/ssh en open de file met het commando: sudo vi sftp_sshd_config Stap 10 druk op insert en scroll helemaal naar onder en voeg het onderstaande toe: Match User <userid> AllowTcpForwarding no ChrootDirectory /A_FTP_001/<Userid> Stap 11 Genereer een willekeurig wachtwoord door het volgende commando: openssl rand -base64 12 Stap 12 Koppel het wachtwoord aan de userid door: Commando 1: sudo su - Commando 2: echo <nieuw wachtwoord> | passwd --stdin <userid> Commando 3: exit Stap 13 controleer of het wachtwoord niet verloopt met: sudo chage -l <userid> Stap 14 Geef een van de ftp servers een restart door het volgende commando: sudo service sshd-sftp restart Stap 15 Mounten FTP
Log in op de juiste FTP server en geef het volgende commando: cat /etc/fstab
/kpncmdb is de directory waar de bestanden op de server staan
/topdesk cifs is de naam van het project (amice, lavs of o.i.d.) en de soort mount
de credentials zijn te vinden in de /etc/creds.topdesk directory VoorbeeldFW aanvraag
FW aanvraagvoorbeeld
Onderstaand is een voorbeeld voor een FW aanvraag van scenario 1. Bij het indienen van een FW aanvraag moet er altijd vanuit de initiërende kant bekeken worden. Dus in geval van scenario 1 komt het initiatief vanuit de interne ESB applicatie die een call doet naar de DMZ applicatie (welke op zijn beurt weer een file van de DMZ ftp server afhaalt). De firewall aanvraag dient dus vanaf de ip addressen intern NAAR de ip addressen extern aangevraagd te worden. Zie onderstaande FW aanvraag: Nadat port 22 is opgezet moet er bij infra een aanvraag gedaan worden om de loadbalancers te configureren (port 22 doorrouteren naar 8022); Graag port 8022 configureren in de loadbalancers: (voor een actuele lijst, zie Serverpark document) Richting de ftp servers in onze DMZ omgeving; (voor een actuele lijst, zie Serverpark document) ssh toegang ftp / toevoegen .pub / authorizedkey Hierbij de inhoud van het mailtje van de SAS consultant Hier staat het hele verhaal: https://www.jscape.com/blog/setting-up-sftp-public-key-authentication-command-lineBlocked active content: img In het kort komt het hierop neer: Zorg de inhoud van de id_rsa.pub in de ~/.ssh/authorized_keys file op de ftp server komt te staan. Dat is dus in een .ssh folder onder de home directory van de dictu user waarmee je inlogt op de FTP server. Het is nog van belang dat zowel de .ssh directory als de authorized_keys file een chmod hebben van 700. Anders vindt de ssh daemon het niet veilig genoeg en werkt het alsnog niet. Voorbeelden XML files
VoorbeeldProperties File
Hieronder is in de properties file beschreven waar welke settings in het project via placeholders worden gevuld.
Properties File voor de standaard MFT oplossing voor RWS
Versie 1.0.0 - 16 juli 2021
Edwin Rombeek #Application name (change app.name to edit application name you see in the logfile) rwsdomein-leverendepartij-ontvangendepartij-mft.app.name=rwsdomein-leverendepartij-ontvangendepartij-mft-ms api.name=rwsdomein-leverendepartij-ontvangendepartij-mft-ms
HTTP logging API http.logging.api.host=localhost http.logging.api.port=8085 http.logging.api.protocol=HTTP http.logging.api.path=/api/v1
LogSuccessfulTransportChoice
Zet deze property op true als iedere succesvol verplaatste bestandsnaam in de log moet worden vastgelegd. rwsdomein-leverendepartij-ontvangendepartij-mft.logsuccessfultransport=true #Splunk logging splunk.logging=true splunk.logging.username=acc splunk.logging.password=acc #File filter (global-sftp-inbound Advanced Tab) is gebaseerd op de volgende expressie:
file:filename-wildcard-filter caseSensitive=${rwsdomein-leverendepartij-ontvangendepartij-mft.wildcard.casesensitive}, pattern=${rwsdomein-leverendepartij-ontvangendepartij-mft.wildcard.pickupfile} #Je kunt kiezen of bestanden op basis van naam of type worden opgepakt. rwsdomein-leverendepartij-ontvangendepartij-mft.wildcard.pickupfile=${rwsdomein-leverendepartij-ontvangendepartij-mft.wildcard.pickupfile.type} #rwsdomein-leverendepartij-ontvangendepartij-mft.wildcard.pickupfile=${rwsdomein-leverendepartij-ontvangendepartij-mft.wildcard.pickupfile.name} #wildcard pick up certain files rwsdomein-leverendepartij-ontvangendepartij-mft.wildcard.pickupfile.type=*.bak rwsdomein-leverendepartij-ontvangendepartij-mft.wildcard.pickupfile.name=* rwsdomein-leverendepartij-ontvangendepartij-mft.wildcard.casesensitive=true #inbound sftp Intern (leverendepartij) #inbound-sftp-connector-config #Advanced tab rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.validate.connections=false rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.polling.freq=60000 rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.fileage=60000 rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.waittime=40000 #File tab rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.keepFileOnError=true rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.autoDelete=false #Reconnection tab #Strategies: - Standard Reconnection. Freq (ms) = 2000
- Reconnection Attempts = 200
global-sftp-inbound #General tab rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.host=acceptatie.sftp.esb.intranet.rws.nl rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.port=22 rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.path=/amice/Datalevering_derden/Inspectieview rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.user=ftp_a_amice rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.password=********* #Advanced tab rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.responsetimeout=100000 rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.timings.polling.freq=1000 #Reconnection tab rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.reconnection.freq_ms=2000 rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.reconnection.attempts=200 #File tab rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.tmp.directory.inbound=Processed rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.tmp.directory.outbound= #Mule Requester, die global-sftp-inbound als resource gebruikt, heeft de volgende timeout: rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.timeout=10000 #outbound sftp Extern (ontvangendepartij)
Authentication \u2013 Identity File: ${sftp.outbound.identityfile} #Advanced tab rwsdomein-leverendepartij-ontvangendepartij-mft.outbound.validate.connections=false rwsdomein-leverendepartij-ontvangendepartij-mft.outbound.sftp.polling.freq=10000 #Reconnection tab #Strategies: - Do not use a reconnection strategiy
#poller (Time Unit = Milliseconds) rwsdomein-leverendepartij-ontvangendepartij-mft.poller.frequency=10000 rwsdomein-leverendepartij-ontvangendepartij-mft.poller.startdelay=5000 #rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.polling.cronexpression= #rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.polling.crontimezone=
Voorbeeld MFT-receive-sftp-file.xml
MFT-receive-sftp-file Poller settings
rwsdomein-leverendepartij-ontvangendepartij-mft-receive-sftp-file : Poller settings Het is mogelijk om op twee verschillende manieren een poller interval in te stellen voor het ophalen van bestanden die doorgezet moeten worden; ofwel met een standaard frequency, ofwel middels een cron job. In de properties file worden de volgende placeholders geplaatst, afhankelijk van de gekozen methode: #poller fixed-frequency-scheduler (Time Unit = Milliseconds) rwsdomein-leverendepartij-ontvangendepartij-mft.poller.frequency=10000 rwsdomein-leverendepartij-ontvangendepartij-mft.poller.startdelay=5000 of #poller cron-scheduler (CRON) rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.polling.cronexpression= rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.polling.crontimezone=
In de rwsdomein-leverendepartij-ontvangendepartij-mft-receive-sftp-file.xml flow wordt in de sectie <!-- FLOWS --> één van onderstaande stukjes xml gebruikt, afhankelijk van de gekozen methode. <poll doc:name="Poll"> <fixed-frequency-scheduler frequency="${rwsdomein-leverendepartij-ontvangendepartij-mft.poller.frequency}" startDelay="${rwsdomein-leverendepartij-ontvangendepartij-mft.poller.startdelay}"/> <mulerequester:request doc:name="Mule Requester" resource="global-sftp-inbound" config-ref="Mule_Requester" timeout="${rwsdomein-leverendepartij-ontvangendepartij-mft.inbound.sftp.timeout}"/> </poll>
mule-deploy.properties #Wed Jun 16 12:14:03 CEST 2021 redeployment.enabled=true encoding=UTF-8 domain=default config.resources=rwsdomein-leverendepartij-ontvangendepartij-mft-error-handling.xml,rwsdomein-leverendepartij-ontvangendepartij-mft-logflows.xml,rwsdomein-leverendepartij-ontvangendepartij-mft-receive-sftp-file.xml
log4j2.xml
<?xml version="1.0" encoding="utf-8"?> <Configuration> <!--These are some of the loggers you can enable. There are several more you can find in the documentation. Besides this log4j configuration, you can also use Java VM environment variables to enable other logs like network (-Djavax.net.debug=ssl or all) and Garbage Collector (-XX:+PrintGC). These will be append to the console, so you will see them in the mule_ee.log file. --> Voorbeeld .log file