<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.paradoxal.org/blog/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Blog Blog - Balise - Iptables</title>
  <link>http://www.paradoxal.org/blog/</link>
  <atom:link href="http://www.paradoxal.org/blog/feed/tag/Iptables/rss2" rel="self" type="application/rss+xml"/>
  <description>Blogblog vous propose  un aide mémoire d'un développeur PHP / Mysql passionné par l'administration Linux. Seza - son autheur - vous met donc à disposition ses astuces, les mauvais moments et difficultés rencontrées mais aussi ses connaissances.
Même si ce blog s'oriente très clairement vers les lignes de code illisibles pour nombreux d'entre vous, actualité, coup de gueule et information sur les technos du moment ne seront pas absentes. Bonne visite !</description>
  <language>fr</language>
  <pubDate>Thu, 21 Aug 2008 19:06:04 +0200</pubDate>
  <copyright>licence creative commons</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Serveur Debian - versionning de fichiers</title>
    <link>http://www.paradoxal.org/blog/post/2007/08/05/Serveur-Debian-versionning-de-fichier</link>
    <guid isPermaLink="false">urn:md5:67d10e064c4532d53a0b02b641c9f6fd</guid>
    <pubDate>Tue, 04 Sep 2007 21:22:00 +0200</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Serveur Debian</category>
        <category>Iptables</category><category>Linux</category><category>Subversion</category><category>SVN</category><category>Utilisateurs virtuels</category>    
    <description>&lt;p&gt;&lt;strong&gt;CHAPITRE 9&amp;nbsp;: Subversion&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Subversion ou autrement dit SVN est un outil bien agréable et utile pour les développeurs ou toutes personnes souhaitant versionnés des fichiers.&lt;/p&gt;


&lt;p&gt;SVN, pour rappel, remplace avantageusement CVS - sûrement le logiciel le plus connu -. Je ne présenterais pas comment on utilise SVN car si vous êtes intéressé et que vous êtes là vous avez déjà trouvez sûrement beaucoup de tutoriaux concernant se sujet.&lt;/p&gt;


&lt;p&gt;Passons à l'installation&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo -i
Password:
bebevserv:~# apt-get update
[...]
bebevserv:~# apt-get upgrade
[...]
apt-get install subversion subversion-tools
[...]
&lt;/pre&gt;


&lt;p&gt;C'est presque terminé&amp;nbsp;!
Il nous faut créer un repository&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# cd /var
bebeserv:/var# mkdir svn
bebeserv:/var# cd svn
&lt;/pre&gt;


&lt;p&gt;Voilà ici sera donc entreposé nos projet.
Créons-en un pour l'exemple&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/svn# svnadmin --fs-type fsfs create mon_projet
&lt;/pre&gt;


&lt;p&gt;Rien de plus simple.
Maintenant créons un modèle à importer de base dans notre projet avec les clasiques dossier &lt;q&gt;« trunk »&lt;/q&gt;, «&amp;nbsp;branches »}} et &lt;q&gt;« tags »&lt;/q&gt;.&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/svn# mkdir bases
bebeserv:/var/svn# cd bases
bebeserv:/var/svn# mkdir trunk branches tags
bebeserv:/var/svn# cd ..
bebeserv:/var/svn# svn import -m &amp;quot;Import des dossiers commum&amp;quot; /var/svn/bases/ file:///var/svn/mon_projet
&lt;/pre&gt;


&lt;p&gt;Voilà nous avons un dossier &lt;q&gt;« bases »&lt;/q&gt; qui nous resservira sûrement plus tard et las commande &lt;q&gt;« svnadmin »&lt;/q&gt; avait créer un répertoire avec tout ce dont SVN à besoin pour fonctionner et entreposé les fichiers. D'ailleurs nous allons faire un tour dans la configuration de ce projet pour voir rapidement comment sont géré les utilisateurs&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/svn# cd mon_projet/conf
&lt;/pre&gt;


&lt;p&gt;Paramétrons d'abord le comportement du serveur SVN associé à ce projet&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/svn/mon_projet/conf# nano svnserve.conf
&lt;/pre&gt;

&lt;pre&gt;
general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = Subversion bebeserv.bebenet.local repository
&lt;/pre&gt;


&lt;p&gt;Voilà rien n'est autorisé pour les utilisateur anonyme (même pas la lecture) et les utilisateur authentifié auront le droit d'écrire dans le projet au mieux.
Pourquoi au mieux car l'on peut préciser les droits d'accès utilisateurs par utilisateurs (ou par groupe d'utilisateur) grâce au fichier &lt;q&gt;« passwd »&lt;/q&gt; et &lt;q&gt;« authz »&lt;/q&gt;.&lt;/p&gt;


&lt;p&gt;Passwd pour créer les utilisateurs&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/svn/mon_projet/conf# nano passwd
&lt;/pre&gt;

&lt;pre&gt;
users]
user = password
user2 = password_2
user3 = password_3
&lt;/pre&gt;


&lt;p&gt;Enregistrez ainsi simplement votre fichier d'utilisateur.&lt;/p&gt;


&lt;p&gt;Authz pour préciser les droits des utilisateurs&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/svn/mon_projet/conf# nano authz
&lt;/pre&gt;

&lt;pre&gt;
groups]
les_autres = user2, user3

[mon_projet:/]
user = rw
@les_autres = r

[mon_projet:/trunk/dir/section_modifiable]
@les_autres = rw
&lt;/pre&gt;


&lt;p&gt;Voilà un petit exemple assez concis. Tout d'abord &lt;q&gt;« user2 »&lt;/q&gt; et &lt;q&gt;« user3 »&lt;/q&gt; sont mis dans un groupe &lt;q&gt;« les_autres »&lt;/q&gt;. Pour la racine de notre projet  le groupe à le droit unique de lecture. Pour le dossier &lt;q&gt;« trunk/dir/section_modifiable »&lt;/q&gt; le groupe aura le droit d'écrire.
L'utilisateur &lt;q&gt;« user »&lt;/q&gt; quand à lui à le droit d'écriture partout.&lt;/p&gt;


&lt;p&gt;Voilà c'est fini pour la configuration. Il vous reste à démarrer le serveur SVN.
Pour ceci j'ai encore fait un petit script&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/svn/mon_projet/conf#cd /etc/init.d
bebeserv:/etc/init.d# nano svn
&lt;/pre&gt;


&lt;p&gt;Entrez ceci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
#! /bin/sh
set -e

case &amp;quot;$1&amp;quot; in
  start)
        echo -n &amp;quot;Starting svnserve&amp;quot;
        svnserve -d -r /var/svn
        echo &amp;quot;.&amp;quot;
        ;;
  stop)
        echo -n &amp;quot;Terminating svnserve&amp;quot;
        pid=`ps -C svnserve -o pid=`
        kill -HUP $pid
        echo &amp;quot;.&amp;quot;
        ;; 
  restart)
        echo -n &amp;quot;Terminating svnserve&amp;quot;
        pid=`ps -C svnserve -o pid=`
        kill -HUP $pid
        echo &amp;quot;.&amp;quot;
        echo -n &amp;quot;Starting svnserve&amp;quot;
        svnserve -d -r /var/svn
        echo &amp;quot;.&amp;quot;
       ;; 
  *)
        echo &amp;quot;Usage: /etc/init.d/svn {start|stop|restart}&amp;quot;
        exit 1
esac

exit 0
&lt;/pre&gt;


&lt;blockquote&gt;&lt;p&gt;UPDATE&amp;nbsp;: Un grand merci pour la contribution de &quot; le père Léon &quot; qui m'a permi de mettre à jour le script de démarrage, en ajoutant le cas STOP. (le RESTART en découle forcément)&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;&lt;del&gt;A l'heure actuel je n'est pas trouver comment arrêter proprement le serveur.&lt;/del&gt;
Mettez les bons droits d'accès et faîtes un &lt;q&gt;« update-rc.d »&lt;/q&gt; pour lancer ce script au démarrage du serveur.&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/init.d# chmod 755 svn
bebeserv:/etc/init.d# update-rc.d svn start 98 2 3 4 5 .
&lt;/pre&gt;


&lt;p&gt;Démarrez finalement le serveur pour finir cette session&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/init.d# /etc/init.d/svn start
&lt;/pre&gt;


&lt;p&gt;N'oubliez pas votre firewall&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/init.d# nano /etc/network/iptables
&lt;/pre&gt;

&lt;pre&gt;
iptables -t filter -A INPUT -i eth0 -p tcp --dport 3690 -d $MYIP -j ACCEPT
iptables -t filter -A OUTPUT -i eth0 -p tcp --dport 3690 -s $MYIP -j ACCEPT
&lt;/pre&gt;

&lt;pre&gt;
bebeserv:/etc/init.d# /etc/init.d/iptables-conf restart
&lt;/pre&gt;


