Buckminster
(usa Debian)
Enviado em 09/06/2017 - 20:55h
Veja bem:
INPUT - (entrada - para pacotes destinados a sockets locais, pacotes destinados para o próprio servidor, pacotes que vem de fora com destino para o servidor onde o Iptables está instalado);
FORWARD - (para pacotes sendo roteados através do servidor, pacotes que passam pelo servidor, ou seja, pacotes que vem de fora e passam pelo servidor com destino à rede) e
OUTPUT - (para pacotes gerados localmente, pacotes oriundos do próprio servidor com destino para fora dele, ou seja, pacotes que o próprio servidor gera com destino para a rede externa e/ou rede interna).
"mesmo porque, como mencionei no meu último tópico, estava em mente que ter bloqueado um determinado tipo de conexão de fora para dentro já inviabilizaria essas conexões de dentro para fora."
Esse teu raciocínio está errado.
Bloquear as conexões de fora para dentro não inviabilizam as conexões de dentro para fora porque as conexões de dentro para fora são aquelas que o próprio servidor gera.
Essas três chains (INPUT, FORWARD e OUTPUT) são independentes, tanto assim que o comando -A (--append) adiciona uma regra no final da chain (cadeia), ou seja, iptables -A INPUT adiciona a regra no final das regras da chain INPUT e somente dela. E isso é válido para as outras duas.
As três chains, se não for definida a tabela na regra, serão aplicadas na tabela padrão, a filter (ver as tabelas no manual).
A tabela nat tem como chains PREROUTING, OUTPUT e POSTROUTING.
A tabela mangle tem como chains INPUT, PREROUTING, OUTPUT, FORWARD e POSTROUTING.
A tablela raw tem como chains PREROUTING E OUTPUT.
No Iptables tu podes enumerar as regras, por exemplo:
iptables -A FORWARD 1 etc, etc...
iptables -A FORWARD 3 etc, etc...
iptables -A INPUT 2 etc, etc...
iptables -A FORWARD 2 etc, etc...
iptables -A INPUT 1 etc, etc...
essas regras acima numeradas podem ser colocadas fora de ordem que o Iptables lerá o script de cima para baixo, mas executará as regras na ordem. Claro que, para melhor organização e leitura do script é interessante colocá-las em ordem... 1, 2, 3...
Geralmente se coloca a política padrão da chain OUTPUT como ACCEPT porque o administrador do servidor deve ter um constante monitoramento do seu servidor, daí o administrador tem controle caso alguma porcaria seja instalada no servidor aproveitando uma falha de segurança.
Lógico que, como já foi dito, isso depende do nível de segurança desejado.
Nada impede que tu coloque as três políticas como DROP e vá liberando nas três chains somente o que se quer. Isso até melhora o desempenho, pois não ficarão pacotes trafegando desnecessariamente pelo servidor e pela rede. Claro que as três chains como DROP implica em mais trabalho por parte do administrador.
Lembrando que na definição do protocolo, por exemplo, -p tcp, tu já define que o bloqueio ou liberação englobará todos os protocolos constantes da gama tcp.
No caso do udp é somente ele.
E a "confirmação" que tu mencionaste é parte do protocolo. O tcp tem essa confirmação, pois ele verifica se o pacote foi enviado com sucesso, e o udp não, por isso o udp é mais rápido, mas não tem como saber se o pacote chegou ao seu destino ou se ele chegou completo. Isso é implementação do protocolo.
Outro exemplo para melhor entendimento:
iptables -A FORWARD etc, etc...
iptables -I FORWARD etc, etc...
iptables -A INPUT etc, etc...
iptables -I INPUT etc, etc...
O Iptables lerá as regras acima de cima para baixo, mas as executará da seguinte maneira:
na chain FORWARD acima a regra com -A será lida primeiro, mas executada depois da segunda regra com -I, pois -I coloca a regra no topo da chain e -A no final da chain. O mesmo vale para as regras da chain INPUT no exemplo acima.
Usar -A , -I e/ou numerar as regras implica em definir a ordem de prioridade de execução da regra.
Por isso que é importante saber essas questões para uma melhor execução, desempenho e organização do script.
Espero ter esclarecido o assunto um pouco melhor.