Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #Limpiamos reglas existentes.
- nft flush ruleset
- #Creamos las tablas que vamos a utilizar con el nombre filter.
- # En todo momento voy a filtrar la entrada y salida de los
- #puertos de mi equipo y no los del equipo o servidor remoto.
- #No creo la tabla para NAT porque no lo voy a usar en este equipo.
- nft add table ip filter
- nft add table ip6 filter
- #Creamos la cadena que va a filtrar los paquetes antes de ingresarlos al
- #proceso con la política de bloqueo, luego abrimos.
- nft add chain ip filter input { type filter hook input priority 0\; policy drop\; }
- #Creamos las reglas para bloquear sitios comprobados como peligrosos o atacantes.
- #Variable que contiene las Ips de atacantes.
- Prohibidos="184.168.113.82,207.171.166.22,72.21.210.29,72.21.206.80,54.245.112.177,\
- 37.230.114.78,37.187.86.215,80.87.131.12,144.76.0.242,144.76.1.130,\
- 76.164.226.146,184.154.139.166,239.255.255.250,200.123.197.170,\
- 54.231.0.128,23.235.44.193,207.244.65.143,72.10.36.226,162.125.18.133,52.201.32.182,157.249.32.164"
- #Agregamos las reglas que van a bloquear los sitios atacantes creando un
- #array con las direcciones prohibidas y mediante un bucle for.
- IFS=',' read -ra ADDR <<< "$Prohibidos"
- for i in "${ADDR[@]}"; do
- nft add rule ip filter input ip saddr $i counter drop
- done
- #Prohibo que se haga ping a mi equipo para evitar el icmp flood y similares.
- nft add rule ip filter input ip protocol icmp counter drop
- nft add rule ip filter input ct state invalid counter drop
- #Reglas que inspeccionan las cabeceras de los paquetes TCP para evitar los ataques DoS/DDoS más comunes.
- #Probado con hping3 y funciona.
- nft add rule ip filter input tcp flags "& (fin|syn) == fin|syn" counter drop
- nft add rule ip filter input tcp flags "& (syn|rst) == syn|rst" counter drop
- nft add rule ip filter input tcp flags "& (fin|syn|rst|psh|ack|urg) < fin" counter drop
- nft add rule ip filter input tcp flags "& (fin|syn|rst|psh|ack|urg) == fin|psh|urg" counter drop
- #Habilitación y protección de localhost
- nft add rule ip filter input iifname lo counter accept
- nft add rule ip filter input iifname != lo ip daddr 127.0.0.1/8 counter drop
- #Abrimos los puertos para conexiones establecidas por nosotros o relativas a estas.
- #No habilité el puerto SSH (22)
- tcp_dport_input_accept="20,21,25,80,110,143,443,465,993,995,1024-65535"
- udp_dport_input_accept="53,80,1024-65535"
- IFS=',' read -ra PORT <<< "$tcp_dport_input_accept"
- for i in "${PORT[@]}"; do
- nft add rule ip filter input tcp dport $i ct state established,related counter accept
- done
- IFS=',' read -ra PORT <<< "$udp_dport_input_accept"
- for i in "${PORT[@]}"; do
- nft add rule ip filter input udp dport $i ct state established,related counter accept
- done
- #Si bien la política de input es counter drop bloqueamos puertos conocidos usados por atacantes.
- ports_input_drop="1,2-1024,1723,3306,5432,31337-31340"
- IFS=',' read -ra PORT <<< "$ports_input_drop"
- for i in "${PORT[@]}"; do
- nft add rule ip filter input tcp dport $i counter drop
- nft add rule ip filter input udp dport $i counter drop
- done
- #Cerramos el acceso a la ip local por la red cableada (enp2s0) y por wifi (wlp0s18f2u5 ).
- #La ip 255.255.255.255 no es aceptada por la sintaxis en concatenación por tanto necesita una regla propia.
- nft add rule ip filter input iifname enp2s0 ip saddr {10.0.0.0/24,172.16.0.0/24,\
- 192.168.0.0/24,224.0.0.0/22} counter drop
- nft add rule ip filter input iifname enp2s0 ip daddr 127.0.0.0/22 counter drop
- nft add rule ip filter input iifname enp2s0 ip daddr 255.255.255.255 counter drop
- nft add rule ip filter input iifname enp2s0 ip frag-off != 0 counter drop
- nft add rule ip filter input iifname wlp0s18f2u5 ip saddr {10.0.0.0/24,172.16.0.0/24,\
- 192.168.0.0/24,224.0.0.0/22} counter drop
- nft add rule ip filter input iifname wlp0s18f2u5 ip daddr 127.0.0.0/22 counter drop
- nft add rule ip filter input iifname wlp0s18f2u5 ip daddr 255.255.255.255 counter drop
- nft add rule ip filter input iifname wlp0s18f2u5 ip frag-off != 0 counter drop
- #Cerramos cualquier tráfico que no hubiera sido captado por reglas anteriores.
- nft add rule ip filter input counter counter drop
- #Creamos la cadena para output.
- nft add chain ip filter output { type filter hook output priority 0\; policy drop\; }
- #Estas reglas sobre IPs para bloquear son creadas porque tengo el ct state related habilitado.
- IFS=',' read -ra ADDR <<< "$Prohibidos"
- for i in "${ADDR[@]}"; do
- nft add rule ip filter output ip daddr $i counter drop
- done
- #Le damos salida a lo y a las conexiones establecidas por nosotros y relacionadas.
- nft add rule ip filter output oifname lo counter accept
- nft add rule ip filter output ct state established,related counter accept
- #Damos salida a nuestro sistema a la red con el ct state new
- ports_tcp_output_new="20,21,25,80,110,143,443,465,993,995,1024-65535"
- ports_udp_output_new="53,80,1024-65535"
- IFS=',' read -ra PORT <<< "$ports_tcp_output_new"
- for i in "${PORT[@]}"; do
- nft add rule ip filter output tcp sport $i ct state new counter accept
- done
- IFS=',' read -ra PORT <<< "$ports_udp_output_new"
- for i in "${PORT[@]}"; do
- nft add rule ip filter output udp sport $i ct state new counter accept
- done
- #Creamos la cadena que se va a encargar de los forward y las reglas que lo prohiben.
- #Mi equipo no requiere esa función.
- nft add chain ip filter noforward { type filter hook forward priority 0\; policy drop\; }
- nft add rule ip filter noforward counter drop
- #Por las dudas alguien meta mano a mi router creamos las cadenas para IPv6 y sus reglas para bloquear todo el tráfico.
- nft add chain ip6 filter input { type filter hook input priority 0\; policy drop\; }
- nft add rule ip6 filter input counter drop
- nft add chain ip6 filter output { type filter hook output priority 0\; policy drop\; }
- nft add rule ip6 filter output counter drop
- nft add chain ip6 filter noforward { type filter hook forward priority 0\; policy drop\; }
- nft add rule ip6 filter noforward counter drop
- #Finalmente salvamos nuestras reglas y salimos.
- /etc/init.d/nftables save
- exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement