Améliorer mes règles dans iptables

Le système préconisé par la Fondation Raspberry Pi

Modérateurs : Francois, maxty01

Répondre
dudux2
Messages : 11
Enregistré le : mer. 6 avr. 2016 00:38

Améliorer mes règles dans iptables

Message par dudux2 » ven. 20 janv. 2017 14:59

Bonjour,

J'aimerais un coup de pousse pour améliorer mes règles dans iptables: Je vous décris mon utilisation ci-dessous.

- Tout d'abors mon Raspberry3 est utilisé comme serveur web
- il est connecté derrière ma box avec l'interface eth0
- j'utilise ssh en local et voudrais autorisé seulement l'ip 192.168.1.1 à y accèdé
- pareil pour monit je voudrais autorisé seulement l'ip 192.168.1.1 à y accèdé
- postfix est utilisé pour l'envois de mail depuis le serveur (root@localhost) vers une boite mail xxxx@hotmail.com
- pour apache il y a un vhost public sur le port 80 et un vhost privé sur le port 8080 accessible seulement par l'ip 192.168.1.1
- j'aimerais configurer samba pour un partage ntfs vers l'ip 192.168.1.1

je suis assez perdu avec (-i etho / -o eth0) (--sport / --dport) (-s 192.168.1.1 / -d 192.168.1.1 )

J'ai une erreur: (Bad argument `–s') lorsque j'ajoute "-s $IP_ADMIN" pour mes regles SSH et Samba, mais cela fonctionne pour MONIT

Code : Tout sélectionner

 # SSH
/sbin/iptables -t filter -A INPUT -i $IFACE -p tcp –s $IP_ADMIN --dport $PORT_SSH -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o $IFACE -p tcp –d $IP_ADMIN --sport $PORT_SSH -j ACCEPT

Code : Tout sélectionner

# Monit         
/sbin/iptables -t filter -A INPUT -i $IFACE -p tcp -s $IP_ADMIN --dport $PORT_MONIT -j ACCEPT
merci pour le coup de pousse que vous m'apporterez pour améliorer la protection de par feu

Code : Tout sélectionner

#!/bin/sh
### BEGIN INIT INFO
# Provides:          firewall
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Demarrage du script lors de la sequence de boot
# Description:       Ajout des regles de parefeu
### END INIT INFO



IP_ADMIN="192.168.1.1"
IFACE="eth1"
WEB_LOCAL_PORT="8080"
WEB_EXTERN_PORT="80"
PORT_SSH="222"
PORT_MONIT="552"



# Variable de couleur shell
yellowBold='\033[1;33m'
green='\033[0;32m'
yellow='\033[0;33m'
red='\033[0;31m'
greenBgWhiteBold='\033[1;42m'
redBgWhiteBold='\033[1;41m'
NC='\033[0m'
OK="${yellowBold}[${NC}${green}OK${NC}${yellowBold}]${NC}"

PATH=/bin:/sbin:/usr/bin:/usr/sbin

if ! [ -x /sbin/iptables ]; then
 exit 0
fi


##########################
# Application des règles
##########################