&lt;p&gt;C'est fini =)
A très bientôt&amp;nbsp;!&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/init.d# exit
logout
ALBAN@bebeserv:~$
&lt;/pre&gt;</description>
    
    
    
          <comments>http://www.paradoxal.org/blog/post/2007/08/05/Serveur-Debian-versionning-de-fichier#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2007/08/05/Serveur-Debian-versionning-de-fichier#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/53</wfw:commentRss>
      </item>
    
  <item>
    <title>Serveur Debian - Serveur email (MTA + MDA)</title>
    <link>http://www.paradoxal.org/blog/post/2007/08/05/Serveur-Debian-Serveur-email-MTA-MDA</link>
    <guid isPermaLink="false">urn:md5:19570fd3b6c6e5d032f01c4ca9e17b4e</guid>
    <pubDate>Tue, 07 Aug 2007 10:20:00 +0200</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Serveur Debian</category>
        <category>IMAP</category><category>Iptables</category><category>Linux</category><category>Posfix</category><category>SASL</category><category>SMTP</category><category>SSL</category><category>Userdb</category><category>Utilisateurs virtuels</category>    
    <description>&lt;p&gt;&lt;strong&gt;CHAPITRE 7&amp;nbsp;: POSTFIX &amp;amp; COURRIER-IMAP&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Postfix est certainement un des meilleurs serveurs d'e-mail existant, c'est pourquoi mon choix se porte sur celui-ci. Le sujet des e-mails est un sujet compliqué ou les documentations sont nombreuses et confusent assez souvent, je n'en ferai aujourd'hui toujours pas ma spécialité. Je vais donc ne pas m'étendre sur ce sujet.&lt;/p&gt;


&lt;p&gt;Nous voulons ici créer un serveur MX principal qui recevra nos mails et les enverra au reste du monde. Nous souhaitons pouvoir envoyé des e-mails depuis ce serveur depuis n'importe où. Dans cette configuration pour ne pas finir en open relay, il n'y a que l'authentification SMTP qui puisse nous protégé de ceci. J'ai testé auparavant le pop-before-smtp qui permet d'en faire autant mais ce n'est qu'un bricolage face à l'authentification SMTP. C'est pourquoi ici on fera une véritable authentification bien sur avec un peu de SSL.&lt;/p&gt;


&lt;p&gt;Commençons par installer Postfix et ce qui sera nécessaire à l'authentification SMTP.&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo -i
Password:
bebeserv:~# apt-get update
[...]
bebeserv:~# apt-get install postfix libsasl2-modules sasl2-bin
[...]
&lt;/pre&gt;


&lt;p&gt;L'installateur vous pose deux questions pour la configuration de Postfix. Répondez à la première &quot;Site internet&quot; et laisser la seconde qui devrait ressembler à &lt;q&gt;« bebeserv.bebenet.local »&lt;/q&gt; tel quel.&lt;/p&gt;


&lt;p&gt;Maintenant que c'est fait, stoppez Postfix&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# /etc/init.d/postfix stop
[...]
&lt;/pre&gt;


&lt;p&gt;Maintenant configurons notre serveur d'e-mail&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# cd /etc/postfix
bebeserv:/etc/postfix# nano main.cf
&lt;/pre&gt;


&lt;p&gt;Afin de garantir la sécurité du MTA faisons le passer pour un serveur Sendmail (un concurrent plus ancien)&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
mail_name = Sendmail
mail_version = 8.12.10
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
&lt;/pre&gt;


&lt;p&gt;Maintenant quelques fonctionnalités et configuration&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
append_dot_mydomain = yes
mynetwork_style = host
proxy_interfaces = 10.0.0.1
relay_domains=
masquerade_domains = bebenet.local
local_transport = virtual:$myhostname
&lt;/pre&gt;


&lt;p&gt;Les utilisateurs virtuels&lt;/p&gt;

&lt;pre&gt;
virtual_alias_domains = hash:/etc/postfix/conf.d/virtual_alias_domains
virtual_alias_maps = hash:/etc/postfix/conf.d/virtual_alias
virtual_mailbox_domains = hash:/etc/postfix/conf.d/virtual_mailbox_domains
virtual_mailbox_base = /var/mail/virtual
virtual_mailbox_maps = hash:/etc/postfix/conf.d/virtual_mailbox
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
&lt;/pre&gt;


&lt;p&gt;Encore un peu de sécurité et pour l'authentification SMTP&lt;/p&gt;

&lt;pre&gt;
smtp_helo_timeout = 10s
smtpd_recipients_limit = 16
smtpd_soft_error_limit = 3
smtpd_hard_error_limit = 12
smtpd_helo_required = yes
smtpd_delay_reject = yes
disable_vrfy_command = yes
strict_rfc821_envelopes = yes

broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous


smtpd_helo_restrictions = 
	permit_mynetworks, 
	reject_invalid_hostname, 
	reject_unknown_hostname,
	reject_non_fqdn_hostname

smtpd_client_restrictions =
   sleep 1, 
   reject_unauth_pipelining
   
smtpd_recipient_restrictions =
	permit_mynetworks,
	permit_sasl_authenticated,
	reject_invalid_hostname,
	reject_unauth_destination,
	reject_unknown_sender_domain,
	reject_unknown_recipient_domain,
	reject_non_fqdn_recipient

smtpd_sender_restrictions =
	reject_unknown_sender_domain,
	reject_non_fqdn_sender,
&lt;/pre&gt;

&lt;pre&gt;&lt;/pre&gt;

&lt;p&gt;Pour le SSL&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
smtpd_use_tls=yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Générons directement les nouveaux certificats SSL pour Postfix&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix# openssl req -new -outform PEM -out /etc/postfix/smtpd.cert -newkey rsa:2048 -nodes -keyout /etc/postfix/smtpd.key -keyform PEM -days 365 -x509
bebeserv:/etc/postfix# chmod 640 smtpd.key
&lt;/pre&gt;


&lt;p&gt;Le fait d'utiliser Sasl (un serveur d'authentification) nous impose de lui montré comment nous souhaitons authentifier les utilisateurs&amp;nbsp;:
Pour ceci nous créons comme précisé par notre configuration&amp;nbsp;: &lt;q&gt;« smtpd_sasl_path »&lt;/q&gt; le fichier &lt;q&gt;« /etc/postfix/sasl/smtpd.conf »&lt;/q&gt;&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix# cd sasl
bebeserv:/etc/postfix/sasl# nano smtpd.conf
&lt;/pre&gt;


&lt;p&gt;Entrez ceci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
pwcheck_method: saslauthd
mech_list: plain login
&lt;/pre&gt;


&lt;p&gt;Enregistrer et quitter.
Visiblement la commande suivante est utile pour remédier à une histoire de bug...&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix/sasl# ln -s /etc/postfix/sasl/smtpd.conf /usr/lib/sasl2/smtpd.conf 
&lt;/pre&gt;


&lt;p&gt;Éditez le fichier de configuration de Sasl&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix/sasl# nano /etc/default/saslauthd
&lt;/pre&gt;


&lt;p&gt;Modifier les lignes suivantes&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
START=yes
MECHANISMS=&amp;quot;rimap&amp;quot;
MECH_OPTIONS=&amp;quot;localhost&amp;quot;
OPTIONS=&amp;quot;-r -c -m /var/spool/postfix/var/run/saslauthd&amp;quot;
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quitter.
Maintenant ajoutons l'utilisateur Postfix au groupe Sasl et faisons en sorte que Sasl puisque créer ses fichiers dans la cage de postfix (ça aussi ça ne s'invente pas)&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix/sasl# dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd
bebeserv:/etc/postfix/sasl# adduser postfix sasl
[...]
&lt;/pre&gt;


&lt;p&gt;Maintenant il va falloir alimenter les différentes bases de Postfix&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix/sasl# cd ..
bebeserv:/etc/postfix# mkdir conf.d
bebeserv:/etc/postfix# cd conf.d
bebeserv:/etc/postfix/conf.d# nano virtual_mailbox_domains
&lt;/pre&gt;


&lt;p&gt;Entrez&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv.local	x
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quitter.&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix/conf.d# nano virtual_mailbox
&lt;/pre&gt;


&lt;p&gt;Entrez&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
test@bebeserv.local	bebeserv.local/test/
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quitter.&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix/conf.d# nano virtual_alias
&lt;/pre&gt;


&lt;p&gt;Entrez&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
postmaster@bebeserv.local	test@bebeserv.local
hostmaster@bebeserv.local	test@bebeserv.local
webmaster@bebeserv.local	test@bebeserv.local
www@bebeserv.local	test@bebeserv.local
ALBAN@bebeserv.local	test@bebeserv.local
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quitter.&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix/conf.d# nano virtual_alias_domains
&lt;/pre&gt;


