Archives pour l'étiquette SSH

Memo installation de ssh sur AIX 4.x et 5.x

Documentation

Voici la recette officiel pour installer ssh sur AIX 4.x et 5.x
http://www-1.ibm.com/support/docview.wss ?uid=isg3T1000403

Ressources

Tout les paquets et fichiers nécéssaire sont disponible en http
http://www-1.ibm.com/servers/aix/products/aixos/linux/download.html

Installer « wget » en premier sur votre serveur aix dans ce cas. Vous pourrez ainsi télécharger en http directement depuis la ligne de commande

Si non par ftp:
ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/

Ssh

La documentation ssh est disponible ici en français :
http://www.openssh.org/fr/index.html

Backup avec Unison et ssh

Unison

A la rechercher d’un solution souple et adaptable pour éffectuer des sauvegardes de donnée de station de travail et de serveur sur un gros serveur de fichier distant avec une grappe raid6 de 1,2 To (8 disques)

Et d’un coup d’apt-get j’ai trouvé : UNISON

Le man unison donne cette brève description :

« a file-synchronization tool for Unix and Windows »

Toutes mes informations sont sur le site web de unisons : cliquez ici Il y a entre autre le User Manual and Reference qu’il est indispensable de lire. Il debute par quelque exercises facile pour comprend le principe de base. Faite vos test dans un coin pour mieux appréhender l’outil.

Installation Linux Debian

L’installation sous debian est toujours aussi facile :

apt-get install unison

Installation sous Windows XP

Il y a different binaire disponible sur le site de UNISON en dowload mais je recommande de prendre la version stable en ligne de commande, facile à installer et a utliser en batch avec l’ordonateur de tache.

Comme cette version porte le nom de unison.win32-textui.exe je vous recommende de le renomer en unison.exe et de placer dans c :/windows/system32/ afin qu’il soit disponible dans le path.

Installation sous Aix

Unison est disponible sous IBM Aix également, vous pouvez le télécharger sur la page bullfreeware.com. Les intructions d’installation via smitty sont disponible sur le même site ici .

Première utilisation

Simple comme bonjour si vous avez au moins regardé le User Manual and Reference qu’il est indispensable de lire.

unison dir1 dir2

Par defaut unison travail en mode interactif. Il va donc prépater une liste des fichier et repertoire présent dans dir1 avec leur attribues (date, taille). Puis vous demander pour chacun des differences avec dir2 vous demander la marche a suivre.

Par exemple pour recopier le fichier file-exemple de dir1 a dir2 voici le dialogue :


/dir1 /dir2
new file-exemple ----> / [f] f

la commande f pour flush indique de procéder

A la suite de cela il vous demander de valider la globalité de la synchronisation, repondez y.


Proceed with propagating updates? []

NOTE : Danger Attention a l’ordre de présentation de repertoire à synchroniser ! Présenter dir2 avant dir1 implique que c’est le repertoire dir2 qui est le référent. si celuis ci est vide, unison supprimera tout de dir1.

Regarde bien avant de valider.


/dir2 /dir1
----> delete file-exemple / [f] f

Methode : De disque a disque

Le plus facile est de faire une synchronisation de disque a disque sur un même machine. Il est possible de le faire au travers d’un montage nfs également.

Voici deux exemples de script à placer dans la crontab ou dans l’ordonateur de tache.

Sous linux avec NFS


#!/bin/sh

/usr/bin/unison /var/lib -path=mysql /mnt/serveur/host/ -batch -force /var/lib
/usr/bin/unison /var -path=www /mnt/serveur/host/ -batch

Ici en deux lignes je sauvegarde :
- mes bases de données présente dans /var/lib/mysql
- mon site web dans /var/lib/www

Attention j’ai pris sois de monter un partage nfs du serveur serveur dans /mnt/serveur. Pour cela ajouter la ligne suivante à /etc/fstab et lancer la commande commande mount -a :

serveur.karlesnine.com:/partagenfs /mnt/serveur nfs defaults 0 0