fw_start()
{
echo ""
echo "  - ${green} Initialisation du firewall : ${NC} OK"

# Vidage des tables et des regles personnelles
/sbin/iptables -t filter -F
/sbin/iptables -t filter -X
echo "  - ${green} Vidage des regles et des tables : ${NC} OK"

# Interdire toutes connexions entrantes et sortantes
/sbin/iptables -t filter -P INPUT DROP
/sbin/iptables -t filter -P FORWARD DROP
/sbin/iptables -t filter -P OUTPUT DROP
echo "  - ${green} Interdire toutes les connexions entrantes et sortantes : ${NC} OK"

# Ne pas casser les connexions etablies
# /sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# /sbin/iptables -A OUTPUT -m state ! --state INVALID -j ACCEPT
# echo "  - ${green} Ne pas casser les connexions établies : ${NC} OK"

########## Regles ##########

# Autoriser loopback
/sbin/iptables -t filter -A INPUT -i lo -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo "  - ${green} Autoriser le loopback : ${NC} OK"

# Autoriser le ping dans les 2 sens
#/sbin/iptables -t filter -A INPUT -p icmp -j ACCEPT
#/sbin/iptables -t filter -A OUTPUT -p icmp -j ACCEPT
#echo "  - ${green} Autoriser le ping (serveur vers extérieur): ${NC} OK"

# Autoriser le ping (serveur vers extérieur)
/sbin/iptables -t filter  -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
/sbin/iptables -t filter  -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
echo "  - ${green} Autoriser le ping (serveur vers extérieur): ${NC} OK"

# Autoriser le ping (extérieur vers serveur)
#/sbin/iptables -t filter  -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
#/sbin/iptables -t filter  -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
#echo "  - ${green} Autoriser le ping (extérieur vers serveur): ${NC} OK"

#On accepte la transmission des erreurs de ping
#/sbin/iptables -t filter -A INPUT -p icmp -m state --state RELATED -j ACCEPT
#echo "  - ${green} Autoriser la transmission des erreurs de ping: ${NC} OK"

# Autoriser la résolution de nom
/sbin/iptables -t filter -A INPUT -i $IFACE -p udp --sport 53 -j ACCEPT
echo "  - ${green} Autoriser la résolution de nom : ${NC} OK"

# Autoriser NTP
/sbin/iptables -t filter -A OUTPUT -o $IFACE -p udp --dport 123 -j ACCEPT
echo "  - ${green} Autoriser NTP : ${NC} OK"


# # Autoriser SSH
# /sbin/iptables -t filter -A INPUT -i $IFACE -p tcp –s $IP_ADMIN --dport $PORT_SSH -j ACCEPT
# /sbin/iptables -t filter -A OUTPUT -o $IFACE -p tcp –d $IP_ADMIN --sport $PORT_SSH -j ACCEPT
# echo "  - ${green} Autoriser SSH : ${NC} OK"

# Autoriser SSH
/sbin/iptables -t filter -A INPUT -i $IFACE -p tcp --dport $PORT_SSH -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o $IFACE -p tcp --sport $PORT_SSH -j ACCEPT
echo "  - ${green} Autoriser SSH : ${NC} OK"

# Autoriser HTTP
/sbin/iptables -t filter -A OUTPUT -p tcp --dport $WEB_EXTERN_PORT -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp --dport $WEB_EXTERN_PORT -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o $IFACE -p tcp -d $IP_ADMIN --dport $WEB_LOCAL_PORT -j ACCEPT
/sbin/iptables -t filter -A INPUT -i $IFACE -p tcp -s $IP_ADMIN --dport $WEB_LOCAL_PORT -j ACCEPT
echo "  - ${green} Autoriser HTTP : ${NC} OK"

# Autoriser HTTPS
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT
echo "  - ${green} Autoriser HTTPS : ${NC} OK"


# Autoriser SMTP
#/sbin/iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
echo "  - ${green} Autoriser SMTP : ${NC} OK"

# # Autoriser Samba
# /sbin/iptables -t filter -A INPUT -i $IFACE -p tcp –s $IP_ADMIN --dport 137 -j ACCEPT
# /sbin/iptables -t filter -A INPUT -i $IFACE -p tcp –s $IP_ADMIN --dport 138 -j ACCEPT
# /sbin/iptables -t filter -A INPUT -i $IFACE -p tcp –s $IP_ADMIN --dport 139 -j ACCEPT
# /sbin/iptables -t filter -A INPUT -i $IFACE -p tcp –s $IP_ADMIN --dport 445 -j ACCEPT
# echo "  - ${green} Autoriser Samba : ${NC} OK"

# Autoriser Samba
/sbin/iptables -t filter -A INPUT -i $IFACE -p tcp --dport 137 -j ACCEPT
/sbin/iptables -t filter -A INPUT -i $IFACE -p tcp --dport 138 -j ACCEPT
/sbin/iptables -t filter -A INPUT -i $IFACE -p tcp --dport 139 -j ACCEPT
/sbin/iptables -t filter -A INPUT -i $IFACE -p tcp --dport 445 -j ACCEPT
echo "  - ${green} Autoriser Samba : ${NC} OK"

# # Autoriser Monit
/sbin/iptables -t filter -A INPUT -i $IFACE -p tcp -s $IP_ADMIN --dport $PORT_MONIT -j ACCEPT
echo "  - ${green} Autoriser Monit : ${NC} OK"

########## Regles pour sécuriser ########## 

## Anti-spoofing rules
/sbin/iptables -A INPUT -s 0.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -s 10.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -s 127.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -s 172.16.0.0/12 -j DROP
/sbin/iptables -A INPUT -s 169.254.0.0/16 -j DROP
/sbin/iptables -A INPUT -s 192.168.0.0/16 -j DROP
/sbin/iptables -A INPUT -s 224.0.0.0/3 -j DROP
/sbin/iptables -A INPUT -s 240.0.0.0/5 -j DROP

/sbin/iptables -A INPUT -d 0.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -d 240.0.0.0/5 -j DROP
/sbin/iptables -A INPUT -d 224.0.0.0/3 -j DROP
/sbin/iptables -A INPUT -d 239.255.255.0/24 -j DROP
/sbin/iptables -A INPUT -d 255.255.255.255 -j DROP
/sbin/iptables -A INPUT -d 240.0.0.0/5 -j DROP
echo "  - ${green} Règles anti-usurpation : ${NC} OK"

/sbin/iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
/sbin/iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
/sbin/iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
echo "  - ${green} Règles anti-usurpation tcp/udp/icmp : ${NC} OK"

#for SMURF attack protection
iptables -t filter -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -t filter -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -t filter -A INPUT -p icmp -m limit --limit 1/second -j ACCEPT
echo "  - ${green} Règles anti-SMURF attack protection: ${NC} OK"

# Interdire le Scan de ports
## NULL-SCAN
iptables -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j LOG --log-prefix "IPTABLES NULL-SCAN:"
iptables -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

## XMAS-SCAN
iptables -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "IPTABLES XMAS-SCAN:"
iptables -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

## SYNFIN-SCAN
iptables -t filter -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j LOG --log-prefix "IPTABLES SYNFIN-SCAN:"
iptables -t filter -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

## NMAP-XMAS-SCAN
iptables -t filter -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j LOG --log-prefix "IPTABLES NMAP-XMAS-SCAN:"
iptables -t filter -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP

## FIN-SCAN
iptables -t filter -A INPUT -p tcp --tcp-flags ALL FIN -j LOG --log-prefix "IPTABLES FIN-SCAN:"
iptables -t filter -A INPUT -p tcp --tcp-flags ALL FIN -j DROP

## NMAP-ID
iptables -t filter -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j LOG --log-prefix "IPTABLES NMAP-ID:"
iptables -t filter -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j DROP

## SYN-RST
iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "IPTABLES SYN-RST:"
iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

## SYN-FLOODING 
iptables -t filter -N syn-flood
iptables -t filter -A INPUT -p tcp --syn -j syn-flood
iptables -t filter -A syn-flood -m limit --limit 1/sec --limit-burst 4 -j RETURN
iptables -t filter -A syn-flood -j LOG --log-prefix "IPTABLES SYN-FLOOD:"
iptables -t filter -A syn-flood -j DROP

## Make sure NEW tcp connections are SYN packets
iptables -t filter -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "IPTABLES SYN-FLOOD:"
iptables -t filter -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

## port scaner
iptables -t filter -N port-scan
iptables -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j port-scan
iptables -t filter -A port-scan -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -t filter -A port-scan -j LOG --log-prefix "IPTABLES PORT-SCAN:"
iptables -t filter -A port-scan -j DROP
echo "  - ${green} Règles anti-scan de port : ${NC} OK"

# Previent des attack de type Denial of Service (DoS) 
iptables -t filter -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
echo "  - ${green} Règles anti-scan de port : ${NC} OK"

# Autres protections réseau
# (certaines ne fonctionneront que pour certaines versions de noyau)
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
echo 0 > /proc/sys/net/ipv4/ip_forward 
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians 
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route  
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects 
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo "  - ${green} Règles de proction réseaux : ${NC} OK"
echo ""


# So are security package updates:
# Note: You can hardcode the IP address here to prevent DNS spoofing
# and to setup the rules even if DNS does not work but then you
# will not "see" IP changes for this service:
/sbin/iptables -A OUTPUT -p tcp -d security.debian.org --dport 80 -j ACCEPT


}