&lt;p&gt;Entrez&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
localhost	bebeserv.local
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quitter.
Créons maintenant les bases compilées à l'aide de &lt;q&gt;« postmap »&lt;/q&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix/conf.d# postmap virtual_alias
bebeserv:/etc/postfix/conf.d# postmap virtual_alias_domains
bebeserv:/etc/postfix/conf.d# postmap virtual_mailbox
bebeserv:/etc/postfix/conf.d# postmap virtual_mailbox_domains
&lt;/pre&gt;


&lt;p&gt;Redirigeons &lt;q&gt;« root »&lt;/q&gt; qui est normalement alias de tous les autres démon vers notre utilisateur principal&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix/conf.d# nano /etc/aliases
&lt;/pre&gt;


&lt;p&gt;Entrez à la fin du fichier&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
root:	ALBAN
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Remettons, de la même manière que les autres tables, celle-ci à jour&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix/conf.d# postalias /etc/aliases
&lt;/pre&gt;

&lt;p&gt;
Créons l'utilisateur et le groupe &lt;q&gt;« virtual »&lt;/q&gt; et le dossier des boites e-mail virtuelles&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/postfix/conf.d# cd /var/mail
bebeserv:/var/mail# mkdir virtual	
bebeserv:/var/mail# groupadd -g 5000 virtual
bebeserv:/var/mail# useradd -u 5000 -g virtual -d /var/mail/virtual -s /usr/sbin/nologin virtual
bebeserv:/var/mail# chown virtual.virtual virtual
&lt;/pre&gt;


&lt;p&gt;Parfait&amp;nbsp;! Maintenant Postfix est fonctionnel et bien configuré. Nous l'avons configuré de sorte que les e-mails émis par les utilisateurs locaux soit traiter par le relay virtual, que localhost soit assimilé à notre domaine, que les sous domaines de notre domaine soit assimilé à notre domaine. Il ne nous reste plus qu'à installer un client IMAP pour lire nos messages.&lt;/p&gt;


&lt;p&gt;Installons &lt;q&gt;« courier-imap-ssl »&lt;/q&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/mail# apt-get install courier-imap-ssl
&lt;/pre&gt;


&lt;p&gt;Stoppons les serveur nouvellement installés&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/mail# /etc/init.d/courier-authdaemon stop
[...]
bebeserv:/var/mail# /etc/init.d/courier-imap stop
[...]
bebeserv:/var/mail# /etc/init.d/courier-imap-ssl stop
[...]
&lt;/pre&gt;


&lt;p&gt;Regénérons un certificat propre à notre domaine pour IMAP&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/mail# cd /etc/courier
bebeserv:/etc/courier# rm imapd.pem
bebeserv:/etc/courier# nano imapd.cnf
&lt;/pre&gt;


&lt;p&gt;Modifiez ceci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
[ req_dn ]
C=FR
ST=FRANCE
L=Paris
O=Courier Mail Server
OU=IMAP SSL key
CN=imap.bebenet.local
emailAddress=postmaster@bebenet.local
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Maintenant créons un beau certificat&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/courier# dpkg-reconfigure courier-imap-ssl
[...]
&lt;/pre&gt;


&lt;p&gt;Ceci fait, ré-arretons le serveur qui a été redémarrer et configurons l'authentification (ici authdaemon à ne pas confondre avec saslauthd)&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/courier# /etc/init.d/courier-imap-ssl stop
[...]
bebeserv:/etc/courier# nano authdaemonrc
&lt;/pre&gt;


&lt;p&gt;Modifiez cette ligne&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
authmodulelist=&amp;quot;authuserdb&amp;quot;
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Maintenant nous allons créer la base des utilisateurs qui vont pouvoir se connecter à IMAP. Pour simplifier les choses je vous ai concocté un petit script:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/courier# mkdir userdb
bebeserv:/etc/courier# chmod 0000 userdb
bebeserv:/etc/courier# nano userdb-utils
&lt;/pre&gt;


&lt;p&gt;Entrez ceci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
#!/bin/bash
cd /etc/courier
case &amp;quot;$1&amp;quot; in
add)
	if [ $# -lt 2 ]; then
		echo &amp;quot;Usage: ./userdb-utils add user@domain.tld&amp;quot;
		exit 1
	fi
	EMAIL=$2
	DIR=/var/mail/virtual
	USER=$(echo $EMAIL | cut -d@ -f1)
	DOMAIN=$(echo $EMAIL | cut -d@ -f2)
	userdb $DOMAIN/$EMAIL set mail=$DIR/$DOMAIN/$USER home=$DIR/$DOMAIN/$USER uid=5000 gid=5000
	userdbpw -md5 | userdb $DOMAIN/$EMAIL set systempw
	makeuserdb
	;;
del)
	if [ $# -lt 2 ]; then
		echo &amp;quot;Usage: ./userdb-utils del user@domain.tld&amp;quot;
		exit 1
	fi
	TODAY=$(date +%Y%m%d)
	FILE=/tmp/userdbcreate$TODAY
	EMAIL=$2
	USER=$(echo $EMAIL | cut -d@ -f1)
	DOMAIN=$(echo $EMAIL | cut -d@ -f2)
	DB=/etc/courier/userdb/$DOMAIN
	sed -e /^$EMAIL/d $DB &amp;gt; $FILE
	rm $DB
	mv $FILE $DB
	makeuserdb
	;;
list)
	authenumerate
	;;
*)
	echo &amp;quot;Usage: ./userdb-utils {add|del|list} [user@domain.tld]&amp;quot;
	exit 1
esac
exit 0
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Maintenant rendons notre script exécutable et disponible dans notre banque de script&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/courier# chmod 700 userdb-utils
bebeserv:/etc/courier# ln -s userdb-utils /usr/local/bin/
&lt;/pre&gt;


&lt;p&gt;Ok, créons deux utilisateurs pour voir comment ceci fonctionne&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/courier# ./userdb-utils add test@bebenet.local
Password :
[...]
bebeserv:/etc/courier# ./userdb-utils add test2@bebenet.local
Password :
[...]
bebeserv:/etc/courier# ./userdb-utils list
[...]
bebeserv:/etc/courier# ./userdb-utils del test2@bebenet.local
bebeserv:/etc/courier# ./userdb-utils list
[...]
&lt;/pre&gt;

&lt;p&gt;
C'est terminé.
Il reste à mettre à jour &lt;q&gt;« iptables »&lt;/q&gt;&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/courier# nano /etc/network/iptables
&lt;/pre&gt;


&lt;p&gt;Rajouter ces lignes&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
iptables -t filter -A INPUT -i eth0 -p tcp --dport 25 -d $MYIP -j ACCEPT
iptables -t filter -A INPUT -i eth0 -p tcp --dport 993 -d $MYIP -j ACCEPT

iptables -t filter -A OUTPUT -o eth0 -p tcp --dport 25 -s $MYIP -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 25 -s $MYIP -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p tcp --dport 993 -s $MYIP -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 993 -s $MYIP -j ACCEPT
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;Redémarrons les serveurs&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/mail# /etc/init.d/iptables-conf restart
bebeserv:/var/mail# /etc/init.d/postfix start
bebeserv:/var/mail# /etc/init.d/courier-authdaemon start
bebeserv:/var/mail# /etc/init.d/courier-imap-ssl start
bebeserv:/var/mail# /etc/init.d/courier-imap start
&lt;/pre&gt;


&lt;p&gt;Et voilà&amp;nbsp;! Nos utilisateurs doivent se loguer forcément en IMAP et en SMTP le tout couvert du SSL.&lt;/p&gt;


&lt;p&gt;Prochain chapitre on ajoute un antivirus et un antispam&amp;nbsp;!&lt;/p&gt;

&lt;pre&gt;
bebeserv:/var/mail# exit
logout
ALBAN@bebeserv:~$
&lt;/pre&gt;</description>
    
          <enclosure url="http://www.paradoxal.org/blog/public/tuto_debian/chapitre_7.pdf"
      length="101673" type="application/pdf" />
    
    
          <comments>http://www.paradoxal.org/blog/post/2007/08/05/Serveur-Debian-Serveur-email-MTA-MDA#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2007/08/05/Serveur-Debian-Serveur-email-MTA-MDA#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/51</wfw:commentRss>
      </item>
    
  <item>
    <title>Serveur Debian - vsftpd</title>
    <link>http://www.paradoxal.org/blog/post/2007/06/02/Serveur-Debian-vsftpd</link>
    <guid isPermaLink="false">urn:md5:0c76c9467f5d4106be38c8186df6326b</guid>
    <pubDate>Sat, 02 Jun 2007 18:28:00 +0200</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Serveur Debian</category>
        <category>Fail2ban</category><category>FTP</category><category>FTPS</category><category>Iptables</category><category>Linux</category><category>Openssl</category><category>PAM</category><category>SFTP</category><category>SSH</category><category>SSL</category><category>Sécurité</category><category>Userdb</category><category>Utilisateurs virtuels</category><category>Vsftpd</category>    
    <description>&lt;p&gt;&lt;strong&gt;CHAPITRE 3&amp;nbsp;: &lt;a href=&quot;http://www.paradoxal.org/blog/tag/FTP&quot;&gt;FTP&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Commençons par installer le serveur FTP&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo -i
