Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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="eth0"
- WEB_EXTERN_PORT="80"
- PORT_SSH="22"
- # 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 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 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
- # 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"
- #Fivem
- /sbin/iptables -t filter -A INPUT -p tcp --dport 30120 -j ACCEPT
- /sbin/iptables -t filter -A INPUT -p udp --dport 30120 -j ACCEPT
- echo " -${green} FIVEM 30120 OP : ${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 INPUT -p tcp --syn -m limit --limit 1/second -j ACCEPT
- /sbin/iptables -A INPUT -p udp -m limit --limit 1/second -j ACCEPT
- /sbin/iptables -A INPUT -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 sils 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 laction à faire sur les paquets dune règle inscrite dans la table des règles : ${NC}"
- echo " - ${yellow}DROP ${NC}${blue}: Le paquet est rejeté, aucune notification nest 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 dhô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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement