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+