Eu tenho um Ubuntu LTS
sistema funcionando há alguns anos. Ontem uma queda de energia forçou meu computador a desligar. Com a energia restaurada, inicializei o sistema e tudo pareceu começar bem, com exceção do iptables
. Sempre que reinicio este sistema, ufw
ele sempre inicia, mesmo que eu tenha configurado para não fazê-lo. Prefiro iptables
simplesmente porque sei disso, então encerro o 'ufw' e reconfiguro iptables
e reinicio com o seguinte procedimento:
sudo ufw disable
sudo ip_tables_reset.sh
sudo ip_tables_config.sh
sudo iptables restart
e verifique com
sudo iptables -S
que retorna:
-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
Agora a linha
sudo iptables restart
retorna com
Bad argument 'restart'
Mas tenho usado esse procedimento fielmente há anos. Não instalei nenhuma atualização que eu saiba recentemente.
O que mudou para que esse método confiável falhe agora?
referência: iptables v1.4.12
Responder1
você mencionou este comando
sudo iptables restart # wrong usage, its not a service
o conjunto de scripts abaixo é como você faz backup, habilita ou desabilita seu firewall... primeiro verifique se você tem o pacote instalado
dpkg -l | grep iptables
uma maneira de visualizar as configurações atuais do iptable
sudo iptables -L -n
a maneira canônica de mostrar as regras atuais do iptable (exibir apenas sem alterações)
sudo iptables-save
olhando para suas regras, você não está bloqueando o tráfego de entrada (seus escudos estão desativados), enquanto seguir bloqueia todo o tráfego de entrada, exceto as portas especificadas
*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 um endereço IP específico 192.30.252.0/22 para poder executar um servidor ouvindo o tráfego de entrada, então todas as menções ao GitHubWebHooks são opcionais ... se você salvar acima em um arquivo, carregue esse arquivo como suas regras, então você irá esteja pronto para ir... proteja-se
antes de mudar alguma coisa, vamos despejar suas regras atuais em um arquivo de saída
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
agora execute o script acima para salvar suas regras atuais do iptable
sudo ./firewall_save_current_rules.sh
O código abaixo definirá um novo conjunto de regras onde bloquearemos todo o tráfego de entrada por padrão, exceto partes especificadas (especialmente a porta ssh + portas normais http e https)
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
execute o script acima para definir novas regras de iptable
sudo ./firewall_shields_up.sh
para completar, abaixo está um script de solução de problemas que desabilitará efetivamente o firewall, abrindo todo o tráfego de entrada e saída ... execute se quiser uma tela vazia, mas execute acima de firewall_shields_up.sh para restaurar um firewall adequado
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