Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 23-11-2015 20:54:43

totof68
Membre
Lieu : Colmar
Inscription : 09-02-2015

Configuration Iptables

Bonjour tout le monde,

Voila, je suis en train de me remettre dans iptables avec plusieurs réseau.

J'ai donc une box qui donne l'accès à internet, elle est sur eth0 du serveur puis cela ressort par eth1 pour aller sur un switch tp-link.

BOX --> eth0 Serveur  --> eth1 - Reseau Bureautique
                            -->br0 - pont pour le réseau LXC
                           
eth0 192.168.1.253
eth1 192.168.2.254
br0 192.168.3.1

Je suis parti pour tout bloquer et n'autoriser que ce dont j'ai besoins.

Pour le moment avec quelques tests, j'ai autoriser le HTTP(S) en FORWARD sur mon LXC web


#!/bin/sh

#########################
# Politiques par défaut #
#########################

# On vire tout
iptables -t filter -F
iptables -L
iptables -Z

# Vider les règles personnelles
iptables -t filter -X
echo - Vidage : [OK]

# Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT

iptables -A FORWARD -o br0 -j DROP

echo - Interdire toutes connexions : [OK]

# On garde les connexions etablies
iptables -t filter  -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter  -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
echo - Connexion actuelle : [OK]

# Autoriser le loopback (reseau local)
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo - LOOPBACK : [OK]

# Masquerade pour le reseau eth1
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE

########################
# Création des chaines #
########################


###############################
# Règles INPUT OUTPUT FORWARD #
###############################

# Autorisation ICMP
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

#Autorisation SSH
iptables -A INPUT -i eth1 -s 192.168.2.0/24 -d 192.168.2.254 -p tcp --dport 22 -j ACCEPT

# APACHE NGINX Le WEB : HTTP + HTTPS
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT


# DNS
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT


###########
# FORWARD #
###########
# On accepte les connexions etablis FORWARD
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

# On autorise le Forward HTTP HTTPS LXC WWW
iptables -I FORWARD -p tcp -d 192.168.3.2 --dport 80 -j ACCEPT
iptables -I FORWARD -p tcp -d 192.168.3.2 --dport 443 -j ACCEPT
iptables -I FORWARD -p tcp -d 192.168.3.0/24 --dport 53 -j ACCEPT

###################################
# Règles PREROUTING / POSTROUTING #
###################################

## Règles LXC WWW prod


iptables -t nat -A PREROUTING -i eth1 -d 192.168.2.254 -p tcp -m tcp --dport 80 -m comment --comment http -j DNAT --to-destination 192.168.3.2
iptables -t nat -A PREROUTING -i eth0 -d 192.168.1.253 -p tcp -m tcp --dport 80 -m comment --comment http -j DNAT --to-destination 192.168.3.2

iptables -t nat -A PREROUTING -i eth1 -d 192.168.2.254 -p tcp -m tcp --dport 443 -m comment --comment https -j DNAT --to-destination 192.168.3.2
iptables -t nat -A PREROUTING -i eth0 -d 192.168.1.253 -p tcp -m tcp --dport 443 -m comment --comment https -j DNAT --to-destination 192.168.3.2

#######
# LOG #
#######

## On log les paquets en entrée.
iptables -A INPUT -j LOG

## On log les paquets forward.
iptables -A FORWARD -j LOG
 



Bon par rapport a ce matin j'ai des choses qui marche quand même, comme on dis petit à petit l'oiseau fait son nid.

Petit soucis, si je vais sur le LXC web, au niveau des updates, petit soucis ça ne fonctionne pas. Je penses que j'ai du louper des petites choses ^^

Quelqu'un aurait une petite idée ou des conseilles ? Je suis preneur smile

Dernière modification par totof68 (23-11-2015 21:01:57)

Hors ligne

#2 24-11-2015 11:17:13

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : Configuration Iptables

Bonjour,

N'y a-t-il rien à régler sur la box ?  http://serverfault.com/questions/487522 … d-iptables

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#3 24-11-2015 13:12:54

totof68
Membre
Lieu : Colmar
Inscription : 09-02-2015