Password:
bebeserv:~# apt-get update
[...]
bebeserv:~# apt-get install vsftpd libdb3-util ftp
[...]
&lt;/pre&gt;


&lt;p&gt;L'installateur créé automatiquement un utilisateur &lt;q&gt;« ftp »&lt;/q&gt; qui à le groupe &lt;q&gt;« nogroup »&lt;/q&gt; et le dossier &lt;q&gt;« /home/ftp »&lt;/q&gt; pour cet utilisateur.
Nous allons changer tout ça, et de plus vu que de base &lt;q&gt;« &lt;a href=&quot;http://www.paradoxal.org/blog/tag/vsftp&quot;&gt;vsftp&lt;/a&gt; »&lt;/q&gt; autorise les connexions anonymes par défaut, même si &lt;q&gt;« &lt;a href=&quot;http://www.paradoxal.org/blog/tag/iptables&quot;&gt;iptables&lt;/a&gt; »&lt;/q&gt; ne laissera rien passer, c'est un bon reflex de couper le serveur en attendant sa configuration finale.&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# /etc/init.d/vsftpd stop
[...]
&lt;/pre&gt;


&lt;p&gt;Nous allons d'abord nettoyer un peu ce que &lt;q&gt;« vsftpd »&lt;/q&gt; à créer automatiquement&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# userdel ftp
bebeserv:~# rmdir /home/ftp
&lt;/pre&gt;


&lt;p&gt;Je vais conserver le groupe &lt;q&gt;« nogroup »&lt;/q&gt; et utiliser l'utilisateur &lt;q&gt;« nobody »&lt;/q&gt; qui existe déjà. Nous devons juste accorder cet utilisateur pour ce que nous voulons en faire. Ici j'anticipe un peu sachant que je vais créer des utilisateurs FTP virtuels pour mes sites internet.&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# usermod -g nogroup -d /home/nobody -s /usr/sbin/nologin nobody
bebeserv:~# useradd -g nogroup -d /home/nobody -s /usr/sbin/nologin anonymous
bebeserv:~# mkdir /home/nobody
bebeserv:~# chgrp nogroup /home/nobody
bebeserv:~# chmod 2770 /home/nobody
&lt;/pre&gt;


&lt;p&gt;Créons aussi le dossier de notre premier utilisateur virtuel&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# mkdir /home/nobody/test/
bebeserv:~# chown nobody /home/nobody/test/
&lt;/pre&gt;


&lt;p&gt;Une petite explication s'impose, nous donnons d'abord au dossier le bon groupe et nous le mettons un &lt;q&gt;« setgid »&lt;/q&gt; dessus afin que tous fichiers et dossiers créés dans ce dossier appartiennent au groupe &lt;q&gt;« nogroup »&lt;/q&gt;, ensuite nous ne donnons aucun droit d'écriture sur le dossier sauf au propriétaire &lt;q&gt;« root »&lt;/q&gt; car &lt;q&gt;« vsftpd »&lt;/q&gt; accorde automatiquement les droits d'écriture dans le dossier en fonction de ces droits et nous ne souhaitons pas forcément que tous les utilisateurs puisse écrire dedans. Nous gérerons ces droits dans &lt;q&gt;« vsftpd »&lt;/q&gt;. &lt;/p&gt;


&lt;p&gt;Maintenant nous allons configurer notre serveur FTP.&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# nano /etc/vsftpd.conf
&lt;/pre&gt;


&lt;p&gt;Je change les lignes suivantes&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
anonymous_enable=NO
local_enable=YES
write_enable=NO
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=NO
chown_uploads=NO
chown_username=nobody
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=300
data_connection_timeout=60
nopriv_user=anonymous
ftpd_banner=Welcome to bebeserv.bebenet.local FTP service.
chroot_local_user=YES
&lt;/pre&gt;


&lt;p&gt;Et je rajoute celles-ci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
guest_enable=YES
guest_username=nobody
max_clients=20
max_per_ip=5
force_dot_files=YES
hide_ids=YES
use_localtime=YES
user_config_dir=/etc/vsftpd/user_conf

# Connection sécurisée
#ssl_enable=YES
#allow_anon_ssl=YES
#force_local_data_ssl=YES
#force_local_logins_ssl=YES
#ssl_sslv2=YES
#ssl_sslv3=YES
#ssl_tlsv1=YES
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Maintenant configurons le fichier d'authentification &lt;a href=&quot;http://www.paradoxal.org/blog/tag/PAM&quot;&gt;PAM&lt;/a&gt; de &lt;q&gt;« vsftpd »&lt;/q&gt; afin d'utiliser des &lt;a href=&quot;http://www.paradoxal.org/blog/tag/utilisateurs%20virtuels&quot;&gt;utilisateurs virtuels&lt;/a&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# nano /etc/pam.d/vsftpd
&lt;/pre&gt;


&lt;p&gt;Commentez toutes les lignes et mettez ceci à la fin du fichier&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
auth	required	/lib/security/pam_userdb.so db=/etc/vsftpd/login
account	required	/lib/security/pam_userdb.so db=/etc/vsftpd/login
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Maintenant allons créer notre base d'utilisateurs virtuels&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# mkdir /etc/vsftpd
bebeserv:~# nano /etc/vsftpd/userdb
&lt;/pre&gt;


&lt;p&gt;Créez l'utilisateur &lt;q&gt;« test »&lt;/q&gt; correspondant au dossier que nous avons fait plus haut&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
test
toto

&lt;/pre&gt;


&lt;p&gt;Vérifiez toujours de bien mettre une ligne vide en fin de fichier&amp;nbsp;!
La seconde ligne est le mot de passe de l'utilisateur ici donc &lt;q&gt;« toto »&lt;/q&gt;. Le fichier doit être écrit strictement de la sorte (avec toujours une ligne vide à la fin)&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
user1
pass1
user2
pass2
user3
pass3
...

&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Maintenant formatons notre base de données au format &lt;q&gt;« &lt;a href=&quot;http://www.paradoxal.org/blog/tag/userdb&quot;&gt;userdb&lt;/a&gt; »&lt;/q&gt;. pour ceci plutôt que de taper une ligne de commande fastidieuse et dont on ne se rappellera jamais, nous allons créer un petit script qui le fera pour nous.&lt;/p&gt;


&lt;p&gt;Créons notre script&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# nano /etc/vsftpd/vsftpd-makedb
&lt;/pre&gt;


&lt;p&gt;Écrivez les lignes suivantes&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
#!/bin/sh
db3_load -T -t hash -f /etc/vsftpd/userdb /etc/vsftpd/login.db
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Maintenant donnons les bons droits à notre script&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# chmod 500 /etc/vsftpd/vsftpd-makedb
&lt;/pre&gt;


&lt;p&gt;Ajoutons un lien symbolique afin d'avoir accès directement à cette nouvelle commande, comme  toutes les autres commandes.&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# ln -s /etc/vsftpd/vsftpd-makedb /usr/local/bin/
&lt;/pre&gt;


&lt;p&gt;Maintenant et après chaque modification de la table &lt;q&gt;« userdb »&lt;/q&gt; il faudra faire&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# vsftpd-makedb
&lt;/pre&gt;


&lt;p&gt;Dorénavant notre utilisateur &lt;q&gt;« test »&lt;/q&gt; existe pour &lt;q&gt;« vsftpd »&lt;/q&gt; donnons lui des droits afin que &lt;q&gt;« vsftp »&lt;/q&gt; sache ce qui lui est autorisé. Mais pour ceci, afin de nous rappeler des options en permanence, nous allons créer d'abord un fichier d'exemple&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# mkdir /etc/vsftpd/user_conf
bebeserv:~# cd /etc/vsftpd/user_conf
bebeserv:/etc/vsftpd/user_conf# nano example
&lt;/pre&gt;


&lt;p&gt;Écrivez&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
# donne les droits de lecture
download_enable=YES
anon_world_readable_only=NO

# donne les droits d'écriture
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES

# donne le droit de renommer de supprimer
anon_other_write_enable=YES

#donne le droit de faire des chmod
chmod_enable=YES
virtual_use_local_privs=YES

#affiche les fichier cachés
force_dot_files=YES

# donne un home dans /home/nobody 
# exemple : local_root=test le home de l'utilisateur sera :
# /home/nobody/test
local_root=test

