Jump to content

Problème de configuration serveur FTP ?


Recommended Posts

Bonjour,

j'ai depuis peu un magnifique Raspberry Pi tournant sous Raspbian avec pour but d'apprendre l'administration système et serveur (et à terme d'en faire un serveur pour streamer de la musique à distance et pourquoi pas un serveur mail)

Un des premiers trucs que j'ai tenté, c'est de monter un serveur FTP utilisant TLS pour la sécurité via ProFTPd.

La connexion au serveur se fait sans problèmes (depuis FileZilla) sauf que... le LIST effectué en fin de connexion n'aboutit pas que je tente de me connecter en local (via l'ip de mon PI) ou en externe (depuis le boulot par exemple) :

Statut :	Connexion à 192.168.0.4:4687...Statut :	Connexion établie, attente du message d'accueil...Réponse :	220 Welcome to Shaft's FTP stranger !Commande :	AUTH TLSRéponse :	234 AUTH TLS successfulStatut :	Initialisation de TLS...Statut :	Vérification du certificat...Commande :	USER ShaftStatut :	Connexion TLS/SSL établie.Réponse :	331 Password required for ShaftCommande :	PASS **********************Réponse :	230 We don't like stangers 'round hereCommande :	SYSTRéponse :	215 UNIX Type: L8Commande :	FEATRéponse :	211-Features:Réponse :	 MDTMRéponse :	 AUTH TLSRéponse :	 UTF8Réponse :	 PBSZRéponse :	 PROTRéponse :	 SITE MKDIRRéponse :	 SITE RMDIRRéponse :	 SITE UTIMERéponse :	 LANG fr-FR.UTF-8;fr-FRRéponse :	 SITE SYMLINKRéponse :	 REST STREAMRéponse :	 SITE COPYRéponse :	 SIZERéponse :	211 EndCommande :	OPTS UTF8 ONRéponse :	200 UTF8 set to onCommande :	PBSZ 0Réponse :	200 PBSZ 0 successfulCommande :	PROT PRéponse :	200 Protection set to PrivateStatut :	ConnectéStatut :	Récupération du contenu du dossier...Commande :	PWDRéponse :	257 "/" is the current directoryCommande :	TYPE IRéponse :	200 Type set to ICommande :	PORT 192,168,0,1,213,238Réponse :	200 PORT command successfulCommande :	LISTErreur :	Délai d'attente expiréErreur :	Impossible de récupérer le contenu du dossier

Voici mon fichier /etc/proftpd/proftpd.conf