Re : Configuration Iptables

Merci pour ta réponse.

Coté box non je n'ai rien à faire de plus. J'ai déjà ajouter les routes qui vont bien, j'avais déjà un forward qui fonctionnait bien mais j'avais envie de limiter les protocoles.
Par exemple :
- Autorisation HTTP eth1 --> eth0
- Autorisation DNS eth1 --> eth0
- Bloquer tout le reste

Hier soir en allant de site en site, j'ai remodifier mon script et pour le moment il est comme ça :


#!/bin/bash

#########################################################
#  Script iptables pour un firewall a deux interfaces   #
#                                                       #
# Les variables de ce script, que vous devez configurer #
# pour correspondre a votre systeme sont :              #
#                                                       #
#   NETIF, LANIF et SSH                                 #
#                                                       #
# D'autres regles sont définies dans le script mais     #
# desactivees par defaut.                               #
#########################################################

#
# Definition des interfaces
#

# Internet
NETIF="eth0"

# Reseau local
LANIF="eth1"

LXCIF="br0"
#
# Acces SSH *toujours* autorise depuis cette ip
#
SSH="192.168.2.20"

#
# Calcul des differentes valeurs dont le script a besoin
#
LANG="C"

function calcsubnet {
  # Calcul de l'adresse du reseau

  ip=$1
  nm=$2

  ip4="${ip##*.}" ; x="${ip%.*}"
  ip3="${x##*.}" ; x="${x%.*}"
  ip2="${x##*.}" ; x="${x%.*}"
  ip1="${x##*.}"  

  nm4="${nm##*.}" ; x="${nm%.*}"
  nm3="${x##*.}" ; x="${x%.*}"
  nm2="${x##*.}" ; x="${x%.*}"
  nm1="${x##*.}"

  let sn1="$ip1&$nm1"
  let sn2="$ip2&$nm2"
  let sn3="$ip3&$nm3"
  let sn4="$ip1&$nm4"

  subnet=$sn1.$sn2.$sn3.$sn4

  echo $subnet
}

#
# Extraction des adresses IP
#
NETIP=`ifconfig ${NETIF} | grep "inet addr" | awk '{print $2}' | sed 's/addr://'`
NETMK=`ifconfig ${NETIF} | grep "inet addr" | awk '{print $4}' | sed 's/Mask://'`
NETSN=`calcsubnet ${NETIP} ${NETMK}`

LANIP=`ifconfig ${LANIF} | grep "inet addr" | awk '{print $2}' | sed 's/addr://'`
LANMK=`ifconfig ${LANIF} | grep "inet addr" | awk '{print $4}' | sed 's/Mask://'`
LANSN=`calcsubnet ${LANIP} ${LANMK}`

LXCIP=`ifconfig ${LXCIF} | grep "inet addr" | awk '{print $2}' | sed 's/addr://'`
LXCMK=`ifconfig ${LXCIF} | grep "inet addr" | awk '{print $4}' | sed 's/Mask://'`
LXCSN=`calcsubnet ${LXCIP} ${LXCMK}`


#
# Affichage des parametres
#
echo "[Firewall] Enumeration des parametres"
echo ""
echo "   Internet :"
echo "      Interface : ${NETIF}"
echo "             Ip : ${NETIP}"
echo "         Subnet : ${NETSN}"
echo "           Mask : ${NETMK}"
echo ""
echo "   Reseau Bureautique :"
echo "      Interface : ${LANIF}"
echo "             Ip : ${LANIP}"
echo "         Subnet : ${LANSN}"
echo "           Mask : ${LANMK}"
echo ""
echo "   Reseau LXC :"
echo "      Interface : ${LXCIF}"
echo "             Ip : ${LXCIP}"
echo "         Subnet : ${LXCSN}"
echo "           Mask : ${LXCMK}"
echo ""
echo "   Adresse d'administration SSH :"
echo "             Ip : ${SSH}"
echo ""
echo "--------------------------------------"
echo ""


#########################
# Politiques par défaut #
#########################

