{"id":2524,"date":"2014-11-16T07:28:26","date_gmt":"2014-11-16T06:28:26","guid":{"rendered":"http:\/\/helgekoenig.de\/?p=2524"},"modified":"2014-11-16T10:49:07","modified_gmt":"2014-11-16T09:49:07","slug":"vsftp-mit-ssltls-ueber-dyndns-auf-ubuntu-14-04-01","status":"publish","type":"post","link":"https:\/\/helgekoenig.de\/?p=2524","title":{"rendered":"vsFTP mit SSL\/TLS \u00fcber DynDNS auf Ubuntu 14.04.01 und Filezilla"},"content":{"rendered":"<p>Nachdem mein letzter Heimserver das Zeitliche gesegnet hat, musste ich einen neuen aufsetzten und habe dies gleich zum Anlass genommen einiges anders zu machen. Mein alter Heimserver hatte einen FTP Server ohne SSL, was nat\u00fcrlich sehr einfach ist aber die komplette Kommunikation ist unverschl\u00fcsselt und in Klartext. Mein neuer Server sollte verschl\u00fcsselt sein und bei der Umsetzung bin ich auf ein paar Probleme gesto\u00dfen, aber dazu sp\u00e4ter mehr.<\/p>\n<h2>Installation von vsftpd<\/h2>\n<p>Beginnen wir mit der Installation mit dem FTP Server, vsftpd.<\/p>\n<pre>sudo apt-get install vsftpd<\/pre>\n<p>Danach m\u00fcssen wir uns erst einmal mit der Konfiguration von vsftp besch\u00e4ftigen.\u00a0\u00d6ffnet diese in dem Texteditor eurer wahl, ich benutzte vim:<\/p>\n<pre>vim \/etc\/vsftpd.conf<\/pre>\n<p>Diese ist ziemlich selbsterkl\u00e4rend, aber wir sollten ein paar Sachen \u00e4ndern um nur System Benutzer (Schreib-) Zugriff zu erlauben.<\/p>\n<pre>anonymous_enable=<span class=\"highlight\">NO\r\n<\/span>local_enable=YES\r\nwrite_enable=YES<\/pre>\n<p>Mit diesen wenigen Einstellungen h\u00e4tten wir schon einen FTP Server der unverschl\u00fcsselt funktioniert (nach einem Neustart des Dienstes).<\/p>\n<h2>SSL Zertifikat erstellen und vsftp anpassen<\/h2>\n<p>Wir m\u00f6chten\u00a0einen verschl\u00fcsselten FTP Server und m\u00fcssen dazu ein Zertifikat erstellen:<\/p>\n<pre>sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout \/etc\/ssl\/private\/vsftpd.pem -out \/etc\/ssl\/private\/vsftpd.pem<\/pre>\n<p>Bei Bedarf (oder aus Faulheit) l\u00e4sst sich die G\u00fcltigkeit des Zertifikates erweitern in dem man den Parameter &#8222;days 365&#8220; anpasst.<\/p>\n<p>Jetzt m\u00fcssen wir vsftpd noch sagen das er das Zertifikat benutzten soll und m\u00fcssen die\u00a0\/etc\/vsftpd.conf abermals anpassen. Je nach Distribution k\u00f6nnen davon schon ein paar Sachen in der config\u00a0stehen, bitte achtet darauf keine Doppeleintr\u00e4ge zu machen.<\/p>\n<p>Hiermit sagen wir dem Server welche Zertifikate er wie benutzten soll:<\/p>\n<pre>rsa_cert_file=\/etc\/ssl\/private\/vsftpd.pem\r\nrsa_private_key_file=\/etc\/ssl\/private\/vsftpd.pem<\/pre>\n<pre>ssl_enable=YES\r\nallow_anon_ssl=NO\r\nforce_local_data_ssl=YES\r\nforce_local_logins_ssl=YES<\/pre>\n<pre>ssl_tlsv1=YES\r\nssl_sslv2=NO\r\nssl_sslv3=NO<\/pre>\n<pre>require_ssl_reuse=NO\r\nssl_ciphers=HIGH<\/pre>\n<p>Die folgenden\u00a0Einstellungen sagen vsftp das er Passive Datei\u00fcbertragungen verwenden soll. Dies ist n\u00f6tig da der FTP Server keine statische IP Adresse hat (wir benutzten dem Server ja Zuhause). Dazu m\u00fcssen wir noch noch die (TCP) Portrange definieren die ihr\u00a0auch in der Firewall eures Router freigeben m\u00fcsst (zus\u00e4tzlich zu TCP Port 20 und 21). Die Portrange kann fast frei beliebig gew\u00e4hlt werden, solange sie aufeinander folgen und frei sind. Geht davon aus das ihr f\u00fcr jede gleichzeitig aktive Datei\u00fcbertragung einen Port braucht. Wenn ihr also 10 Dateien gleichzeitig \u00fcbertragen wollt, \u00f6ffnet 10 Ports. Da ich viele kleine Dateien hin und her schiebe, hab eich 20 Ports ge\u00f6ffnet. Dies Definiert ihr mit <strong>pasv_min_port<\/strong> und\u00a0<strong>pasv_max_port<\/strong>. Die\u00a0<strong>pasv_address<\/strong> ist eure aktuelle IP Adresse und\u00a0bekommt sp\u00e4ter noch mehr Aufmerksamkeit.<\/p>\n<pre>pasv_enable=YES\r\npasv_promiscuous=YES\r\npasv_min_port=40000\r\npasv_max_port=40020\r\npasv_address=111.222.333.444<\/pre>\n<h2>Filzilla konfigurieren<\/h2>\n<p>Wenn wir vsftp neustarten w\u00fcrden, k\u00f6nnten wir schon verschl\u00fcsselt\u00a0auf den FTP Server aus dem lokalen Netzwerk zugreifen. Den Dienst neu zu starten k\u00f6nnt ihr mit diesem Befehl:<\/p>\n<pre>service vsftpd restart<\/pre>\n<p>Startet <a href=\"https:\/\/filezilla-project.org\/\" target=\"_blank\">Filezilla<\/a>,\u00f6ffnet den Server Manager und erstellt einen neuen Server.<\/p>\n<p><code lang=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-2526 size-full\" src=\"https:\/\/helgekoenig.de\/wp-content\/uploads\/2014\/11\/Filezilla.png\" alt=\"Filezilla\" width=\"328\" height=\"239\" srcset=\"https:\/\/helgekoenig.de\/wp-content\/uploads\/2014\/11\/Filezilla.png 328w, https:\/\/helgekoenig.de\/wp-content\/uploads\/2014\/11\/Filezilla-300x218.png 300w\" sizes=\"auto, (max-width: 328px) 100vw, 328px\" \/><\/code><\/p>\n<p>Bei Server gebt ihr den Hostnamen ein, in meinem Fall &#8222;fileserver&#8220;.<\/p>\n<p>Den Port k\u00f6nnt ihr frei lassen,\u00a0solange ihr\u00a0connect_from_port_20=YES nicht ge\u00e4ndert habt findet Filzilla den schon alleine.<\/p>\n<p>Wichtig ist das ihr die Verschl\u00fcsselung auf &#8222;<strong>Explizites FTP \u00fcber TLS erfordern<\/strong>&#8220; stellt.<\/p>\n<p>Als n\u00e4chstes m\u00fcsst ihr nat\u00fcrlich noch euren Benutzernamen und Passwort des Servers eingeben. Dies ist der Benutzter des Servers auf den ihr zugreifen wollt.<code lang=\"\"><\/code><\/p>\n<p>Bei allen anderen Einstellungen solltet ihr nichts mehr anpassen m\u00fcssen, au\u00dfer vielleicht die Anzahl der gleichzeitigen Datei\u00fcbertragungen.<code lang=\"\"><br \/>\n<\/code><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>vsFTP mit euer aktuellen DynDNS IP Adresse versorgen<\/h2>\n<p>Da wir den Server Zuhause im Netzwerk betreiben haben die meisten von uns keine Statische IP Adresse, sondern eine Dynamische. Besonders diejenigen unter euch die Internet \u00a0\u00fcber DSL beziehen haben i.d.R. mindestens eine neue IP alle 24 Stunden. Damit kommt vsftp nicht klar in Verbindung mit SSL\/TLS und der Verbindungsaufbau scheitert so lange die IP Adresse unter pasv_address in\u00a0\/etc\/vsftpd.conf Konfigurationsdatei nicht mit der aktuellen \u00fcberein stimmt. Wir m\u00fcssen also entweder h\u00e4ndische bei jedem IP wechsel die Konfigurationsdatei anpassen und den Service neu starten oder wir automatisieren das.<\/p>\n<p>Bei meiner Recherche zu diesem Problem, bin ich auf verschiedene L\u00f6sungswege gesto\u00dfen. F\u00fcndig wurde ich schlussendlich im\u00a0<a href=\"https:\/\/forums.gentoo.org\/viewtopic-t-282630-start-0.html\" target=\"_blank\">Gentoo Forum<\/a>, dort hat der Benutzter Tomcat ein Bash Script ver\u00f6ffentlicht, das mit Hilfe von Lynx die IP Adresse von dem Webserver hinter der DynDNS Adresse erfragt. Ich Betreibe aber keinen Webserver, also musste ich das Script etwas modifizieren und ein paar andere Kleinigkeiten anpassen.<\/p>\n<p>Zuerst pr\u00fcft das Script auf root Rechte, da sonst die Konfigurationsdatei nicht modifiziert oder der FTP Dienst neu gestartet werden kann. Danach kommt der vergleich der IP Adresse die in der Konfigurationsdatei hinterlegt ist und der aktuellen. Dies passiert mit dem Tool <a href=\"http:\/\/wiki.ubuntuusers.de\/dig\" target=\"_blank\">dig<\/a> (domain information groper) das einige Abfragem\u00f6glichkeiten in Bezug auf DNS bietet. Sind diese IPs unterschiedlich wird ein Eintrag in der vsftp Log Datei geschrieben und danach mit Hilfe von <a href=\"http:\/\/wiki.ubuntuusers.de\/sed\" target=\"_blank\">sed<\/a>\u00a0(stream editor)\u00a0die IP in der Konfigurationsdatei von vsftp ausgetauscht und nach einem weiteren Logeintrag der Dienst neu gestartet.<\/p>\n<p>Mein modifiziertes\u00a0Script findet ihr weiter unten oder hier als <strong>Download<\/strong>:\u00a0<a href=\"https:\/\/helgekoenig.de\/wp-content\/uploads\/2014\/11\/vsftpd_IP_change1.txt\">vsftpd_IP_change<\/a><\/p>\n<p>Das Script m\u00fcsst ihr f\u00fcr euch noch etwas anpassen, im Speziellen m\u00fcsst ihr eure eigene DynDNS Adresse eintragen, \u00e4ndert dazu &#8222;<strong>meineadresse.dyndns.org<\/strong>&#8220; in dieser Zeile:<\/p>\n<pre>CURRENTIP=$(dig <strong>meineadresse.dyndns.org<\/strong> +\"short\")<\/pre>\n<p>Hier ist das komplette Bash Script. Die Passage die ihr \u00e4ndern m\u00fcsst habe ich hervorgehoben hervorgehoben.<\/p>\n<pre>#!\/bin\/bash\r\nif [ `\/usr\/bin\/whoami` = 'root' ]<\/pre>\n<pre>then \r\n OLDIP=`cat \/etc\/vsftpd.conf | grep pasv_address | sed -e 's\/pasv_address=\\([0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\)\/\\1\/'` \r\n CURRENTIP=$(dig <strong>meineadresse.dyndns.org<\/strong> +\"short\")<\/pre>\n<pre>if [ \"$OLDIP\" != \"$CURRENTIP\" ]; \r\n then \r\n echo \"$(date +'%a %b %d %T %Y') *** Public IP changed from $OLDIP to $CURRENTIP\" &gt;&gt; \/var\/log\/vsftpd.log \r\n sed 's\/\\(pasv_address=\\)\\([0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\)\/\\1'$CURRENTIP'\/' \/etc\/vsftpd.conf &gt; \/etc\/vsftpd.conf.new &amp;&amp;\r\n mv \/etc\/vsftpd.conf.new \/etc\/vsftpd.conf &amp;&amp; \r\n echo \"$(date +'%a %b %d %T %Y') *** Pasv_address setting updated successfully - restarting daemon\" &gt;&gt; \/var\/log\/vsftpd.log &amp;&amp;\r\n service vsftpd restart<\/pre>\n<pre># this will spam much output in your log terminal \r\n# else \r\n# echo \"$(date +'%a %b %d %T %Y') *** IP check OK - IP unchanged\" &gt;&gt; \/dev\/tty12 \r\n fi \r\nelse \r\n echo \"Permission denied\" \r\nfi<\/pre>\n<h2>Bash Script mit Cron St\u00fcndlich ausf\u00fchren<\/h2>\n<p>Wie bereits erw\u00e4hnt m\u00fcsst ihr das Script unter root ausf\u00fchren, da ihr sonst nicht die n\u00f6tigen Berechtigungen habt die Konfigurationsdatei zu modifizieren oder den FTP Dienst neu zu starten. Speichert das Script am besten im Root Ordner, damit das nicht verloren geht. Zum Beispiel unter \/root\/vasftp_IP.sh und kontrolliert nochmal \u00fcb ihr\u00a0eure eigene DynDNS Adresse eingef\u00fcgt habt.<\/p>\n<p>Wir m\u00f6chten auch das ausf\u00fchren dieses Scriptes automatisieren und benutzten dazu <a href=\"http:\/\/wiki.ubuntuusers.de\/Cron\" target=\"_blank\">Cronjobs<\/a>. Wechselt in root oder \u00f6ffnet mit diesem Befehl\u00a0die Cronjobs (m\u00f6glicherweise m\u00fcsst ihr noch den gew\u00fcnschten Editor definieren mit dem ihr diese Datei editieren wollt):<\/p>\n<pre>sudo crontab -e<\/pre>\n<p>Um das Skript St\u00fcndlich aus zu f\u00fchren f\u00fcgt die untere Zeile (die mit der 0 Beginnt), falls ihr das Script unter eiem anderen Namen oder nicht in \/root gespeichert habt m\u00fcsst ihr das auch anpassen:<\/p>\n<pre>#m h dom mon dow command\r\n0 * * * * \/root\/vsftpd_IP.sh<\/pre>\n<p>Und das wars, mit den Cronjobs wird das Script jede Stunde ausgef\u00fchrt und pr\u00fcft ob sich die Internet IP ge\u00e4ndert hat. Ist dies der Fall wird der Konfigurations Datei angepasst und der vsftp Dienst neu gestartet.Ich empfehle auch den SSH Port 22 in eurer Firewall frei zu geben, so das ihr\u00a0notfalls auch mit Putty oder ssh auf euren Server zugreifen k\u00f6nnt. Damit k\u00f6nnt ihr das Script manuell ausf\u00fchren oder sonstige Administrative arbeiten durchf\u00fchren.<\/p>\n<h3>Quellen:<\/h3>\n<ul>\n<li><a href=\"https:\/\/forums.gentoo.org\/viewtopic-t-282630-start-0.html\" target=\"_blank\">https:\/\/forums.gentoo.org\/viewtopic-t-282630-start-0.html<\/a><\/li>\n<li><a href=\"http:\/\/wiki.ubuntuusers.de\/sed\" target=\"_blank\">http:\/\/wiki.ubuntuusers.de\/sed<\/a><\/li>\n<li><a href=\"http:\/\/wiki.ubuntuusers.de\/dig\" target=\"_blank\">http:\/\/wiki.ubuntuusers.de\/dig<\/a><\/li>\n<li><a href=\"http:\/\/wiki.ubuntuusers.de\/vsftpd\" target=\"_blank\">http:\/\/wiki.ubuntuusers.de\/vsftpd<\/a><\/li>\n<li><a href=\"http:\/\/wiki.ubuntuusers.de\/Cron\" target=\"_blank\">http:\/\/wiki.ubuntuusers.de\/Cron<\/a><\/li>\n<li><a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-configure-vsftpd-to-use-ssl-tls-on-an-ubuntu-vps\" target=\"_blank\">https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-configure-vsftpd-to-use-ssl-tls-on-an-ubuntu-vps<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Nachdem mein letzter Heimserver das Zeitliche gesegnet hat, musste ich einen neuen aufsetzten und habe dies gleich zum Anlass genommen einiges anders zu machen. Mein alter Heimserver hatte einen FTP Server ohne SSL, was nat\u00fcrlich sehr einfach ist aber die &hellip; <a href=\"https:\/\/helgekoenig.de\/?p=2524\">Weiter<\/a><\/p>\n","protected":false},"author":5,"featured_media":2534,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[211],"tags":[170,415,414,416,173,195,412,413,172,411],"class_list":["post-2524","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-netzkultur-it-stuff","tag-bash","tag-crontab","tag-dyndns","tag-filezilla","tag-linux","tag-script","tag-ssl","tag-tls","tag-ubuntu","tag-vsftpd"],"_links":{"self":[{"href":"https:\/\/helgekoenig.de\/index.php?rest_route=\/wp\/v2\/posts\/2524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helgekoenig.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helgekoenig.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helgekoenig.de\/index.php?rest_route=\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/helgekoenig.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2524"}],"version-history":[{"count":1,"href":"https:\/\/helgekoenig.de\/index.php?rest_route=\/wp\/v2\/posts\/2524\/revisions"}],"predecessor-version":[{"id":2557,"href":"https:\/\/helgekoenig.de\/index.php?rest_route=\/wp\/v2\/posts\/2524\/revisions\/2557"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helgekoenig.de\/index.php?rest_route=\/wp\/v2\/media\/2534"}],"wp:attachment":[{"href":"https:\/\/helgekoenig.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helgekoenig.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helgekoenig.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}