Les options utilisées :
- -patch=mysql pour le prendre en compte qu’un repertoire ou fichier dans un racine pouvant en présenter plusieur comme dans le cas de /var/lib.
- -force /var/lib oblige unison a synchroniser dans un seul sens. ici ne prenant en compte que les modifications local force /var/lib et les imposant sur le partage nfs.
- -batch mode batch, toute les modifications sont valider par defaut il n’y a donc plus de question.

Sous windows

Sous winwows il est possible de faire de même via un partage de fichier smb / samba préalablement activé. Je ne detaille pas ici cette manipulation propre a windows.


unison "C:\Documents and Settings\Nat\Bureau" "Z:\Nat\Bureau" -batch -force "C:\Documents and Settings\Nat\Bureau"

unison "C:\Documents and Settings\Nat\Mes documents" "Z:\Nat\Mes documents" -batch -force "C:\Documents and Settings\Nat\Mes documents"

unison "C:\Documents and Settings\Nat\Application Data\Thunderbird" "Z:\Nat\Thunderbird" -batch -force "C:\Documents and Settings\Nat\Application Data\Thunderbird"

Sous windows la syntaxe reste la même seul change la présentation des chemins de répertoire.
Cependant faire attention aux doubles cotes.

Une doc sur unison et windows

http://demas.free.fr/HowTo/unison/#_Toc32303312

Et avec ssh ?

Sauvegarder via un connexion ssh offre l’avantage de ne pas utiliser de nfs et donc d’administrer des montages non sécurisés et donc l’utilisation d’un tunnel crypté avec identification par clef.

Pas de NFS pour eviter :
- les access root sur un fileserveur distant
- les problèmes de montage
- la simple indication donner parla présence ou le parcoure d’une arborescence
- Palier à la faible sécurité de nfs V3.

Ssh pour :
- Avoir des connexions ponctuelles, automatisées et masquées
- Limite les droits de connexion
- Crypter les tunnels de connexion.
- Avoir une compression minimum du transfert de donnée
- Pouvoir révoquer les droits de connexion de façon centralisé

Unison pour :
- La synchronisation bi-directionnel
- Le filtrage sur les noms de fichiers
- L’intégration avec ssh

Sous Linux via SSH

Serveur de fichier

Sur le serveur de fichier copier la cléf ssh publique créé spécialement pour cette connexion de backup en ajoutant l’option no-pty dans le fichier $HOME/.ssh/authorized_keys du compte choisi pour recevoir la connexion . Ceci pour bloquer l’ouverture d’un shell (apportant un petit plus de sécurité) comme dans cette exemple :


no-pty ssh-dss AAAAB3NzaC...../ /...qxX/27ZZ9X5vAVA== backup

Attention a bien choisir le compte utilisé et a configurer les droit d’écriture sur l’arborescence de destination choisie.
Dans mon architecture j’ai pris le compte admin qui n’est qu’un simple compte utilisateur lamba.

Serveur client

Ajouter dans le répertoire .ssh du compte servant à faire le backup, ici root pour parcourir l’arborescence quelque soit le propriétaire des répertoires, le fichier de configuration particulier nommé config suivant


Host backup
Compression yes
ForwardAgent no
Cipher blowfish
User admin
IdentityFile ~/.ssh/backup
HostName serveur.karlesnine.com

Ce fichier apporte l’utilisation d’un alias backup pour un ensemble de paramètres. En voici l’explication dans l’ordre :
- La compression
- Le blocage du forward de clé
- Une cryptographie legère blowfish
- Le compte utilisateur cible.
- la définition de la clé
- Le serveur de destination

Je ne peux que vous conseillé de vous reporter au site offichier Openssh pour plus de documentation.

Unison

La configuration de unison ce fait avec un fichier default.prf placé dans le répertoire $HOME/.unison du compte servant à faire le backup.


# Unison preferences file
ignore = Name {core,*.pyc,*.dat,*.xcu, *.dvi, *.log, *.pid, *.out, unison.log}
ignore = Path .unison
ignore = Name toto
ignore = Name tutu
ignore = Name tmp
ignore = Name temp
logfile = /var/log/unison.log

Ce fichier de configuration apporte le filtrage sur différent nom de fichier qu’il est trop difficile à sauvegarder ou inutile.
- ignore = Name pour exclure de la synchronisation des fichiers trop souvent modifiés ou volumineux.
- ignore = Path .unison pour le pas synchroniser le repertoire de unison présent dans le compte utilisateur qui lance la synchorisation. En effet unison stock ici ces tables de mise à jour qu’il modifie durant chaque synchronisation.
- Logfile Pour que unison sauvegarde les log ailleur que dans l’environement utilisateur.

Shell script linux de backup

Un petit shell script pour effectuer le backup


#!/bin/sh
#
# Backup avec Unison
# http://www.cis.upenn.edu/~bcpierce/unison/
# Charles-Christian CROIX
# 15/01/2005
# 15/07/2005

UNISON="/usr/bin/unison
MYSQLDUMP="/usr/bin/mysqldump"

$UNISON /etc ssh://backup//home/backupbyhost/$HOSTNAME/etc -silent -backups -maxbackups 3 -batch -force /etc
$UNISON /root ssh://backup//home/backupbyhost/$HOSTNAME/root -silent -backups -maxbackups 3 -batch -force /root

$MYSQLDUMP -u root --all-databases | gzip > /var/lib/mysql/dump/FullDatabasesBackup_$HOSTNAME.sql.gz
$UNISON /var/lib/mysql/dump ssh://backup//home/backupbyhost/$HOSTNAME/var/lib/mysql/dump/ -silent -batch -force /var/lib/mysql/dump

cat /var/log/unison.log | mail admin@votredomaine.fr -s "[$HOSTNAME] Backup"
cat /dev/null > /var/log/unison.log

Option de unison :
- ssh ://backup//home/backupbyhost/$HOSTNAME/etc dans cette ligne nous voyons l’alias ssh backup d’utilisé.
- -silent pour eviter que le cron utiliser pour lancer ce script ne vous spam
- -batch pour eviter l’interactivité
- -force pour forcer la mise à jour du serveur de backup même si celuis ci semble être plus récent.
- -backups pour demander de sauvegarder la version précédente d’un fichier devant être synchronisé avant son écrasement. Sur le serveur distant un fichier test.txt sera ainsi recopier en .test.txt.0.unison.bak avant que la nouvelle version de test.txt ne soit écrite.
- -maxbackups 3 Nombre machimum de sauvegarde avec l’option -backups. Ici trois version comme dans cette exemple : .test.txt.0.unison.bak .test.txt.1.unison.bak .test.txt.2.unison.bak

Concernant l’utilisation de mysqldump :
Dans cette exemple j’ai fait le choix d’extraire l’intégralité des informations des bases de données (data et structure) dans un fichier .sql que le gzip par la suite. C’est ce fichier qui est placé dans un répertoire devant être synchronisé.

Plus facilement il est possible de sauvegarder l’arborescence de mysql en entier afin de disposer des fichiers base par base et table par table. Attention de stoper mysql si besoin pour acceder au fichier en dehors de toute écriture.

Shell script aix de backup

voici le même script que précédement mais adapté a l’environnement Aix qui ne comporte pas les mêmes variables d’environement ($HOSTNAME) ni les même emplacements pour unison. En outre la commande Mail ne répond pas à la même syntaxe.


#!/bin/sh
#
# Backup avec Unison
# http://www.cis.upenn.edu/~bcpierce/unison/
# Charles-Christian CROIX
# 15/01/2005
# 15/07/2005
# 04/08/2005 Aix version

HOSTNAME="aix3"
UNISON="/usr/local/bin/unison"

cat /dev/null > /root/.unison/unison.log
date > /root/.unison/unison.log

for I in `ls -l /home | grep ^d | grep -v lost+found | awk '{print $9}'`;
do /usr/local/bin/unison /home/$I ssh://backup//home/backupbyhost/$HOSTNAME/home/$I -silent -backups -maxbackups 2 -batch -force /home/$I;
done;

