Normalmente ejecuto mis reglas de iptables cada vez que inicio sesión. Desde la terminal escribo;
Sudo sh firewall.sh
Al configurar la computadora de mi hermana, quiero darle una protección básica de firewall. Ella no iniciará sesión como administrador, solo una cuenta estándar. ¿Cómo puedo hacer que se ejecute un script de firewall cada vez que inicia sesión sin que tenga que escribir ninguna contraseña?
El guión que escribí para la computadora de mi hermana contiene;
#!/bin/sh
modprobe ip_conntrack
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -I OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p udp --dport 53 --sport 32768:61000 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 443 --sport 32768:61000 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -I OUTPUT -p icmp -j DROP
iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p udp -j DROP
iptables -I INPUT -p tcp -m tcp --syn -j DROP
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Lo coloqué en su carpeta de inicio como firewall.sh y lo configuré para que sea ejecutable (haga clic con el botón derecho en el archivo y marque la opción "permitir ejecutar archivo como programa" en la pestaña de permisos).
Ejecutar este script desde la terminal como root funciona bien.
Después de escribir;
Sudo sh firewall.sh
Escribí en la terminal
Sudo iptables -L -v
y consigo
Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 DROP tcp -- any any anywhere anywhere tcpflags: FIN,SYN,RST,ACK/SYN
0 0 DROP udp -- any any anywhere anywhere
0 0 DROP icmp -- any any anywhere anywhere
Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
0 0 DROP icmp -- any any anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spts:32768:61000 dpt:https
0 0 ACCEPT udp -- any any anywhere anywhere udp spts:32768:61000 dpt:domain
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spts:32768:61000 dpt:http
0 0 ACCEPT all -- any lo anywhere anywhere
¿Cómo puedo hacer que este script se ejecute automáticamente al iniciar sesión, o posiblemente guardar estas reglas permanentemente para la computadora de mi hermana? ¿Podría proporcionar algún código detallado, ya que mis primeros intentos en el método rc.local y iptables-save no han tenido mucho éxito. En cada reinicio, todas las cadenas INPUT, OUTPUT y FORWARD se restablecen a ACCEPT, sin políticas enumeradas cuando escribo Sudo iptables -L -v
Es posible que desee utilizar el paquete iptables-persistent
en lugar de meterse con sus scripts de arranque. Primero, ejecute su script para configurar las reglas del firewall. En segundo lugar, ejecute Sudo apt-get install iptables-persistent
y siga las indicaciones. Cuando solicite guardar las reglas actuales, presione "Sí" en ambas indicaciones. Ahora, al reiniciar, sus reglas de iptables serán restauradas.
NOTA: Si cambia sus reglas después de esto, deberá hacer los siguientes comandos después de los cambios:
Para guardar las reglas de iptables de IPv4: Sudo su -c 'iptables-save > /etc/iptables/rules.v4'
Para guardar sus reglas de IPv6 ip6tables: Sudo su -c 'ip6tables-save > /etc/iptables/rules.v6'
Suponiendo que tiene las reglas de firewall en:
/etc/iptables.up.rules
Quizás la respuesta más obvia será crear un archivo llamado iptables en:
/etc/network/if-pre-up.d
con el contenido:
#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules
y hacerlo ejecutable usando
Sudo chmod +x /etc/network/if-pre-up.d/iptables
De esta manera, antes de que se active su interfaz de red, se cargarán sus reglas.