# droits des fichiers créés
anon_umask=002
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Maintenant que nous avons un fichier d'exemple, créez celui de l'utilisateur &lt;q&gt;« test »&lt;/q&gt; et modifiez les options si vous le souhaiter&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/vsftpd/user_conf# cp example test
&lt;/pre&gt;


&lt;p&gt;Si ce n'est déjà fait ajoutez les lignes suivantes à votre fichier &lt;q&gt;« /etc/network/iptables »&lt;/q&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
iptables -t filter -A INPUT -i eth0 -p tcp --dport 21 -d $MYIP -j ACCEPT
iptables -t filter -A INPUT -i eth0 -p tcp --sport 20 -d $MYIP -j ACCEPT

iptables -t filter -A OUTPUT -o eth0 -p tcp --dport 21 -s $MYIP -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 20 -s $MYIP -j ACCEPT
&lt;/pre&gt;


&lt;p&gt;Et à la fin du fichier rajoutez&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
modprobe ip_conntrack_ftp ports=21
&lt;/pre&gt;


&lt;p&gt;Configurons &lt;q&gt;« &lt;a href=&quot;http://www.paradoxal.org/blog/tag/fail2ban&quot;&gt;fail2ban&lt;/a&gt; »&lt;/q&gt; pour qu'il scanne les connexions FTP&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/vsftpd/user_conf# nano /etc/fail2ban/jail.conf
&lt;/pre&gt;


&lt;p&gt;Modifiez cette ligne&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
vsftpd]
enabled  = true
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Maintenant que tout est prêt, redémarrez &lt;q&gt;« iptables »&lt;/q&gt; et &lt;q&gt;« vsftpd »&lt;/q&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/vsftpd/user_conf# /etc/init.d/vsftpd start
[...]
bebeserv:/etc/vsftpd/user_conf# /etc/init.d/iptables-conf restart
[...]
&lt;/pre&gt;


&lt;p&gt;Faisons un petit test de connexion&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/vsftpd/user_conf# ftp localhost 21
Connected to localhost.
220 Welcome to bebeserv.bebenet.local FTP service.
Name : 
&lt;/pre&gt;


&lt;p&gt;Loguez vous avec l'utilisateur &lt;q&gt;« test »&lt;/q&gt; avec le mot de passe &lt;q&gt;« toto »&lt;/q&gt;.
La connexion réussi votre serveur ftp fonctionne.&lt;/p&gt;


&lt;p&gt;Quittez&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ftp&amp;gt; quit
221 Goodbye.
bebeserv:/etc/vsftpd/user_conf# 
&lt;/pre&gt;


&lt;p&gt;Dans cette configuration néanmoins les utilisateurs locaux ne peuvent pas se connecter en FTP classique. ce qui est en même temps un bonne chose car le FTP classique peut être remplacer par du &lt;a href=&quot;http://www.paradoxal.org/blog/tag/SFTP&quot;&gt;SFTP&lt;/a&gt; (FTP par &lt;a href=&quot;http://www.paradoxal.org/blog/tag/SSH&quot;&gt;SSH&lt;/a&gt;) vous n'avez rien à changer pour que ceci fonctionne.
ATTENTION ne confondez pas SFTP ET &lt;a href=&quot;http://www.paradoxal.org/blog/tag/FTPS&quot;&gt;FTPS&lt;/a&gt; (FTP par &lt;a href=&quot;http://www.paradoxal.org/blog/tag/SSL&quot;&gt;SSL&lt;/a&gt;).&lt;/p&gt;


&lt;p&gt;Afin de sécurisé aussi nos comptes virtuels nous allons faire en sorte qu'ils puisse se connecter en FTPS.
Pour ceci nous allons avoir besoin de &lt;q&gt;« &lt;a href=&quot;http://www.paradoxal.org/blog/tag/open-ssl&quot;&gt;open-ssl&lt;/a&gt; »&lt;/q&gt; pour générer les certificats adéquats et la connexion SSL.&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/vsftpd/user_conf# apt-get install openssl
[...]
&lt;/pre&gt;


&lt;p&gt;Maintenant générons un certificat pour &lt;q&gt;« vsftpd »&lt;/q&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/vsftpd/user_conf# cd /etc/ssl/certs
bebeserv:/etc/ssl/certs# openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem
&lt;/pre&gt;


&lt;p&gt;Aux questions répondez comme ceci par exemple; le plus important étant le &lt;q&gt;« Common Name »&lt;/q&gt; qui doit être l'adresse IP exact ou le nom de domaine exact du service), sachant que nous configurerons plus tard un sous domaine nommé &lt;q&gt;« ftp »&lt;/q&gt; sur notre domaine &lt;q&gt;« bebenet.local »&lt;/q&gt; j'utiliserai celui çi&amp;nbsp;: &lt;q&gt;« ftp.bebenet.local »&lt;/q&gt;.&lt;/p&gt;


&lt;p&gt;Voici ce que j'ai répondu&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:France
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:bebenet.local
Organizational Unit Name (eg, section) []:bebenet.local
Common Name (eg, YOUR name) []:ftp.bebenet.local
Email Address []:alban@bebenet.local
&lt;/pre&gt;


&lt;p&gt;Vous venez de créer un certificat valide pendant deux ans.
Maintenant sécurisez votre certificat avec des droits correct&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssl/certs# chmod 0600 vsftpd.pem
&lt;/pre&gt;


&lt;p&gt;Maintenant décommentez les lignes suivantes dans &lt;q&gt;« /etc/vsftpd.conf »&lt;/q&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
# Connection sécurisée
ssl_enable=YES
allow_anon_ssl=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_sslv2=YES
ssl_sslv3=YES
ssl_tlsv1=YES
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Rechargez la configuration de &lt;q&gt;« vsftpd »&lt;/q&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssl/certs# /etc/init.d/vsftpd reload
[...]
&lt;/pre&gt;


&lt;p&gt;Vous pouvez régler le client de votre utilisateur virtuel pour se connecter en FTPS (FTP with SSL auth SSL explicit) ou (FTP with SSL auth TLS explicit).&lt;/p&gt;


&lt;p&gt;Pensez à régler votre client en mode actif sans quoi il n'ira pas plus loin que la connexion. En effet sans SSL le serveur est régler pour géré le mode actif comme passif sans problème, seulement SSL empêche la gestion du mode passif. Pour contrer ceci nous pourrions limité la plage de ports passif sous &lt;q&gt;« vsftpd »&lt;/q&gt; et ouvrir dans &lt;q&gt;« iptables »&lt;/q&gt; ces ports mais cette idée je ne l'implémenterai pas ici.
Un petit rappel, une fois le SSL activer, les clients ne pourront plus se connecter sans mode SSL. pour les utilisateurs locaux SFTP (SSH) fonctionne toujours correctement.&lt;/p&gt;


&lt;p&gt;Voilà pour ce chapitre.&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssl/certs# exit
logout
ALBAN@bebeserv:~$
&lt;/pre&gt;</description>
    
          <enclosure url="http://www.paradoxal.org/blog/public/tuto_debian/chapitre_3.pdf"
      length="95369" type="application/pdf" />
    
    
          <comments>http://www.paradoxal.org/blog/post/2007/06/02/Serveur-Debian-vsftpd#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2007/06/02/Serveur-Debian-vsftpd#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/41</wfw:commentRss>
      </item>
    
  <item>
    <title>Serveur Debian - openssh</title>
    <link>http://www.paradoxal.org/blog/post/2007/05/27/Serveur-Debian-openssh</link>
    <guid isPermaLink="false">urn:md5:60ba4b1be6b36600e35082147e97a5c3</guid>
    <pubDate>Sun, 27 May 2007 13:58:00 +0200</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Serveur Debian</category>
        <category>Fail2ban</category><category>Iptables</category><category>Linux</category><category>Openssh</category><category>Putty</category><category>SSH</category><category>Sécurité</category>    
    <description>&lt;p&gt;&lt;strong&gt;CHAPITRE 2&amp;nbsp;: &lt;a href=&quot;http://www.paradoxal.org/blog/tag/SSH&quot;&gt;SSH&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Puisque qu'ici nous allons faire pas mal de chose nous allons passez en &lt;q&gt;« root »&lt;/q&gt; permanent&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo -i
bebeserv:~# 
&lt;/pre&gt;


&lt;p&gt;Installons le client et le serveur SSH. Seul le serveur devrait nous servir mais il est toujours très pratique d'avoir un client à porter de main.&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# apt-get update
[...]
bebeserv:~# apt-get install openssh-client openssh-server
[...]
&lt;/pre&gt;


&lt;p&gt;Commencez par couper &lt;q&gt;« sshd »&lt;/q&gt; tant qu'il n'est pas configuré correctement&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# /etc/init.d/ssh stop
[...]
&lt;/pre&gt;