$UNISON /etc ssh://backup//home/backupbyhost/$HOSTNAME/etc -silent -backups -maxbackups 3 -batch -force /etc
$UNISON /root ssh://backup//home/backupbyhost/$HOSTNAME/root -silent -backups -maxbackups 3 -batch -force /root

mail -s "[Aix3] Backup" admin@votredomaine.fr < /root/.unison/unison.log

La bouche for en shell est destiné a optenir la liste des seul répertoires présent dans /home (donc a l’exclusion des fichiers) et a filtré ceux ci par un grep -V partern en fonction de l’environnement particulié de chaque machine aix. Puis pour chaque élément de cette liste réalisé une synchronisation.

SSH authentification par clé

SSH configuration de l’authentification par clé

Au lieu de s’authentifier par mot de passe, les utilisateurs peuvent s’authentifier grâce à la cryptographie asymétrique et son couple de clés privée/publique SSH utilise pour cela la cryptographie symétrique. Son principe est simple : si A veut envoyer un message confidentiel à B, A et B doivent d’abord posséder une même clé secrète. A crypte le message avec la clé secrète et l’envoie à B sur un canal qui n’est pas forcément sécurisé. B décrypte le message grâce à la clé secrète. Toute autre personne en possession de la clé secrète peut décrypter le message.

La cryptographie symétrique est beaucoup moins gourmande en ressources processeur que la cryptographie asymétrique… mais le gros problème est l’échange de la clé secrète entre A et B. Dans le protocole SSL, qui est utilisé par SSH et par les navigateurs Web, la cryptographie asymétrique est utilisée au début de la communication pour que A et B puissent s’échanger un clé secrète de manière sécurisée… puis la suite la communication est sécurisée grâce à la cryptographie symétrique en utilisant la clé secrète échangée.

Mon exemple

Nous allons réaliser la configuration de ssh sur le mode de l’authentification par clé entre deux serveurs. Dans ma réalisation l’un est un routeur / firewall important l’autre un serveur de backup. L’idée est d’utiliser ssh pour établir la communication entre les deux serveurs au moment des sauvegardes.

Générer ses clés

Pour générer un couple de clés DSA, loger vous sur le serveur, dans mon cas je commence par le firewall. Pour cela j’ouvre un shell avec un compte utilisateur créé pour faire les sauvegardes, en l’occurrence c’est le compte « admin » tapez :

admin@Firewall: ssh-keygen -t dsa

Les clés générées ont par défaut une longueur de 1024 bits, ce qui est aujourd’hui considéré comme suffisant pour une bonne protection.

Par défaut (il demande confirmation lors du processus de création), la clé privée est stockée dans le fichier /home/user/.ssh/id_dsa avec les permissions 600 et la clé publique est stockée dans le fichier /.ssh/id_dsa.pub avec les permissions 644.

Lors de la création, il vous demande une pass phrase qui est un mot de passe pour protéger la clé privée. Cette pass phrase sert à crypter la clé privée. La « pass phrase » vous sera alors demandée à chaque utilisation de la clé privée, c’est à dire à chaque fois que vous vous connecterez en utilisant cette méthode d’authentification. Un mécanisme appelé ssh-agent permet de ne pas rentrer le mot de passe à chaque fois.

Dans mon cas comme je souhaite établir des connexions automatique entre les machines et que ne serais pas présent au milieu de la nuit pour saisir le mot de passe je ne vais pas rentrer de « pass phrase. ». A note que vous pouvez à tout moment changer la « pass phrase » qui protège votre clé privée avec la commande

admin@Firewall: ssh-keygen -p.

Autoriser votre clé publique

Pour cela, il suffit de copier votre clé publique dans le fichier /.ssh/authorized_keys du compte utilisateur local de la machine ou vous désirez vous connecter. La commande suivante permet de réaliser cette opération via SSH depuis la machine ou vous venez de créé le couple cléf publique cléf privé vers la machine :