sw_help()
{
    echo "  - ${green}Pour résumer, voici un récapitulatif de certaines attributs définis dans nos règles : ${NC}"
    echo "  - ${green}Dans la ligne de votre nouvelle règle, il faut préciser les paquets sont traités en entrée, en sortie ou bien s’ils sont routés: ${NC}"
    echo "  - ${yellow}FORWARD ${NC}${blue}: Traite les paquets routés. ${NC}"
    echo "  - ${yellow}INPUT ${NC}${blue}: Traite les paquets entrants. ${NC}"
    echo "  - ${yellow}OUTPUT ${NC}${blue}: Traite les paquets sortants. ${NC}"
    echo ""
    echo "  - ${green}Ceci définit l’action à faire sur les paquets d’une règle inscrite dans la table des règles : ${NC}"
    echo "  - ${yellow}DROP ${NC}${blue}: Le paquet est rejeté, aucune notification n’est envoyée à la source. ${NC}"
    echo "  - ${yellow}REJECT ${NC}${blue}: Le paquet est rejeté, une notification est envoyée à la source ${NC}"
    echo "  - ${yellow}ACCEPT ${NC}${blue}: Le paquet est accepté. ${NC}"
    echo ""
    echo "  - ${green}La définition des attributs pour les règles: ${NC}"
    echo "  - ${yellow}-A ${NC}${blue}: ajoute une règle ${NC}"
    echo "  - ${yellow}-D ${NC}${blue}: supprime un règle ${NC}"
    echo "  - ${yellow}-F ${NC}${blue}: vide les tables ${NC}"
    echo "  - ${yellow}-X ${NC}${blue}: vide les règles ${NC}"
    echo "  - ${yellow}-L ${NC}${blue}: liste les règles ${NC}"
    echo "  - ${yellow}-i ${NC}${blue}: interface entrante ${NC}"
    echo "  - ${yellow}-o ${NC}${blue}: interface sortante ${NC}"
    echo "  - ${yellow}-p ${NC}${blue}: protocole ${NC}"
    echo "  - ${yellow}-s ${NC}${blue}: nom d’hôte ou adresse ip ${NC}"
    echo "  - ${yellow}-j ${NC}${blue}: jump, action de la règle (ACCEPT, DROP, REJECT ) ${NC}"
    echo "  - ${yellow}-m ${NC}${blue}: options de concordance ${NC}"
    echo "  - ${yellow}–dport ${NC}${blue}: numéro port de destination ${NC}"
    echo "  - ${yellow}–sport ${NC}${blue}: numéro du port source ${NC}"
    echo ""
}

