Módulo State
O módulo State é usado para analisar o estado dos pacotes de uma conexão. Com ele, podemos aplicar regras para proibir tráfego de dados inválidos ou
permitir novas conexões, e isto é feito analisando os pacotes do trafego junto às flags TCP como SYN, ACK, FYN e etc.
Pode-se utilizar mais de um estado para análise na mesma regra separando os mesmo por vírgula. Depois de especificar a chamada do módulo "-
m", devemos especificar assim como os outros, o nome do módulo que será usado "state".
As opções estão descritas abaixo:
- NEW : Opção usada para analise de conexões que estão sendo iniciadas (novas conexões).
- ESTABLISHED : Opção usada para análise de conexões já estabelecidas, pacotes de respostas.
- RELATED : Opção usada para análise de pacotes de conexões existentes, como por exemplo, mensagem de erro.
- INVALID : Está opção é utilizada quando queremos verificar quais pacotes são inválidos, ou seja, pacotes que não têm identificação com nenhuma
conexão.
- Colocando em Prática
Regras aplicadas para exemplificar o uso do módulo, nestas regras, estou indicando que a interface eth0 está recebendo endereço da internet e que o endereço da rede interna é: 192.168.20.0/24.
# iptables -A OUTPUT -o eth0 -m state --state NEW -j ACCEPT
# iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "[pacotes invalidos]"
# iptables -A INPUT -m state --state INVALID -j DROP
# iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -i eth0 -m state --state NEW -j DROP
- Explicação das regras
I- A Primeira regra: Todo tráfego que está saindo pela interface eth0 que está conecta à internet, aceita novas conexões.
II- A Segunda regra: Estou registrando todos pacotes inválidos que passam pelas interfaces de rede, pois na regra não especifiquei a interface usada na regra,
então vale para todas.
Caso queira verificar os Logs com mais clareza, poderá usar o artigo:
FwLogWatch - Analisando Registros do IPtables
III- A Terceira regra: Completa a segunda bloqueando todo tráfego, que de conexões que tenham pacotes inválidos ou não identificados.
IV- A Quarta regra: Aceita todos os pacotes que entram pela interface eth0 (internet), porém, que já façam parte de uma conexão já iniciada.
V- Última regra: Bloqueia todo tráfego que entra pela interface eth0, que tente fazer novas conexões com a rede interna.
Estas regras acima, são muito boas para bloquear tráfego duvidoso. Dependendo da sua necessidade, as mesmas poderiam ser usadas em servidor que
compartilha a conexão com a internet, mas, caso queria usar as mesmas no seu Firewall, veja bem onde coloca, pois algumas regras acima, podem fazer com outras regras não sejam executadas com sucesso.
Módulo Connlimit
Este módulo é muito interessante, pois o mesmo pode contar a quantidade de conexões e limitar o acesso depois que o limite é excedido para conexões
paralelas.
As opções usadas pelo Módulo Connlimit são duas:
- --connlimit-above : Está opção é usada para limitar a quantidade de conexões simultâneas.
- --connlimit-mask : Opção usada para identificar uma rede.
- Colocando em Prática
Regras aplicadas com o Módulo Connlimit:
# iptables -A INPUT -tcp --dport 80 --syn -m connlimit --connlimit-above 30 -j DROP
# iptables -A OUTPUT -p tcp --sport 21 -m connlimit --connllimit-above 10 -j DROP
- Explicação das regras:
I- Primeira regra: É aplicada a um servidor WEB, fazendo com que a mesma limite em 30 conexões simultâneas, a partir que o limite for excedido, ou seja, já
tiver 30 conexões estabelecidas, a 31 por diante será bloqueada.
II- Segunda regra: É aplicada a um servidor FTP, após o número de conexões simultâneas terem excedidos o limite de 10, a próxima será bloqueada.
Para a próxima regra, tenho o seguinte cenário para explicar as regras aplicadas:
- Rede A : 192.168.10.0/24
- Interface da rede interna: eth0
- Interface da rede externa: eth1
- Rede B : 192.168.20.0/24
Onde Micros da rede B, acessam o Micro 192.168.10.248 da rede A, via SSH.
Regras executadas:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to 192.168.10.248:22
# iptables -A FORWARD -p tcp -o eth1 -d 192.168.10.248 --dport 22 -m connlimit --connlimit-above 2 -j DROP
- Explicação sobre as regras:
Nas regras acima, primeiro é feito um redirecionamento de pacotes da rede B para rede A, os pacotes que chegam à porta 22 do Host da rede A que faz o
redirecionamento, são encaminhados para a porta 22 do Host de destino 192.168.10.248 da rede A.
Na segunda regra, é feito o limite de duas conexões simultâneas para o Host de destino da rede A, assim, quando já estiver duas conexões feitas, a terceira será bloqueada, pois o limite de conexões simultâneas foi excedido.