&lt;p&gt;Maintenant allons configurer tout ceci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:~# cd /etc/ssh
bebeserv:/etc/ssh# 
&lt;/pre&gt;


&lt;p&gt;Tout d'abord le client ssh&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssh# nano ssh_config
&lt;/pre&gt;


&lt;p&gt;Mettez les options suivantes&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
CheckHostIP yes
EnableSSHKeysign yes
GSSAPIAuthentification yes
GSSAPIDelegateCredentials no
Protocol 2
ServerAliveCountMax 5
ServerAliveInterval 20
SetupTimeOut 30
TCPKeepAlive no
VerifyHostKeyDNS yes
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Maintenant passons au serveur&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssh# nano sshd_config
&lt;/pre&gt;


&lt;p&gt;Mettez les options suivantes&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
X11Forwarding
MaxAuthTries 3
MaxStartups 1
AllowUsers ALBAN
LoginGraceTime 60
PermitRootLogin no
AuthorizedKeysFile %h/.ssh/authorized_keys
X11Forwarding no
TCPKeepAlive no
Banner /etc/ssh/banner
ClientAliveCountMax 5
ClientAliveInterval 20
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Créons notre bannière&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssh# nano banner
&lt;/pre&gt;


&lt;p&gt;Entrez le texte de votre choix&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ATTENTION les connexions sur ce serveur sont surveillées et tracées.

Tout acte malveillant, usurpation d'identité, vol de données pourra amener des poursuites judiciaires importantes !
&lt;/pre&gt;


&lt;p&gt;Nous allons maintenant redémarrer notre serveur.&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssh# /etc/init.d/ssh start
[...]
&lt;/pre&gt;


&lt;p&gt;Maintenant nous allons créer les clés RSA et DSA de notre utilisateur qui lui permettra d'assurer ses futures connexions.&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssh# ssh-keygen -t dsa -b 1024 
[...]
&lt;/pre&gt;


&lt;p&gt;Des questions vous seront posées, faîtes &lt;q&gt;« [Entrée] »&lt;/q&gt; partout sans répondre.&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssh# ssh-keygen -t rsa -b 1024 
[...]
&lt;/pre&gt;


&lt;p&gt;Même démarche.
Maintenant que tout est beau et propre nous allons devoir autoriser SSH à sortir de notre réseau.
Éditez le fichier &lt;q&gt;« /etc/network/&lt;a href=&quot;http://www.paradoxal.org/blog/tag/iptables&quot;&gt;iptables&lt;/a&gt; »&lt;/q&gt; et ajoutez les lignes suivantes.&lt;/p&gt;


&lt;p&gt;Autorisons le client SSH&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
iptables -t filter -A INPUT -p tcp --sport 22 -i eth0 -d $MYIP -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -o eth0 -s $MYIP -j ACCEPT
&lt;/pre&gt;


&lt;p&gt;Autorisons le serveur SSH&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
iptables -t filter -A INPUT -p tcp --dport 22 -i eth0 -d $MYIP -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -o eth0 -s $MYIP -j ACCEPT
&lt;/pre&gt;



&lt;p&gt;Maintenant SSH est ouvert à l'extérieur.
Vous pouvez vous logguer depuis votre serveur vers un autre serveur en utilisant&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ssh user@server.com
&lt;/pre&gt;


&lt;p&gt;Si vous souhaitez vous connecter à un serveur depuis le votre sans voir à y rentrer la clé en permanence&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ssh-copy-id -i ~/.ssh/id_dsa.pub user@server.com
&lt;/pre&gt;


&lt;p&gt;Rentrez le mot de passe pour la dernière fois.
Après &lt;q&gt;« ssh user@server.com »&lt;/q&gt; se connectera automatiquement.&lt;/p&gt;


&lt;p&gt;Notre configuration est faite de sorte que seul l'utilisateur &lt;q&gt;« ALBAN »&lt;/q&gt; puisse utiliser SSH pour une connexion distante.
Ainsi avec &lt;a href=&quot;http://www.paradoxal.org/blog/tag/Putty&quot;&gt;Putty&lt;/a&gt;.exe sous un poste Windows par exemple vous pouvez vous connecter et administrer votre serveur à distance.&lt;/p&gt;


&lt;p&gt;Allons un peu plus loin et &lt;a href=&quot;http://www.paradoxal.org/blog/tag/s%C3%A9curit%C3%A9&quot;&gt;protégeons-nous&lt;/a&gt; des attaques SSH, nous allons installer le paquet &lt;q&gt;« &lt;a href=&quot;http://www.paradoxal.org/blog/tag/fail2ban&quot;&gt;fail2ban&lt;/a&gt; »&lt;/q&gt; qui nous protégera de ceci et qui part la suite nous protégera aussi de ce même type d'attaque pour les protocoles HTTP, POP etc.
Le principe de &lt;q&gt;« fail2ban »&lt;/q&gt; est très simple, il scan les fichiers de log &lt;q&gt;« /var/log/auth.log »&lt;/q&gt;, &lt;q&gt;« /var/log/apache/access.log »&lt;/q&gt; etc ... à la recherche de tentative d'authentification qui sont en échec. Au bout de 3 tentatives échouées par exemple il ajoutera une règle dans &lt;q&gt;« iptables »&lt;/q&gt; afin de bannir pendant un certain temps l'adresse IP qui tente de se connecter sans y arriver. Ainsi les attaques brute force sont compromises.
Vous l'aurez compris &lt;q&gt;« fail2ban »&lt;/q&gt; joue avec &lt;q&gt;« iptables »&lt;/q&gt; nous allons donc revenir sur les fichiers du chapitre 1 pour arranger tout ça.&lt;/p&gt;


&lt;p&gt;Première chose, installons &lt;q&gt;« fail2ban »&lt;/q&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssh# apt-get install fail2ban
[...]
&lt;/pre&gt;


&lt;p&gt;Une fois fais, &lt;q&gt;« fail2ban »&lt;/q&gt; est déjà en action, voyez les modifications apporter sur notre &lt;q&gt;« iptables »&lt;/q&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssh# iptables -L -v -n
&lt;/pre&gt;


&lt;p&gt;Afin de que notre script &lt;q&gt;« iptables-conf »&lt;/q&gt; et celui de &lt;q&gt;« fail2ban »&lt;/q&gt; ne s'embête pas au démarrage, sachant que les deux vont de paire nous allons supprimer le démarrage de &lt;q&gt;« fail2ban »&lt;/q&gt; tout en gardant son script de démarrage de la manière suivante&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssh# /etc/init.d/fail2ban stop
bebeserv:/etc/ssh# update-rc.d -f fail2ban remove
&lt;/pre&gt;


&lt;p&gt;Maintenant nous allons améliorer &lt;q&gt;« iptables-conf »&lt;/q&gt; pour y inclure &lt;q&gt;« fail2ban »&lt;/q&gt;&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssh# nano /etc/init.d/iptables-conf
&lt;/pre&gt;


&lt;p&gt;Modifiez les fonctions &lt;q&gt;« start »&lt;/q&gt; et &lt;q&gt;« stop »&lt;/q&gt; de la manière suivante&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
iptables_start() {
		if [ -f /etc/network/iptables ]; then
				. /etc/network/iptables
		fi
		/etc/init.d/fail2ban start
}

iptables_stop() {
		/etc/init.d/fail2ban stop
		iptables -t filter -F INPUT
		iptables -t filter -P INPUT ACCEPT
		iptables -t filter -F OUTPUT
		iptables -t filter -P OUTPUT ACCEPT
}
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Maintenant allons paramétrer &lt;q&gt;« fail2ban »&lt;/q&gt;&amp;nbsp;:
Rendez vous dans &lt;q&gt;« /etc/fail2ban/ »&lt;/q&gt;&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/ssh# cd /etc/fail2ban
bebeserv:/etc/fail2ban# nano fail2ban.conf
&lt;/pre&gt;


&lt;p&gt;Personnellement ici je change la dernière ligne du fichier de configuration&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
socket = /var/run/fail2ban.sock
&lt;/pre&gt;


&lt;p&gt;Je trouve ceci plus propre que de le mettre dans &lt;q&gt;« /tmp »&lt;/q&gt;, autant l'enregistrer avec ses collègues.
Maintenant réglons la manière dont &lt;q&gt;« fail2ban »&lt;/q&gt; travail&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/fail2ban# nano jail.conf
&lt;/pre&gt;