## /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.# To really apply changes, reload proftpd after modifications, if# it runs in daemon mode. It is not required in inetd/xinetd mode.# Include /etc/proftpd/modules.conf# To really apply changes reload proftpd after modifications.AllowOverwrite onAuthAliasOnly on# Masquerade for PASV modeMasqueradeAddress	adresse_ip_de_ma_ligneUseReverseDNS	offIdentLookups	off# Aliases accepted go hereUserAlias Shaft shaftftpServerName			"Shaft FTP"ServerType 			standaloneDeferWelcome			onMultilineRFC2228 onDefaultServer			onShowSymlinks			offTimeoutNoTransfer 600TimeoutStalled 100TimeoutIdle 2200DisplayChdir                    .messageListOptions                	"-l"RequireValidShell 		offTimeoutLogin 20RootLogin 			off# LogsExtendedLog 			/var/log/ftp.logTransferLog 			/var/log/xferlogSystemLog			/var/log/syslog.log#DenyFilter			\*.*/# Allow /etc/ftpusers file (set inside the users you want to ban) or notUseFtpUsers off# Allow to restart a downloadAllowStoreRestart		on# Port 21 is the standard FTP portPort				4687# Passive Ports for remote accessPassivePorts			60000 60100# To prevent DoS attacks, set the maximum number of child processes# to 30.  If you need to allow more than 30 concurrent connections# at once, simply increase this value.  Note that this ONLY works# in standalone mode, in inetd mode you should use an inetd server# that allows you to limit maximum number of processes per service# (such as xinetd)MaxInstances 8# Set the user and group that the server normally runs at.User                  nobodyGroup                 nogroup# Umask 022 is a good standard umask to prevent new files and dirs# (second parm) from being group and world writable.Umask				022	022PersistentPasswd		offMaxClients 8MaxClientsPerHost 8MaxClientsPerUser 8MaxHostsPerUser 8# Display a message after a successful loginAccessGrantMsg "We don't like stangers 'round here"# This message is displayed for each access good or notServerIdent                  on      "Welcome to Shaft's FTP stranger !"# Lock all the users in home directoryDefaultRoot ~MaxLoginAttempts    5#VALID LOGINS<Limit LOGIN>AllowUser shaftftpDenyALL</Limit><Directory /mnt/FTP_USB/FTP>Umask 022 022AllowOverwrite off	<Limit MKD STOR DELE XMKD RNRF RNTO RMD XRMD>	DenyAll	</Limit></Directory><Directory /mnt/FTP_USB/FTP/download/*>Umask 022 022AllowOverwrite off	<Limit MKD STOR DELE XMKD RNEF RNTO RMD XRMD>	DenyAll	</Limit></Directory><Directory /mnt/FTP_USB/FTP/upload/>Umask 022 022AllowOverwrite on	<Limit READ RMD DELE>      	AllowUser shaftftp	DenyAll    	</Limit>    	<Limit STOR CWD MKD>      	AllowAll    	</Limit></Directory><IfModule mod_tls.c>    TLSEngine on    TLSLog /var/ftpd/tls.log    TLSProtocol TLSv1    # Are clients required to use FTP over TLS when talking to this server?    TLSRequired on    TLSOptions NoSessionReuseRequired    # Server's certificate    TLSRSACertificateFile /etc/ftpcert/server.crt    TLSRSACertificateKeyFile /etc/ftpcert/server.key    # CA the server trusts    TLSCACertificateFile /etc/ftpcert/ca.crt    # Authenticate clients that want to use FTP over TLS?    TLSVerifyClient off</IfModule><IfModule mod_facts.c>   FactsAdvertise off</IfModule>

A noter que :

- mon routeur est bien configuré (forward du port 4687 vers 4687 en TCP)

- si je désactive PassivePorts et la masquerade, la connexion passe bien en local, ce qui est bien mais c'est pas trop le but de la chose :D

- iptables est vierge de toutes règles (en attendant que ça marche)

- que je suis un gros n00b en la matière :transpi:

Mon fichier conf est-il correct ? Faut-il quand même dire à iptables comment faire le boulot ? Obiwan Kenobi ?

Merci d'avance ! :chinois:

Link to post
Share on other sites

@dudul88 : Cette commande sert à empêcher les clients d'aller fourrer leur nez ailleurs que dans /mnt/FTP_USB/FTP. Si je venais à mettre DefaultRoot /, le répertoire racine du serveur serait / :chinois:

@coyotedef : Nope, le problème est le même si je passe par le port 21 :|

Link to post
Share on other sites

Quand je vois ça :

AllowOverwrite on	<Limit READ RMD DELE>      	AllowUser shaftftp	DenyAll    	</Limit>

Et ça :

Commande :	AUTH TLSRéponse :	234 AUTH TLS successfulStatut :	Initialisation de TLS...Statut :	Vérification du certificat...Commande :	USER ShaftStatut :	Connexion TLS/SSL établie.Réponse :	331 Password required for ShaftCommande :	PASS **********************Réponse :	230 We don't like stangers 'round here

Je me dis qu'il y a un bug sur la définition des droits pour l'utilisateur, mais comme j'ai jamais autant restreints les utilisateurs sur un Proftpd, je me trompe peut-être. (Shaft dans le log, shaftftp dans la config, du coup probablement n'active-t-il pas les bonnes règles)

Link to post
Share on other sites

Pour cette histoire Shaft vs shaftftp, oui c'est voulu. Shaft est l'alias de l'utilisateur (histoire que, même avec du TLS, le nom de l'utilisateur de la machine ne se ballade pas sur le réseau - quand bien même cet utilisateur a peau d'zob niveau droits :D) , c'est réglé par "UserAlias Shaft shaftftp" dans la conf. :chinois:

Le serveur marche très bien en local si je désactive "MasqueradeAddress adresse_ip_de_ma_ligne" et les ports pour le mode passif. (C'est pour ça que je m'interroge aussi sur mon routeur et iptables) Sauf qu'en local, j'ai déjà samba ou le sftp du SSH pour échanger des fichiers entre mes machines :D

