Questão nº 41
Questão de Sistemas Operacionais · FCC TJ-CE 2022 (nº 41)
Considere o script de firewall abaixo, que não contém erros, para ser executado em ambiente Linux Kernel 5.0 ou superior, em condições ideais. O código contém uma linha de comentário seguida de comando(s) que o executa(m).
#!/bin/bash
# 1) Abre para uma faixa de endereços da rede local
iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT
# 2) Abre uma porta (inclusive para a Internet)
iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
# 3) Ignora pings
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
# 4) Proteções diversas contra portscanners, ping of death, ataques DoS etc.
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
iptables -A FORWARD -m unclean -j DROP
# 5) Abre para a interface de loopback. Essencial para o KDE e outros programas gráficos funcionarem adequadamente.
iptables -A INPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
# 6) Ignora qualquer pacote de entrada, vindo de qualquer endereço, a menos que especificado o contrário acima, bloqueando tudo.
Analisando o script, para fazer o que consta no comentário indicado por # 6), a lacuna I deve ser corretamente preenchida com:
- A`iptables -A INPUT -p tcp --syn -j DROP` (alternativa correta)
- B`iptables -J FORWARD -p tcp --syn -m BLOCK`
- C`iptables -A INPUT -p tcp --syn -m ACCEPT`
- D`iptables -A OUTPUT -p tcp ip --syn -j BLOCK`
- E`iptables -P INPUT -j protocol tcp --syn -a DROP`
Resposta comentada
Gabarito Alternativa A
Em `iptables`, as regras são processadas em ordem, e se um pacote não corresponde a nenhuma regra que o aceite, ele é tratado pela regra final ou pela política padrão da cadeia. Para "bloquear tudo" que não foi explicitamente permitido, adiciona-se uma regra de descarte (`DROP`) no final da cadeia ou define-se a política padrão da cadeia como `DROP`.
(A) Correta: `iptables -A INPUT -p tcp --syn -j DROP`. Esta regra adiciona (`-A`) uma regra à cadeia `INPUT` (para pacotes destinados ao próprio firewall). Ela corresponde a pacotes TCP (`-p tcp`) que iniciam uma nova conexão (`--syn`) e os descarta (`-j DROP`). Como as regras anteriores aceitam tráfego TCP específico, esta regra, colocada no final, efetivamente bloqueia todas as novas conexões TCP de entrada que não foram explicitamente permitidas, cumprindo a intenção de "bloquear tudo" que não foi especificado acima.
(B) Incorreta: `iptables -J FORWARD -p tcp --syn -m BLOCK`. O comando `-J` é inválido para especificar uma cadeia (deveria ser `-A`, `-I`, etc.). A cadeia `FORWARD` é para pacotes que atravessam o firewall, não para pacotes destinados a ele (`INPUT`). Além disso, `BLOCK` não é um alvo (`-j`) válido em `iptables`; o correto seria `DROP` ou `REJECT`.
(C) Incorreta: `iptables -A INPUT -p tcp --syn -m ACCEPT`. Embora a sintaxe seja válida, o alvo `ACCEPT` é o oposto do que se pede no comentário `# 6)`, que é "bloquear tudo". Esta regra aceitaria novas conexões TCP, em vez de bloqueá-las. Armadilha da banca: Esta alternativa usa sintaxe quase correta e a cadeia `INPUT`, mas inverte completamente a ação desejada, sendo um distrator para quem não lê atentamente o objetivo da regra.
(D) Incorreta: `iptables -A OUTPUT -p tcp ip --syn -j BLOCK`. A cadeia `OUTPUT` é para pacotes originados do próprio firewall, enquanto o comentário `# 6)` refere-se a "pacote de entrada" (cadeia `INPUT`). O termo `ip` é um argumento inválido nesta posição, e `BLOCK` não é um alvo (`-j`) válido.
(E) Incorreta: `iptables -P INPUT -j protocol tcp --syn -a DROP`. O comando `-P` é usado para definir a política padrão de uma cadeia (ex: `iptables -P INPUT DROP`), mas não aceita parâmetros como protocolo, flags (`--syn`) ou `-j` seguido de outros parâmetros. A sintaxe `protocol tcp --syn -a DROP` é completamente inválida para a definição de política padrão. Armadilha da banca: Esta alternativa tenta usar `-P INPUT` que, conceitualmente, poderia ser usado para "bloquear tudo", mas a sintaxe está incorreta, pois a política padrão não pode ser tão granular.
Fonte: FCC TJ-CE 2022 Analista Judiciário - Especialidade Ciência da Computação - Área Infraestrutura de TI (Caderno Tipo 004). Reproduzida para fins de estudo.