&lt;p&gt;&lt;q&gt;« bantime = 600 »&lt;/q&gt; et &lt;q&gt;« maxretry = 3 »&lt;/q&gt; me semble être des bonnes valeurs (pour 3 mauvaises tentatives le host est banni 10 minutes)
Je ne rajoute pas mon propres réseau car je préfère ne pas faire confiance à mon réseau (question de sécurité, un cheval de troie sur un de mes PCs pourrait faire des dégâts)
Plus bas vous voyez des sections dont une pour SSH activée. Nous laissons tel quel pour l'instant, nous activerons les autres services au fur et à mesure ou nous les monterons.
Quittez et enregistrez si vous avez fait des modifications.&lt;/p&gt;


&lt;p&gt;Redémarrez le tout&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/fail2ban# /etc/init.d/iptables-conf restart
&lt;/pre&gt;


&lt;p&gt;Voilà c'est terminer pour SSH.&lt;/p&gt;


&lt;p&gt;Une dernière chose avant de clore le sujet.
Vous avez sûrement remarquer qu'un nouveau fichier de log sera présent dans &lt;q&gt;« /var/log »&lt;/q&gt;&amp;nbsp;: &lt;q&gt;« fail2ban.log »&lt;/q&gt;.&lt;/p&gt;


&lt;p&gt;Il est de bon ton d'aller vérifier si le &lt;q&gt;« logrotate »&lt;/q&gt; fera tourner ce fichier de log avant qu'il ne devienne trop gros et génère quelque défaillance du système. (il faut toujours avoir ce reflex).
Allons donc dans &lt;q&gt;« /etc/logrotate.d/ »&lt;/q&gt;&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/fail2ban# cd /etc/logrotate.d/
bebeserv:/etc/logrotate.d# ls 
&lt;/pre&gt;


&lt;p&gt;Il y a bien un fichier visiblement dédié à &lt;q&gt;« fail2ban »&lt;/q&gt;
Affichons le&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/fail2ban# cat fail2ban
&lt;/pre&gt;


&lt;p&gt;De ce que l'on peut en lire, ce fichier sera tourné toutes les semaines avec 4 fichiers conservés et compressés. Pour moi c'est bon =)&lt;/p&gt;

&lt;pre&gt;
bebeserv:/etc/fail2ban# exit
logout
ALBAN@bebeserv:~$
&lt;/pre&gt;</description>
    
          <enclosure url="http://www.paradoxal.org/blog/public/tuto_debian/chapitre_2.pdf"
      length="94206" type="application/pdf" />
    
    
          <comments>http://www.paradoxal.org/blog/post/2007/05/27/Serveur-Debian-openssh#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2007/05/27/Serveur-Debian-openssh#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/40</wfw:commentRss>
      </item>
    
  <item>
    <title>Serveur Debian - Iptables</title>
    <link>http://www.paradoxal.org/blog/post/2007/05/23/Serveur-Debian-Iptables</link>
    <guid isPermaLink="false">urn:md5:b93766c578d9c6b3d53fbb3211349406</guid>
    <pubDate>Wed, 23 May 2007 10:54:00 +0200</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Serveur Debian</category>
        <category>Firewall</category><category>Iptables</category><category>Linux</category><category>Sécurité</category>    
    <description>&lt;p&gt;&lt;strong&gt;CHAPITRE 1&amp;nbsp;: IPTABLES&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Si vous ne connaissez pas encore &lt;q&gt;«&lt;a href=&quot;http://www.paradoxal.org/blog/tag/iptables&quot;&gt; iptables&lt;/a&gt; »&lt;/q&gt;, c'est LA commande pour gérer les connexions réseau, faire des redirections de port, blacklister une adresse IP ou tout simplement ouvrir ou fermer des ports. C'est ce que l'on appelle un pare-feu ou &lt;a href=&quot;http://www.paradoxal.org/blog/tag/firewall&quot;&gt;firewall&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Par défaut &lt;q&gt;« iptables »&lt;/q&gt; laisse tout ouvert et ne filtre rien. Notre but c'est de fermer un peu tout ça et de garder le minimum ouvert.
Je ne rentrerai pas dans le détails de l'utilisation de &lt;q&gt;« iptables »&lt;/q&gt; car bien trop de choses sont à voir mais nous allons l'utiliser d'une manière simple et efficace ce qui vous donnera les bases minimales pour commencer à appréhender &lt;q&gt;« iptables »&lt;/q&gt;.&lt;/p&gt;


&lt;p&gt;Nous allons paramétrer &lt;q&gt;« iptables »&lt;/q&gt; de manière à l'utiliser que pour nos besoins. A l'heure actuelle, seul &lt;q&gt;« apt »&lt;/q&gt; (la gestion des paquets Debian) et &lt;q&gt;« ntpdate »&lt;/q&gt; (synchronisation de l'heure) font des connexions réseau. Nous allons donc tout bloquer puis ouvrir un passage à &lt;q&gt;« apt »&lt;/q&gt; et &lt;q&gt;« ntpdate »&lt;/q&gt;.&lt;/p&gt;


&lt;p&gt;D'abord on supprime toutes les règles existante (des fois qu'ils y en aurait de rentrées)&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables -t filter -F INPUT
ALBAN@bebeserv:~$ sudo iptables -t filter -F OUTPUT
&lt;/pre&gt;


&lt;p&gt;Maintenant on ferme les portes&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables -t filter -P INPUT DROP
ALBAN@bebeserv:~$ sudo iptables -t filter -P OUTPUT DROP
&lt;/pre&gt;


&lt;p&gt;Un reflex qu'il faut avoir c'est de toujours autoriser la boucle locale (et ceci doit être toujours la première règle)&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables -t filter -A INPUT -i lo -j ACCEPT
ALBAN@bebeserv:~$ sudo iptables -t filter -A OUTPUT -o lo -j ACCEPT
&lt;/pre&gt;


&lt;p&gt;Dorénavant nous sommes totalement fermé de l'extérieur. Configurons &lt;q&gt;« iptables »&lt;/q&gt; pour laisser &lt;q&gt;« apt »&lt;/q&gt;.
&lt;q&gt;« apt »&lt;/q&gt; aura déjà besoin de faire des requêtes DNS (port 53 en UDP et TCP) pour résoudre les noms tel que &lt;q&gt;« ftp.debian.fr »&lt;/q&gt; afin de pouvoir récupérer les listes et les paquets.
Normalement un client DNS n'a besoin que du protocole UDP mais ce dernier est laxiste sur sa spécification et autorise aussi le TCP (qui est normalement réservé au transfert de zone DNS)
Ouvrons le port DNS en TCP et UDP pour l'entrée et la sortie&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables -t filter -A INPUT -i eth0 -d 10.0.0.2 -p tcp --sport 53 -j ACCEPT
ALBAN@bebeserv:~$ sudo iptables -t filter -A INPUT -i eth0 -d 10.0.0.2 -p udp --sport 53 -j ACCEPT
ALBAN@bebeserv:~$ sudo iptables -t filter -A OUTPUT -o eth0 -s 10.0.0.2 -p tcp --dport 53 -j ACCEPT
ALBAN@bebeserv:~$ sudo iptables -t filter -A OUTPUT -o eth0 -s 10.0.0.2 -p udp --dport 53 -j ACCEPT
&lt;/pre&gt;


&lt;p&gt;Si vous posséder un serveur DNS ouvrez vous aurez besoin d'ouvrir les ports dans l'autre sens&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables -t filter -A INPUT -i eth0 -d 10.0.0.2 -p tcp --dport 53 -j ACCEPT
ALBAN@bebeserv:~$ sudo iptables -t filter -A INPUT -i eth0 -d 10.0.0.2 -p udp --dport 53 -j ACCEPT
ALBAN@bebeserv:~$ sudo iptables -t filter -A OUTPUT -o eth0 -s 10.0.0.2 -p tcp --sport 53 -j ACCEPT
ALBAN@bebeserv:~$ sudo iptables -t filter -A OUTPUT -o eth0 -s 10.0.0.2 -p udp --sport 53 -j ACCEPT
&lt;/pre&gt;


&lt;p&gt;De même ouvrons le port 80 en TCP pour que &lt;q&gt;« apt »&lt;/q&gt; puisse télécharger les paquets&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables -t filter -A INPUT -i eth0 -d 10.0.0.2 -p tcp --sport 80 -j ACCEPT
ALBAN@bebeserv:~$ sudo iptables -t filter -A OUTPUT -o eth0 -s 10.0.0.2 -p tcp --dport 80 -j ACCEPT
&lt;/pre&gt;


&lt;p&gt;De même pour un serveur web ouvrez les ports dans l'autre sens&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables -t filter -A INPUT -i eth0 -d 10.0.0.2 -p tcp --dport 80 -j ACCEPT
ALBAN@bebeserv:~$ sudo iptables -t filter -A OUTPUT -o eth0 -s 10.0.0.2 -p tcp --sport 80 -j ACCEPT
&lt;/pre&gt;