# Initialisation de la table FILTER
echo "[Firewall] Nettoyage de la table FILTER"
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT   DROP
iptables -t filter -P OUTPUT  DROP
iptables -t filter -P FORWARD DROP

iptables -A FORWARD -o ${$LXCIF} -j DROP


# Initialisation de la table NAT
echo "[Firewall] Nettoyage de la table NAT"
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

# Initialisation de la table MANGLE
echo "[Firewall] Nettoyage de la table 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

# Log paquets acceptes
echo "[Firewall] Creation des regles pour logguer les paquets ACCEPTES"
iptables -N INPACCP
iptables -A INPACCP -j LOG --log-prefix "[INPUT_ACCEPT  ] "
iptables -A INPACCP -j ACCEPT

iptables -N FWDACCP
iptables -A FWDACCP -j LOG --log-prefix "[FORWARD_ACCEPT] "
iptables -A FWDACCP -j ACCEPT

iptables -N OUTACCP
iptables -A OUTACCP -j LOG --log-prefix "[OUTPUT_ACCEPT ] "
iptables -A OUTACCP -j ACCEPT

# Log paquets refuses
echo "[Firewall] Creation des regles pour logguer les paquets DROPPES"
iptables -N INPDROP
iptables -A INPDROP -j LOG --log-prefix "[INPUT_DROP    ] "
iptables -A INPDROP -j DROP

iptables -N FWDDROP
iptables -A FWDDROP -j LOG --log-prefix "[FORWARD_DROP  ] "
iptables -A FWDDROP -j DROP

iptables -N OUTDROP
iptables -A OUTDROP -j LOG --log-prefix "[OUTPUT_DROP   ] "
iptables -A OUTDROP -j DROP

# Initialisation de la boucle locale
echo "[Firewall] Configuration de la boucle locale (lo)"
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Accepte les connection relatives et etablies
echo "[Firewall] Configuration des connexions RELATIVES et ETABLIES"
iptables -A INPUT   -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT  -m state --state RELATED,ESTABLISHED -j ACCEPT

# NAT Reseau
echo "[Firewall] Configuration de la translation d'adresses (NAT) vers (${NETIP})"
iptables -t nat -A POSTROUTING -o ${NETIF} -s ${LANSN}/${LANMK} -j SNAT --to-source ${NETIP}


# Autorise les connexions sortantes du serveur
echo "[Firewall] Autorisation des paquets sortants"
iptables -A OUTPUT -m state --state NEW -j OUTACCP

# Autorise les connexions SSH depuis le reseau local
echo "[Firewall] Autorisation du SSH depuis le reseau local (${LANIF}, ${LANSN}/${LANMK})"
iptables -A INPUT -i ${LANIF} -s ${LANSN}/${LANMK} -p tcp --dport 22 -m state --state NEW -j INPACCP

# Autorisation des nouvelles connexions
#echo "[Firewall] Autorisation des paquets entrants depuis le reseau local (${LANIF}, ${LANSN}/${LANMK})"
#iptables -A INPUT -i ${LANIF} -s ${LANSN}/${LANMK} -m state --state NEW -j INPACCP

# Log des connexions refusees en FORWARD
#echo "[Firewall] Bloquage des protocoles devant passer par le proxy"
#iptables -A FORWARD -i ${LANIF} -p tcp --dport 21  -j FWDDROP # FTP
#iptables -A FORWARD -i ${LANIF} -p tcp --dport 80  -j FWDDROP # HTTP
#iptables -A FORWARD -i ${LANIF} -p tcp --dport 443 -j FWDDROP # HTTPS


###############
# Forward eth0#
###############

# Autorise le forwarding de eth1 vers eth0
echo "[Firewall] Autorisation du forwarding depuis le reseau local (${LANIF}, ${LANSN}/${LANMK}) vers l'internet (${NETIF})"
iptables -A FORWARD -i ${LANIF} -s ${LANSN}/${LANMK} -o ${NETIF} -m state --state NEW -j FWDACCP


###############
# Forward br0 #
###############

