Tengo un Ubuntu LTS
sistema funcionando desde hace un par de años. Ayer un corte de energía obligó a que mi computadora se apagara. Con la energía restaurada, inicié el sistema y todo pareció comenzar bien, con la excepción de iptables
. Cada vez que reinicio este sistema, ufw
siempre se inicia, aunque lo haya configurado para que no lo haga. Prefiero iptables
simplemente porque lo sé, así que apago 'ufw' y iptables
lo vuelvo a configurar y reiniciar con el siguiente procedimiento:
sudo ufw disable
sudo ip_tables_reset.sh
sudo ip_tables_config.sh
sudo iptables restart
y verificar con
sudo iptables -S
que devuelve:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
ahora la linea
sudo iptables restart
regresa con
Bad argument 'restart'
Pero he utilizado este procedimiento fielmente desde hace años. No he instalado ninguna actualización que yo sepa recientemente.
¿Qué ha cambiado para que este método confiable ahora falle?
referencia: iptables v1.4.12
Respuesta1
mencionas este comando
sudo iptables restart # wrong usage, its not a service
el siguiente conjunto de scripts es cómo realizar una copia de seguridad, habilitar o deshabilitar su firewall... primero verifique que tenga el paquete instalado
dpkg -l | grep iptables
una forma de ver la configuración actual de iptable
sudo iptables -L -n
la forma canónica de mostrar las reglas actuales de iptable (mostrar solo sin cambios)
sudo iptables-save
Al observar sus reglas, no está bloqueando el tráfico entrante (sus escudos están inactivos), mientras que seguir bloquea todo el tráfico entrante excepto los puertos específicos.
*filter
:INPUT DROP [331:17104]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [9727:1360720]
:GitHubWebHooks - [0:0]
-A INPUT -p tcp -m tcp --dport 9000 -j GitHubWebHooks
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A GitHubWebHooks -s 192.30.252.0/22 -j ACCEPT
-A GitHubWebHooks -j DROP
COMMIT
Observe que abro una dirección IP específica 192.30.252.0/22 para poder ejecutar un servidor que escuche el tráfico entrante, por lo que todas las menciones de GitHubWebHooks son opcionales... si guarda lo anterior en un archivo, luego cargue ese archivo como sus reglas, entonces lo hará. bueno para ir... escudos arriba
Antes de cambiar algo, volquemos sus reglas actuales en un archivo de salida.
vi firewall_save_current_rules.sh
#!/usr/bin/env /bin/bash
set -o errexit # exit on error
# dump current iptable rules to file
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
# ........
curr_timestamp=$(date '+%H%M%S%N')
curr_rulesfile=/etc/iptables/rules.v4.${curr_timestamp}.current_rules
rulesdir=$( dirname $curr_rulesfile )
if [[ ! -d $rulesdir ]]; then
echo about to create dir $rulesdir
mkdir $rulesdir
fi
iptables-save > ${curr_rulesfile} # dump current iptable rules into output timestamped file
echo curr_rulesfile $curr_rulesfile
ahora ejecute el script anterior para guardar sus reglas actuales de iptable
sudo ./firewall_save_current_rules.sh
El siguiente código definirá un nuevo conjunto de reglas donde bloquearemos todo el tráfico entrante de forma predeterminada, excepto partes específicas (especialmente el puerto ssh + los puertos http y https normales).
vi firewall_shields_up.sh
#!/usr/bin/env /bin/bash
set -o errexit # exit on error
# create new set of iptable rules from inline list of rules - Block all incoming traffic by default except specified
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
# ........
curr_timestamp=$(date '+%H%M%S%N')
new_rulesfile=/etc/iptables/rules.v4.${curr_timestamp}.new_rules
rulesdir=$( dirname $new_rulesfile )
if [[ ! -d $rulesdir ]]; then
echo about to create dir $rulesdir
mkdir $rulesdir
fi
# ..... park into a new file below list of iptable rules
cat << EOF > ${new_rulesfile}
*filter
:INPUT DROP [331:17104]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [9727:1360720]
:GitHubWebHooks - [0:0]
-A INPUT -p tcp -m tcp --dport 9000 -j GitHubWebHooks
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A GitHubWebHooks -s 192.30.252.0/22 -j ACCEPT
-A GitHubWebHooks -j DROP
COMMIT
EOF
echo new_rulesfile $new_rulesfile
iptables-restore < ${new_rulesfile} # engage new iptable rules from file
echo here is new iptable settings
iptables-save
# ... if you are running docker you will want to bounce its daemon
# sudo service docker restart
ejecute el script anterior para definir nuevas reglas de iptable
sudo ./firewall_shields_up.sh
Para que esté completo, a continuación encontrará un script de solución de problemas que deshabilitará efectivamente el firewall al abrir todo el tráfico entrante y saliente... ejecútelo si desea una pizarra vacía; sin embargo, ejecute encima de firewall_shields_up.sh para restablecer un firewall adecuado.
vi firewall_shields_down.sh
#!/usr/bin/env /bin/bash
set -o errexit # exit on error
# open up all incoming and outgoing traffic ... effectively disabling the firewall
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
# ........ lets first backup current rules into timestamped file
curr_timestamp=$(date '+%H%M%S%N')
curr_rulesfile=/etc/iptables/rules.v4.${curr_timestamp}.current_rules_before_opening_up_all_traffic
rulesdir=$( dirname $curr_rulesfile )
if [[ ! -d $rulesdir ]]; then
echo about to create dir $rulesdir
mkdir $rulesdir
fi
iptables-save > ${curr_rulesfile} # dump current iptable rules into output timestamped file
echo curr_rulesfile $curr_rulesfile
# ... now alter iptables to lower shield
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
# ... display new iptable rules
echo
echo following are the new iptable rules after we opened up all incoming and outgoing traffic
echo
iptables-save