&lt;p&gt;Maintenant autorisons &lt;q&gt;« ntpdate »&lt;/q&gt; qui lui utilise le port 123 en UDP&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables -t filter -A INPUT -i eth0 -d 10.0.0.2 -p udp --sport 123 -j ACCEPT
ALBAN@bebeserv:~$ sudo iptables -t filter -A OUTPUT -o eth0 -s 10.0.0.2 -p udp --dport 123 -j ACCEPT
&lt;/pre&gt;


&lt;p&gt;A ce stade nous pourrions nous arrêter là tout es fonctionnel. Mais allons plus loin.
Maintenant ajoutons une règle qui dira que toute connexion déjà établie avec le serveur donc déjà autoriser par &lt;q&gt;« iptables »&lt;/q&gt; sera elle aussi autorisée (même sur un port fermé par exemple). Cette règle est facultative mais bien utile quand vous tester votre configuration vous permettant de tester avec la règle de log (voir ci-dessous) les paquets qui sont rejetés qui devrait être acceptés.&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables -t filter -A INPUT -i eth0 -d 10.0.0.2 -m state --state RELATED,ESTABLISHED -j ACCEPT
ALBAN@bebeserv:~$ sudo iptables -t filter -A OUTPUT -o eth0 -s 10.0.0.2 -m state --state RELATED,ESTABLISHED -j ACCEPT
&lt;/pre&gt;


&lt;p&gt;Dernière ces règles nous allons loguer dans le fichier &lt;q&gt;« /var/log/debug »&lt;/q&gt; tout les paquets que nous allons bloquer avant de les bloquer&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables -t filter -A INPUT -i eth0 -d 10.0.0.2 -j LOG --log-prefix &amp;quot;Iptables INPUT dropped : &amp;quot; --log-level debug
ALBAN@bebeserv:~$ sudo iptables -t filter -A OUTPUT -o eth0 -s 10.0.0.2 -j LOG --log-prefix &amp;quot;Iptables OUPUT dropped : &amp;quot; --log-level debug
&lt;/pre&gt;


&lt;p&gt;Il est est terminer des règles.
Maintenant voyons quelques commandes utiles.
Sauver votre configuration&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables-save &amp;gt; ~/iptables-sauvegarde
&lt;/pre&gt;


&lt;p&gt;Restaurer votre configuration&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables-restore ~/iptables-sauvergade
&lt;/pre&gt;


&lt;p&gt;Voir votre configuration complète&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo iptables -L -v --line-numbers
&lt;/pre&gt;


&lt;p&gt;Vérifier le log en temps réel (paquets rejetés)&amp;nbsp;: (tapez &lt;q&gt;« [CTRL + C] »&lt;/q&gt; pour sortir)&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ sudo tail -f /var/log/debug 
&lt;/pre&gt;


&lt;p&gt;Quand le serveur redémarre vos règles &lt;q&gt;« iptables »&lt;/q&gt; seront perdues, il faut donc automatiser la mise en place de ces règles.
Allez dans &lt;q&gt;« /etc/network »&lt;/q&gt;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:~$ cd /etc/network
ALBAN@bebeserv:/etc/network$ 
&lt;/pre&gt;


&lt;p&gt;Créez le fichier &lt;q&gt;« iptables »&lt;/q&gt; à côté du fichier &lt;q&gt;« interface »&lt;/q&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/network$ sudo nano iptables
&lt;/pre&gt;


&lt;p&gt;Entrez les mêmes lignes que nous avons du taper pour configurer &lt;q&gt;« iptables »&lt;/q&gt; (attention aux fautes de frappes !)&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
# A modifier en fonction de votre adresse IP
MYIP=10.0.0.2

iptables -t filter -F INPUT
iptables -t filter -F OUTPUT

iptables -t filter -Z INPUT
iptables -t filter -Z OUTPUT

iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP

iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A INPUT -i eth0 -d $MYIP -p tcp --sport 53 -j ACCEPT
iptables -t filter -A INPUT -i eth0 -d $MYIP -p udp --sport 53 -j ACCEPT
iptables -t filter -A INPUT -i eth0 -d $MYIP -p tcp --sport 80 -j ACCEPT
iptables -t filter -A INPUT -i eth0 -d $MYIP -p udp --sport 123 -j ACCEPT
iptables -t filter -A INPUT -i eth0 -d $MYIP -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i eth0 -d $MYIP -j LOG --log-prefix &amp;quot;Iptables INPUT dropped : &amp;quot; --log-level debug

iptables -t filter -A OUTPUT -o lo -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -s $MYIP -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -s $MYIP -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -s $MYIP -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -s $MYIP -p udp --dport 123 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -s $MYIP -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -s $MYIP -j LOG --log-prefix &amp;quot;Iptables OUPUT dropped : &amp;quot; --log-level debug
&lt;/pre&gt;


&lt;p&gt;Enregistrez le fichier &lt;q&gt;« [CTRL + O] »&lt;/q&gt; et quittez &lt;q&gt;« [CTRL + X] »&lt;/q&gt;&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;Créez le fichier de démarrage,&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/network$ cd /etc/init.d/
ALBAN@bebeserv:/etc/init.d$ sudo nano iptables-conf
&lt;/pre&gt;


&lt;p&gt;Entrez ceci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
#! /bin/sh
set -e

iptables_start() {
		if [ -f /etc/network/iptables ]; then
				. /etc/network/iptables
		fi
}

iptables_stop() {
		iptables -t filter -F INPUT
		iptables -t filter -F OUTPUT
		iptables -t filter -P INPUT ACCEPT
		iptables -t filter -P OUTPUT ACCEPT
}

case &amp;quot;$1&amp;quot; in
  start)
		echo -n &amp;quot;Apply Iptables configuration&amp;quot;
		iptables_start
		echo &amp;quot;.&amp;quot;
		;;
  stop)
		echo -n &amp;quot;Clear Iptables configuration&amp;quot;
		iptables_stop
		echo &amp;quot;.&amp;quot;
		;;

  restart)
		echo -n &amp;quot;Reloading Iptables configuration&amp;quot;
		iptables_stop
		iptables_start
		echo &amp;quot;.&amp;quot;
		;;

  *)
		echo &amp;quot;Usage: /etc/init.d/iptables-conf {start|stop|restart}&amp;quot;
		exit 1
esac

exit 0
&lt;/pre&gt;


&lt;p&gt;Donnons les bons droits à notre fichier&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/init.d$ sudo chmod +x iptables-conf
&lt;/pre&gt;


&lt;p&gt;Enregistrez et quittez.
Rajoutez le script de démarrage dans le mode voulu avec la priorité voulue&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/init.d$ sudo update-rc.d iptables-conf start 99 2 3 4 5 . stop 20 0 1 6 .
[...]
&lt;/pre&gt;


&lt;p&gt;Testons le tout, affichons la configuration actuelle&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/init.d$ sudo iptables -L -v --line-numbers
[...]
&lt;/pre&gt;


&lt;p&gt;Stoppez le firewall&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/init.d$ sudo /etc/init.d/iptables-conf stop
[...]
&lt;/pre&gt;


&lt;p&gt;Vérifiez que tout est vide et autorisé&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/init.d$ sudo iptables -L -v --line-numbers
[...]
&lt;/pre&gt;


&lt;p&gt;Démarrons le firewall&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/init.d$ sudo /etc/init.d/iptables-conf start
[...]
&lt;/pre&gt;


&lt;p&gt;Vérifions que toutes les règles sont bien présentes&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/init.d$ sudo iptables -L -v --line-numbers
[...]
&lt;/pre&gt;


&lt;p&gt;Modifions nous même la configuration actuelle&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/init.d$ sudo iptables -F INPUT
[...]
ALBAN@bebeserv:/etc/init.d$ sudo iptables -L -v --line-numbers
[...]
&lt;/pre&gt;


&lt;p&gt;Redémarrons le firewall pour vérifier que tout revient comme nous l'avions configuré&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/init.d$ sudo /etc/init.d/iptables-conf restart
[...]
ALBAN@bebeserv:/etc/init.d$ sudo iptables -L -v --line-numbers
[...]
&lt;/pre&gt;


&lt;p&gt;Voilà c'est terminé pour ce chapitre&amp;nbsp;!&lt;/p&gt;

&lt;pre&gt;
ALBAN@bebeserv:/etc/init.d$ cd ~
ALBAN@bebeserv:~$
&lt;/pre&gt;</description>
    
          <enclosure url="http://www.paradoxal.org/blog/public/tuto_debian/chapitre_1.pdf"
      length="92237" type="application/pdf" />
    
    
          <comments>http://www.paradoxal.org/blog/post/2007/05/23/Serveur-Debian-Iptables#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2007/05/23/Serveur-Debian-Iptables#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/39</wfw:commentRss>
      </item>
    
</channel>
</rss>