Bonjour à tous !
J’ai utilisé mon vieux PC portable pour réaliser un serveur Debian, d’une part pour pratiquer et pour une utilisation perso avec mes amis, etc.
Au départ, j’avais cette machine sous un Virtualbox, mais j’ai tout refais sur cette machine physique, avec des améliorations.
L’une de ces “améliorations” est l’ajout des règles IPTables. J’ai suivis le tuto suivant : lafermeduweb.net/billet/tuto … .html#secu
Certes un peu vieillot, mais je trouve intéressant la manière de faire.
Mais voilà, après de longues heures de recherches, de modification de mon script dans tous les sens, en essayant de comprendre pourquoi, comment, je n’arrives toujours pas à faire fonctionner IPTables pour autoriser le FTP.
Je n’arrive plus du tout à accéder en FTP, mais tout le reste fonctionne.
Tout d’abord voici ma config de VSFTPD :
[code]# Example config file /etc/vsftpd.conf
The default compiled in settings are fairly paranoid. This sample file
loosens things up a bit, to make the ftp daemon more usable.
Please see vsftpd.conf.5 for all compiled in defaults.
READ THIS: This example file is NOT an exhaustive list of vsftpd options.
Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd’s
capabilities.
Run standalone? vsftpd can run either from an inetd or as a standalone
daemon started from an initscript.
listen=YES
Run standalone with IPv6?
Like the listen parameter, except vsftpd will listen on an IPv6 socket
instead of an IPv4 one. This parameter and the listen parameter are mutually
exclusive.
#listen_ipv6=YES
Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
Uncomment this to allow local users to log in.
local_enable=YES
Uncomment this to enable any form of FTP write command.
write_enable=YES
Default umask for local users is 077. You may wish to change this to 022,
if your users expect that (022 is used by most other ftpd’s)
local_umask=022
Uncomment this to allow the anonymous FTP user to upload files. This only
has an effect if the above global write enable is activated. Also, you will
obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
Uncomment this if you want the anonymous FTP user to be able to create
new directories.
#anon_mkdir_write_enable=YES
Activate directory messages - messages given to remote users when they
go into a certain directory.
dirmessage_enable=YES
If enabled, vsftpd will display directory listings with the time
in your local time zone. The default is to display GMT. The
times returned by the MDTM FTP command are also affected by this
option.
use_localtime=YES
Activate logging of uploads/downloads.
xferlog_enable=YES
Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
If you want, you can arrange for uploaded anonymous files to be owned by
a different user. Note! Using “root” for uploaded files is not
recommended!
#chown_uploads=YES
#chown_username=whoever
You may override where the log file goes if you like. The default is shown
below.
#xferlog_file=/var/log/vsftpd.log
If you want, you can have your log file in standard ftpd xferlog format.
Note that the default log file location is /var/log/xferlog in this case.
#xferlog_std_format=YES
You may change the default value for timing out an idle session.
#idle_session_timeout=600
You may change the default value for timing out a data connection.
#data_connection_timeout=120
It is recommended that you define on your system a unique user which the
ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
Enable this and the server will recognise asynchronous ABOR requests. Not
recommended for security (the code is non-trivial). Not enabling it,
however, may confuse older FTP clients.
#async_abor_enable=YES
By default the server will pretend to allow ASCII mode but in fact ignore
the request. Turn on the below options to have the server actually do ASCII
mangling on files when in ASCII mode.
Beware that on some FTP servers, ASCII support allows a denial of service
attack (DoS) via the command “SIZE /big/file” in ASCII mode. vsftpd
predicted this attack and has always been safe, reporting the size of the
raw file.
ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
You may specify a file of disallowed anonymous e-mail addresses. Apparently
useful for combatting certain DoS attacks.
#deny_email_enable=YES
(default follows)
#banned_email_file=/etc/vsftpd.banned_emails
You may restrict local users to their home directories. See the FAQ for
the possible risks in this before using chroot_local_user or
chroot_list_enable below.
chroot_local_user=YES
You may specify an explicit list of local users to chroot() to their home
directory. If chroot_local_user is YES, then this list becomes a list of
users to NOT chroot().
(Warning! chroot’ing can be very dangerous. If using chroot, make sure that
the user does not have write access to the top level directory within the
chroot)
chroot_local_user=NO
chroot_list_enable=YES
(default follows)
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
You may activate the “-R” option to the builtin ls. This is disabled by
default to avoid remote users being able to cause excessive I/O on large
sites. However, some broken FTP clients such as “ncftp” and “mirror” assume
the presence of the “-R” option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
Customization
Some of vsftpd’s settings don’t fit the filesystem layout by
default.
This option should be the name of a directory which is empty. Also, the
directory should not be writable by the ftp user. This directory is used
as a secure chroot() jail at times vsftpd does not require filesystem
access.
secure_chroot_dir=/var/run/vsftpd/empty
This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
This option specifies the location of the RSA certificate to use for SSL
encrypted connections.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
Ajout utilisateur
Message d’accueil
ftpd_banner=Bienvenue sur mon serveur FTP
Port
listen_port=2121
Monitoring
setproctitle_enable=YES
Users virtuels
guest_enable=YES
guest_username=www-data
user_config_dir=/etc/vsftpd/vsftpd_user_conf/
local_root=/var/www
Correction bug write chroot
allow_writeable_chroot=YES
Mode Passif
pasv_enable=YES
pasv_promiscuous=NO
pasv_addr_resolve=YES
pasv_address=DOMAINE_NOIP
port_promiscuous=NO
pasv_min_port=40000
pasv_max_port=40100[/code]
Mon fichier pour Iptables (firewall.sh) :
[code]#!/bin/bash
echo Setting firewall rules…
Debut Initialisation
Interdire toute connexion entrante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
echo - Interdire toute connexion entrante : [OK]
Interdire toute connexion sortante
iptables -t filter -P OUTPUT DROP
echo - Interdire toute connexion sortante : [OK]
Vider les tables actuelles
iptables -t filter -F
iptables -t filter -X
echo - Vidage : [OK]
#Ne pass casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
echo - Ne pas casser les connexions établies : [OK]
Autoriser la Supervision du serveur (SNMP)
iptables -t filter -A INPUT -p tcp --dport 161 -s 192.168.1.12/32 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 161 -s 192.168.1.12/32 -j ACCEPT
echo - Autoriser Supervision : [OK]
Autoriser les requetes DNS, FTP, HTTP, NTP
iptables -t filter -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 2121 -m state --state ESTABLISHED,NEW -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 40000:40100 -m state --state ESTABLISHED,NEW -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -m state --state ESTABLISHED,NEW -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
echo - Autoriser les requetes DNS, FTP, HTTP : [OK]
Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo - Autoriser loopback : [OK]
Autoriser ping
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
echo - Autoriser ping : [OK]
HTTP
iptables -t filter -A INPUT -p tcp --dport 80 -m state --state ESTABLISHED,NEW -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
echo - Autoriser serveur Apache : [OK]
FTP
modprobe ip_conntrack_ftp
iptables -t filter -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 2121 -m state --state ESTABLISHED,NEW -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 40000:40100 -m state --state ESTABLISHED,NEW -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
echo - Autoriser serveur FTP : [OK]
Autoriser SSH
iptables -t filter -A INPUT -p tcp --dport 666 -m recent --rcheck --seconds 60 --hitcount 2 --name SSH -j LOG --log-prefix "SSH REJECT"
iptables -t filter -A INPUT -p tcp --dport 666 -m recent --update --seconds 60 --hitcount 2 --name SSH -j DROP
iptables -t filter -A INPUT -p tcp --dport 666 -m state --state NEW -m recent --set --name SSH -j ACCEPT
echo - Autoriser SSH : [OK][/code]
Et l’erreur obtenu avec FTP :
Statut : Déconnecté du serveur
Statut : Résolution de l'adresse de chucky2401.zapto.org
Statut : Connexion à 192.168.1.15:2121...
Statut : Connexion établie, attente du message d'accueil...
Réponse : 220 Bienvenue sur mon serveur FTP
Commande : USER chucky
Réponse : 331 Please specify the password.
Commande : PASS *************
Réponse : 230 Login successful.
Commande : OPTS UTF8 ON
Réponse : 200 Always in UTF8 mode.
Statut : Connecté
Statut : Récupération du contenu du dossier...
Commande : CWD /
Réponse : 250 Directory successfully changed.
Commande : TYPE I
Réponse : 200 Switching to Binary mode.
Commande : PASV
Réponse : 227 Entering Passive Mode (127,0,0,1,156,148).
Commande : LIST
Erreur : La connexion des données ne peut pas être établie : ECONNREFUSED - Connection refused by server
Erreur : Affichage du contenu du dossier annulée par l'utilisateur
Statut : Déconnecté du serveur
En vous remerciant par avance pour votre aide.