Link to post
Share on other sites

Avec les ports pour le mode passif (laisse tomber le masqueradeAddress, je pense que ça chie avec le NAT), et le mode passif activé dans ton client (oui, ça m'est arrivé une paire de fois d'oublier), il se passe quoi ?

Link to post
Share on other sites

Le masquerade address te perd dans ton flux a cause de ton Nat.

Tu peux a la rigueur creer un virtualhost avec si reellement tu en as besoin mais ton serveur FTP ne porte pas ton adresse externe. Cela fonctionnerai si tu le mettait en DMZ, devant ton routeur.

Link to post
Share on other sites

@seboss666 : marche en local et pas en externe dans ce cas

Mais en mettant le Pi dans la DMZ (obligé de le faire comme d'hab en telnet sur le routeur en mousse filé par OVH :transpi:), ça marche ! :youhou: (avec ou sans MasqueradeAdress)

Merci à tous! :youhou::chinois:

Link to post
Share on other sites

Oui, je l'ai stoppé en attendant de maitriser iptables (c'est pas pour tout de suite :transpi:). A noter que je suis pas fou, j'ai aussi fail2ban qui tourne. Selon ce que j'ai lu, il marche très bien "out of the box", mais je suis sûr qu'il y a moyen d'affiner

Link to post
Share on other sites

Oui, j'ai du activer 2-3 trucs dans le jail.conf de fail2ban, mais c'est pas la mort en termes de paramètrage :chinois:

Bon sinon après avoir éplucher quelque tutos, j'ai fait un script pour iptables qui se lance au démarrage :

#!/bin/sh# Vider les tables actuellesiptables -t filter -F# Vider les règles personnellesiptables -t filter -X# Interdire toute connexion entrante et sortanteiptables -t filter -P INPUT DROPiptables -t filter -P FORWARD DROPiptables -t filter -P OUTPUT DROP# ---# Ne pas casser les connexions etabliesiptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT# Autoriser loopbackiptables -t filter -A INPUT -i lo -j ACCEPTiptables -t filter -A OUTPUT -o lo -j ACCEPT# ICMP (Ping)iptables -t filter -A INPUT -p icmp -j ACCEPTiptables -t filter -A OUTPUT -p icmp -j ACCEPT# ---# SSH Iniptables -t filter -A INPUT -p tcp --dport 2222 -j ACCEPT# SSH Outiptables -t filter -A OUTPUT -p tcp --dport 2222 -j ACCEPT# DNS In/Out - On active que le TCP pour l'intantiptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPTiptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPTiptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPTiptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT# NTP Outiptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT# FTP Outiptables -t filter -A OUTPUT -p tcp --dport 4687 -j ACCEPT# FTP Inmodprobe ip_conntrack_ftpiptables -t filter -A INPUT -p tcp --dport 4687 -j ACCEPTiptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -t filter -A INPUT -m state --state NEW -p tcp --dport 60000:60100 -j ACCEPT#Samba Iniptables -t filter -A INPUT -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPTiptables -t filter -A INPUT -p tcp -s 192.168.0.0/24 --dport 445 -j ACCEPTiptables -t filter -A INPUT -p udp -s 192.168.0.0/24 --dport 137 -j ACCEPTiptables -t filter -A INPUT -p udp -s 192.168.0.0/24 --dport 138 -j ACCEPTiptables -t filter -A INPUT -p udp -s 192.168.0.0/24 --dport 445 -j ACCEPT# Samba Outiptables -t filter -A OUTPUT -p tcp --dport 139 -j ACCEPTiptables -t filter -A OUTPUT -p tcp --dport 445 -j ACCEPTiptables -t filter -A OUTPUT -p udp --dport 137 -j ACCEPTiptables -t filter -A OUTPUT -p udp --dport 138 -j ACCEPTiptables -t filter -A OUTPUT -p udp --dport 445 -j ACCEPT# Mail a activer le jour où ça tournera# Mail SMTP:25# iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT# iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT# Mail POP3:110# iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT# iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT# Mail IMAP:143# iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT# iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT# Mail POP3S:995# iptables -t filter -A INPUT -p tcp --dport 995 -j ACCEPT# iptables -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT



Ça semble correct en termes de sécurité (oui, j'ai modifié le port pour ssh :parano: :D) ?

Link to post
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...