##########################
# Bloque tout les packets routé et entrant
##########################
 
fw_blockAll () 
{
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT
}
 
##########################
# Vidange des règles du firewal
##########################
 
fw_clear () 
{
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -t nat -F
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -F
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -F 
/sbin/iptables -t raw -X
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
}

##########################
# Test the Firewall rules
##########################
 
fw_save () 
{
    /sbin/iptables-save > /etc/iptables.backup
}
 
fw_restore ()
{
if [ -e /etc/iptables.backup ]; then
    /sbin/iptables-restore < /etc/iptables.backup
fi
}
 
fw_test ()
{
    fw_save
    fw_blockAll
    fw_start
    sleep 120
    echo "  - ${green}Restauration des anciennes règles du parefeu...${NC} OK"
    fw_restore
    
}

case "$1" in
start|restart)
    echo ""
    echo "  - ${green}Démarrage du parfeu...${NC} OK"
    fw_blockAll
    fw_start
    echo "  - ${green}Redémarrage de Fail2ban pour la restauration des règles${NC} OK"
    # relance fail2ban si installe
    if [ -x /usr/bin/fail2ban-server ]; then
        service fail2ban restart
    fi
        echo "\n${greenBgWhiteBold}Fait!${NC} OK"
    echo ""
    ;;

blockAll)
    echo ""
    echo "  - ${green}Verrouillage du traffic...${NC} OK"
    fw_blockAll
    echo "\n${greenBgWhiteBold}Fait!${NC} OK"
    echo ""
    ;;

clear)
    echo ""
    echo "  - ${green}Vide les règles du parefeu...${NC} OK"
    fw_clear
    echo "\n${greenBgWhiteBold}Fait!${NC} OK"
    echo ""
    ;;

test)
    echo ""
    echo "  - ${green}Test des nouvelles règles du parefeu...${NC} OK"
    echo "  - ${green}L'ancienne configuration sera restauré dans 120 secondes...${NC} OK"
    fw_test
    echo "\n${greenBgWhiteBold}Fait!${NC} OK"
    echo ""
    ;;

save)
    echo ""
    echo "  - ${green}Sauvegarde les règles actuelles: ${NC}"
    fw_save
    echo "\n${greenBgWhiteBold}Fait!${NC} OK"
    echo ""
    ;; 
    
restore)
    echo ""
    echo "  - ${green}Restaure les règles sauvegardées: ${NC}"
    fw_restore
    echo "\n${greenBgWhiteBold}Fait!${NC} OK"
    echo ""
    ;; 
    
list)
    echo ""
    echo "  - ${green}Liste des règles : ${NC}"
    /sbin/iptables -v -L --line-numbers
    echo "\n${greenBgWhiteBold}Fait!${NC} OK"
    echo ""
    ;;

status)
    echo ""
    echo "  - ${green}Liste des règles : ${NC}"
    /sbin/iptables -L
    echo "\n${greenBgWhiteBold}Fait!${NC} OK"
    echo ""
    ;;   
    
help)
    echo ""
    echo "  - ${green}Rappel : ${NC}"
    sw_help
    echo "\n${greenBgWhiteBold}Fait!${NC} OK"
    echo ""
    ;;
    
*)
    echo "  - ${yellow}Usage: $0 {start|blockAll|restart|clear|test|list|status|save|restore|help}${NC}"
    echo "  - ${red}Attention blockAll bloque tous trafic entrant/sortant!!!${NC}"
    echo "  - ${red}Attention clear autorise tous trafic entrant/sortant!!!${NC}"
    exit 1
    ;;
esac
exit 0



Répondre

Retourner vers « Raspbian »