# On autorise le Forward HTTP HTTPS LXC WWW
iptables -I FORWARD -p tcp -d ${LXCSN}/${LXCMK} --dport 80 -j FWDACCP
iptables -I FORWARD -p tcp -d ${LXCSN}/${LXCMK} --dport 443 -j FWDACCP
iptables -I FORWARD -p tcp -d ${LXCSN}/${LXCMK} --dport 4949 -j FWDACCP

# On interdit le forwarding de br0
iptables -A FORWARD -o ${$LXCIF} -j DROP


###########
# NAT LXC #
###########

## Règles LXC WWW prod
iptables -t nat -A PREROUTING -i eth1 -d 192.168.2.254 -p tcp -m tcp --dport 80 -m comment --comment http -j DNAT --to-destination 192.168.3.2
iptables -t nat -A PREROUTING -i eth0 -d 192.168.1.253 -p tcp -m tcp --dport 80 -m comment --comment http -j DNAT --to-destination 192.168.3.2

iptables -t nat -A PREROUTING -i eth1 -d 192.168.2.254 -p tcp -m tcp --dport 443 -m comment --comment https -j DNAT --to-destination 192.168.3.2
iptables -t nat -A PREROUTING -i eth0 -d 192.168.1.253 -p tcp -m tcp --dport 443 -m comment --comment https -j DNAT --to-destination 192.168.3.2

## Munin
iptables -t nat -A PREROUTING -i eth1 -d 192.168.2.254 -p tcp -m tcp --dport 4949 -m comment --comment munin-node -j DNAT --to-destination 192.168.3.2


# Log des connexions refusees en INPUT
echo "[Firewall] Log et bloquage de tout le reste"
iptables -A INPUT   -j INPDROP
iptables -A FORWARD -j FWDDROP
iptables -A OUTPUT  -j OUTDROP

echo ""
 



J'ai arrêter hier assez tard, mais il me semble que j'avais l'accès internet depuis le réseau eth1
Les postes en wifi (coté eth0) n'ont pas accès à l'interface de configu du switch (sur le réseau eth1) donc c'est bon.
Au niveau des conteneurs LXC, on à bien accès au HTTP uniquement je penses, d'ou le problème d'update.

A mon avis, cela doit être à ce niveau la que je dois apporter des modifications :


# Autorise le forwarding de eth1 vers eth0
echo "[Firewall] Autorisation du forwarding depuis le reseau local (${LANIF}, ${LANSN}/${LANMK}) vers l'internet (${NETIF})"
iptables -A FORWARD -i ${LANIF} -s ${LANSN}/${LANMK} -o ${NETIF} -m state --state NEW -j FWDACCP



Si je ne dis pas trop de connerie, cette règle permet de laisser passer toutes les requêtes à l'état NEW de eth1 vers eth0

La règle suivante :


# Accepte les connection relatives et etablies
echo "[Firewall] Configuration des connexions RELATIVES et ETABLIES"
iptables -A INPUT   -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT  -m state --state RELATED,ESTABLISHED -j ACCEPT
 



Nous indique qu'on autorise le retour d'une requêtes établie.

Je ne suis pas sur mon serveur, donc la syntaxe ne sera pas exacte, mais il ne faudrait pas que je fasse quelque chose du style


# Autorise le forwarding de eth1 vers eth0
echo "[Firewall] Autorisation du forwarding depuis le reseau local (${LANIF}, ${LANSN}/${LANMK}) vers l'internet (${NETIF})"
iptables -A FORWARD -i ${LANIF} -s ${LANSN}/${LANMK} -o ${NETIF} -p tcp --dport 80,443,53 -m state --state NEW -j FWDACCP
iptables -A FORWARD -i ${LANIF} -j DROP
 



ou encore peut être


iptables -A FORWARD -p tcp -d ${LXCSN}/${LXCMK} --dport 80,443,53 -j FWDACCP
 



Cela ne devrait pas dans l'ordre regarder si la requêtes est HTTP / HTTPS on autorise le FORWARD, sinon on le drop ?

Dernière modification par totof68 (24-11-2015 13:43:13)

Hors ligne

Pied de page des forums