logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

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

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

#1 21-01-2017 23:00:34

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Améliorer mes règles dans iptables

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

 # 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



# 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


#!/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


 


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#2 22-01-2017 00:17:57

raleur
Membre
Inscription : 03-10-2014

Re : Améliorer mes règles dans iptables

Je ne sais pas quel genre de tiret long tu as utilisé, mais ce n'est pas le bon caractère.

Dernière modification par raleur (22-01-2017 00:18:17)


Il vaut mieux montrer que raconter.

Hors ligne

#3 22-01-2017 13:21:27

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Améliorer mes règles dans iptables

raleur a écrit :

Je ne sais pas quel genre de tiret long tu as utilisé, mais ce n'est pas le bon caractère.



Ah bien vue c'était cela mon problème, d'ailleurs bravo à celui qui à mi en place la coloration syntaxique, car au moins on le voit sur votre site...

Je pense que cela provient d'un copié collé d'un site web...

Mon script corrigé


#!/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.211"
IFACE="eth0"
WEB_LOCAL_PORT="8080"
WEB_EXTERN_PORT="80"
PORT_SSH="22022"
PORT_MONIT="2552"
SERVER_LOCAL_IP="192.168.1.2"
PORT_SERVER_DUDUINO="8888"
IP_DUDUINO="192.168.1.240"
PORT_DUDUINO="8080"


# 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 Duduino
/sbin/iptables -t filter -A INPUT -i $IFACE -p udp -s $IP_DUDUINO --dport $PORT_DUDUINO -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o $IFACE -p udp -d $SERVER_LOCAL_IP --sport $PORT_SERVER_DUDUINO -j ACCEPT
echo  - ${green} Autoriser Duduino : ${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 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-prefixIPTABLES 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-prefixIPTABLES 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-prefixIPTABLES 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-prefixIPTABLES 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-prefixIPTABLES 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-prefixIPTABLES 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-prefixIPTABLES 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-prefixIPTABLES 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-prefixIPTABLES 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-prefixIPTABLES 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 notsee 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

 


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#4 22-01-2017 14:26:16

raleur
Membre
Inscription : 03-10-2014

Re : Améliorer mes règles dans iptables

Rassure-moi : tu as pêché ce script quelque part et tu n'as pas la moindre idée de ce qu'il fait n'est-ce pas ?
Non pas que cette hypothèse soit vraiment rassurante, mais l'inverse est bien pire.

Il vaut mieux montrer que raconter.

Hors ligne

#5 22-01-2017 18:18:35

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Améliorer mes règles dans iptables

big_smile C'est un peu ça l'idée... je bidouille...

Après avoir rassemblé les bonne bidouille qui me semble intéressante, maintenant place au test et à la compréhension.

Mon petit serveur est vide, il me permet juste d'apprendre à faire...

En plus j'ai pas mal de monde à la porte qui test, je croyais vraiment pas que l'on était scanné à ce point la...

Dernière modification par dudux2 (22-01-2017 18:22:00)


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#6 22-01-2017 19:18:18

dudux2
Membre
Distrib. : Rasbian
Noyau : Buster 4.19
(G)UI : Pas de gestionnaire de fenêtre
Inscription : 21-01-2017

Re : Améliorer mes règles dans iptables

D'ailleurs si tu veux m'aidé, je suis preneur car il n'y a pas grand chose qui fonctionne.... big_smile

Il faut avoué que ce n'est pas simple, même après pas mal de lecture et de relecture de différent tutoriel.

Prenont l'exemple d'un module Arduino communiquant avec mon interface web en connexion socket udp.
Enfin la il ne communique plus du tout avec cette règle...



SERVER_LOCAL_IP="192.168.1.2"
PORT_SERVER_DUDUINO="8888"
IP_DUDUINO="192.168.1.240"
PORT_DUDUINO="8080"

# Autoriser Duduino
/sbin/iptables -t filter -A INPUT -i $IFACE -p udp -d $IP_DUDUINO --dport $PORT_DUDUINO -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o $IFACE -p udp -s $SERVER_LOCAL_IP --sport $PORT_SERVER_DUDUINO -j ACCEPT
echo " - ${green} Autoriser Duduino : ${NC} OK "

 


Petit projet d’une box internet 4G avec un rpi3b+

Hors ligne

#7 22-01-2017 19:45:04

raleur
Membre
Inscription : 03-10-2014

Re : Améliorer mes règles dans iptables

dudux2 a écrit :

il n'y a pas grand chose qui fonctionne


Je m'en doutais, vu les incohérences que j'ai relevées en lisant le script.

dudux2 a écrit :

un module Arduino communiquant avec mon interface web en connexion socket udp.


Une interface web en UDP ???

Pourrais-tu expliquer à quoi correspondent toutes les variables décrites au début du script comme $IP_DUDUINO ?

Aussi, ce n'est pas écrit explicitement dans tes messages, mais j'ai l'impression que la machine a deux interfaces réseau, une connectée à une box internet et une autre connectée à ? Un LAN contenant quoi ? Quel est son rôle ? Routeur avec pare-feu ?


Il vaut mieux montrer que raconter.

Hors ligne

Pied de page des forums