Améliorer mes règles dans iptables
Posté : 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
merci pour le coup de pousse que vous m'apporterez pour améliorer la protection de par feu
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
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