admin@Firewall: ssh-copy-id -i ~/.ssh/id_dsa.pub login@nom_DNS_du_serveur

Bon dans mon cas comme j’ai décider que les compte utilisateur local « admin » était prévus pour cette tache ma commande aura cette forme :

admin@Firewall: ssh-copy-id -i ~/.ssh/id_dsa.pub admin@backup0

Si tous ce passe bien le mots de passe du compte « backup » sur la machine « backup0 » est demandé. Donc entrez le mot de passe de votre compte sur le serveur. En cas d’échec de connections avec la machine « backup0 » le message est explicite, merci de faire attention.

Se logguer

Bien normalement la machine « backup0 » connaît la clef de la machine firewall ceci pour le compte « admin » local depuis le compte « admin » de firewall, vous suivez ? Maintenant pour vous connecter vous n’avez plus à taper le mots de passe :


ssh admin@gtw0
Linux gtw0 2.4.18-bf2.4 #1 Son Apr 14 09:53:28 CEST 2002 i686 unknown

Most of the programs included with the Debian GNU/Linux system are
freely redistributable; the exact distribution terms for each program
are described in the individual files in /usr/share/doc/*/copyright

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Mon Jun 28 15:19:45 2004 from backup0.asr2004.ligfy.org
admin@gtw0:~$

et dans l’autre sens ?

Depuis le compte utilisateur local de la machine backup0 vers le compte admin de la machine « firewall » vous devez toujours entrer un mots de passe. Pour éviter cela reprenez cette méthode et appliquer la depuis la machine « backup0 » pour enregistrer la clef de l’utilisateur admin sur « firew

Serveur gtw0.asr2004.ligfy.org

Description du routeur / firewall principal gtw0.asr2004.ligfy.org du projet d’architecture réseau internet / intranet en environnement GNU / Linux Debian concrétisant la fin de ma formation Administrateur Système et Réseau au GRETA SUD TERTIAIRE 93

Configuration Système

Debian Woody en installation minimum (sans utilisation de dselect ni de tasksel) Aucun service réseau à l’exception de ssh configuré en « PermitRootLogin no »

Utilisateur

Création d’un utilisateur admin pour les connexions ssh de maintenance. Le compte admin à été spécialement configuré avec l’UID 999. Pour ce faire les fichiers /etc/passwd et /etc/group on été manuellement modifié ainsi que la propriété et le groupe d’appartenance du répertoire /home/admin et son contenue

DNS

Le serveur hébergeant un service DNS de façon provisoire avec en conséquences le fichier /etc/resolve.conf suivant :


search asr2004.ligfy.org
nameserver 172.16.1.250

Configuration Réseau

Passerelle par défaut : Le routeur de notre FAI 194.3.200.254

Interface sur l’Internet :
Nom : eth0
IP : 194.3.200.120
Matériel : RealTek RTL8139 Fast Ethernet
Module : Realteck inclus dans le noyau.

Interface sur le réseau DMZ
Nom : eth1
IP : 192.168.1.1
Matériel :Digital DC21040
Module : Tulip dans le fichier /etc/modules

Interface sur le réseau BACKBONE
Nom : eth2
IP : 172.16.1.1
Matériel : Digital DC21041
Module : Tulip dans le fichier /etc/modules

Avec le fichier /etc/network/interface suivant :


# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
auto lo
iface lo inet loopback

#
# INTERNET
#
auto eth0
iface eth0 inet static
address 194.3.200.120
netmask 255.255.255.0
network 194.3.200.0
broadcast 194.3.200.255
gateway 194.3.200.254

# DMZ
#
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255

# BACKBONE
#
auto eth2
iface eth2 inet static
address 172.16.1.1
netmask 255.255.0.0
network 172.16.O.O
broadcast 172.16.255.255

Routage

Le routage devant être activé le fichier /etc/network/options à la syntaxe suivante :


ip_forward=yes
spoofprotect=yes
syncookies=no

FIREWALL

La logique de sécurité décidé est la stricte séparation de l’Internet et de la structure interne de notre réseau. En conséquences les connexions en provenance de l’Internet sont systématiquement refusé. Les requêtes DNS, FTP ; WEB et SMTP arrivant sur le router sont transmise (forwarding) sous contrôle aux serveurs en charge de ces services. Les connexions sortante vers l’Internet sont autoriser seulement en provenance de la zone DNZ et exclusivement pour les requêtes DNS, FTP ; WEB et SMTP en provenance des deux serveurs en charge de ces services.

Pour répondre à la même logique les connexions en provenance de la zone BACKBONE seront systématiquement refusé à l’exception des requêtes DNS, FTP ; WEB et SMTP transmise (forwarding) sous contrôle au serveur en charge de ces services dans le zone DMZ.

La zone DMZ est depuis l’Internet comme depuis la zone BACKBONE totalement invisible.

En conséquences voici le fichier de configuration nécessaire des IPTABLES /etc/network/if-pre-up.d/iptables-start :


#!/bin/sh
# /etc/network/if-pre-up.d/iptables-start
# Script qui démarre les règles de filtrage "iptables"

#############################################
# DEBUT des "politiques par défaut"
# AVEC !
# REMISE à ZERO des règles de filtrage

# 1) Je veux que les connexions entrantes soient bloquées par défaut
# 2) Je veux que les connexions destinées à être forwardées
# soient bloquée par défaut
# 3) Je veux que les connexions sortantes soient bloquée par défaut
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Je veux que le NAT soit possible par défaut
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

# Je veux que la mutilation de paquet soit possible
# par défaut (mangle)
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

# FIN des "politiques par défaut"
#############################################

#############################################
# CREATION Chaine utilisateur pour log
#

iptables -N LOGDROP
iptables -A LOGDROP -j LOG --log-prefix LogDrop
iptables -A LOGDROP -j DROP

# FIN de creation chaine utilisateur
#############################################

#############################################
# DEBUT des exeptions aux filtrage

# Pas de filtrage sur l'interface de "loopback"
# en INPUT et OUTPUT
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# Pas de filtrage sur l'interface eth1
# sur le reseau DMZ
iptables -t filter -A INPUT -i eth1 -j ACCEPT
iptables -t filter -A OUTPUT -o eth1 -j ACCEPT

# Pas de filtrage pour l'interface eth2
# sur le reseau BACKBONE
iptables -t filter -A INPUT -i eth2 -j ACCEPT
iptables -t filter -A OUTPUT -o eth2 -j ACCEPT

# FIN des exeptions aux filtrage
#############################################

#############################################
# DEBUT des règles de filtrage

# J'accepte le forward de paquet sortant depuis la DMZ vers l'INTERNET
iptables -t filter -A FORWARD -i eth1 -o eth0 -m state --state ! INVALID -j ACCEPT

# J'accepte le forward de paquet depuis la DMZ vers le BACKBONE
iptables -t filter -A FORWARD -i eth1 -o eth2 -m state --state ! INVALID -j ACCEPT

# J'accepte le forward de paquet depuis le BACKBONE vers la DMZ
iptables -t filter -A FORWARD -i eth2 -o eth1 -m state --state ! INVALID -j ACCEPT

# J'accepte le forward entrant depuis l'INTERNET vers la DMZ
# relatifs à des connexions déjà établies
iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

# J'accepte le protocole ICMP (i.e. le "ping")
# depuis tout les reseaux sur toutes les interfaces
iptables -A INPUT -p icmp -j ACCEPT

# J'accepte les packets entrants relatifs à des connexions déjà établies
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Décommentez les deux lignes suivantes pour que le serveur FTP éventuel
# soit joignable de l'extérieur
#iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#iptables -A INPUT -p tcp --dport 21 -j ACCEPT

# Décommentez la ligne suivante pour que le serveur SSH éventuel
# soit joignable de l'extérieur
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Décommentez la ligne suivante pour que le serveur de mail éventuel
# soit joignable de l'extérieur
#iptables -A INPUT -p tcp --dport 25 -j ACCEPT

# Décommentez les deux lignes suivantes pour que le serveur de DNS éventuel
# soit joignable de l'extérieur
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

# Autoriser la sortie de requete DNS
# iptables -t filter -A OUTPUT -o eth0 -p tcp --dport 53 -j ACCEPT
# iptables -t filter -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT

# Décommentez la ligne suivante pour que le serveur Web éventuel
# soit joignable de l'extérieur
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# Autoriser la sortie de requeste HTTP et HTTPS depuis le firewall
# ceci ne concerne pas le NAT, les autres machine etant forwarder
# iptables -t filter -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
# iptables -t filter -A OUTPUT -o eth0 -p tcp --dport 443 -j ACCEPT
# même chose pour le proxy en http:8080
# iptables -t filter -A OUTPUT -o eth0 -p tcp --dport 8080 -j ACCEPT

# Décommentez la ligne suivante pour que le serveur CVS éventuel
# soit joignable de l'extérieur via le mécanisme de "pserver"
# (si les utilisateurs accèdent au serveur CVS exclusivement via SSH,
# seule la ligne concernant le serveur SSH doit être décommentée)
#iptables -A INPUT -p tcp --dport 2401 -j ACCEPT

# FIN des règles de filtrage
#############################################

#############################################
# DEBUT des règles pour le partage de connexion (i.e. le NAT)

# Décommentez la ligne suivante pour que le système fasse office de
# "serveur NAT" et remplaçez "eth0" par le nom de l'interface connectée
# à Internet
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

# FIN des règles pour le partage de connexion (i.e. le NAT)
#############################################

#############################################
# DEBUT des règles de "port forwarding"
#

# Forwarding des requetes DNS en provenance de l'internet
# vers le serveur DNS en DMZ
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 53 -i eth0 -j DNAT --to 192.168.21.1:53
iptables -t nat -A PREROUTING -p udp --dport 53 -i eth0 -j DNAT --to 192.168.21.1:53

# Forwarding des requestes DNS en provenance du BACKBONE
# vers le serveur DNS en DMZ
iptables -A FORWARD -i eth2 -o eth1 -p tcp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 53 -i eth2 -j DNAT --to 192.168.1.21:53
iptables -t nat -A PREROUTING -p udp --dport 53 -i eth2 -j DNAT --to 192.168.1.21:53

# Forwarding des requestes http en provenance du BACKBONE
# vers le serveur PROXY:8080 en DMZ
iptables -A FORWARD -i eth2 -o eth1 -p tcp --dport 8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -p udp --dport 8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 8080 -i eth2 -j DNAT --to 192.168.1.21:8080
iptables -t nat -A PREROUTING -p udp --dport 8080 -i eth2 -j DNAT --to 192.168.1.21:8080

# FIN des règles de "port forwarding"
############################################

############################################
# DEBUT des log de l'integralité des paquets
# droper dans /var/log/kernel.log

# iptables -A INPUT -j LOGDROP
# iptables -A OUTPUT -j LOGDROP
# iptables -A FORWARD -j LOGDROP

# FIN des log
############################################

Avec le fichier /etc/network/if-post-down.d/iptables-stop suivant :

#!/bin/sh
# /etc/network/if-post-down.d/iptables-stop
# Script qui arrête le filtrage "iptables"

# REMISE à ZERO des règles de filtrage
iptables -F
iptables -t nat -F

# REMISE de toutes les politiques par défaut à ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

SYSLOG

Le démon syslog a été configuré pour garder un trace global en local dans un minimum de fichier et expédier un copie au serveur en charge de la gestion des log de l’architecture.

Avec le fichier /etc/syslog.conf suivant :


#: /etc/syslog.conf Configuration file for syslogd.
# For more information see syslog.conf(5)
# manpage.

#
# First some standard logfiles. Log by facility.
#

auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
*.*;auth,authpriv.none @backup0.asr2004.ligfy.org

DOCUMENTATION

IpTables par l’exemple : Lea-Linux

Firewall et sécurité d’un réseau personnel sous Linux olivieraj.free.fr