Politica padrão Iptables [RESOLVIDO]

1. Politica padrão Iptables [RESOLVIDO]

Eberson Muenchen
SPH

(usa Debian)

Enviado em 18/05/2011 - 09:00h

Bom Dia Pessoal do VOL.
Estou com uma duvida cruel. Tenho um script de firewall rodando num server Debian aqui, mas tem alguns usuários que estão passando por fora do proxy pelo que verifiquei é um redirecionamento de porta ou algum proxy que tem instalado no micro. Pois sai do micro por uma porta e conecta num ip fora em outra. Vamos a minha duvida.
Outro dia pesquisando pela net achei um script de firewall onde o cara definiu uma política padrão para as cadeias INPUT OUTPUT e FORWARD, tentei adequar isso ao meu script mas quando reiniciei o firewall nao navegou mais. Alguém aí pode me ajudar?
Minha pergunta é se eu colocar isso no topo do script ou no final faz diferença? por exemplo quero negar acesso a qualquer porta em INPUT OUTPUT e FORWARD menos as que eu tratarei no corpo do script nao sei se fui claro. Vou tentar ilustrar:

Inicio do firewall:

#!/bin/sh


iniciar(){

# Inicia Servidor
echo "Iniciando O Firewall...................................................[OK]"
# Define Variaveis
echo "Definindo Variaveis....................................................[OK]"
IPTABLES="/sbin/iptables"
REDEINT="10.1.1.0/255.255.255.0"
IPDNSPROVEDOR="8.8.8.8"
ENT="eth0"
SAI="eth1"
# Modulos
echo "Carregar Modulos.......................................................[OK]"
## /sbin/modprobe depmod -a
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_nat_irc
echo "Habilitando IP forwarding..............................................[OK]"
echo 1 > /proc/sys/net/ipv4/ip_forward
# echo 1 > /proc/sys/net/ipv4/ip_forward
# echo "1"> proc/sys/net/ipv4/ip_dynaddr
# Limpar
echo "Limpando Tabelas.......................................................[OK]"
$IPTABLES -F
$IPTABLES -t nat -F
# Direcionar porta Para Proxy
echo "Direcionando porta 80 para 3128.......................................[nao]"
$IPTABLES -t nat -A PREROUTING -i $SAI -p tcp --dport 80 -j REDIRECT --to-port 3128
$IPTABLES -t nat -A PREROUTING -i $SAI -p tcp --dport 443 -j REDIRECT --to-port 3128
# Definindo política padrão
$IPTABLES -A INPUT -p tcp --syn -j DROP
$IPTABLES -A OUTPUT -p tcp --syn -j DROP
$IPTABLES -A FORWARD -p tcp --syn -j DROP
#libera conexoes de dentro pra fora:
echo "Abre de dentro da rede para internet...................................[OK]"
$IPTABLES -A OUTPUT -p tcp --destination-port 465 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --destination-port 995 -j ACCEPT
echo "Liberando portas necessarias da internet pra dentro da rede............[OK]"
$IPTABLES -A INPUT -p tcp --destination-port 9090 -j ACCEPT
$IPTABLES -A INPUT -p tcp --destination-port 3770 -j ACCEPT
$IPTABLES -A INPUT -p tcp --destination-port 5222 -j ACCEPT
$IPTABLES -A INPUT -p tcp --destination-port 5223 -j ACCEPT


}

parar(){
iptables -F
echo "Regras de firewall desativadas"
}

case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
*) echo "Use os par�metros start ou stop"
esac
echo "Firewall carregado..."

Final do firewall

Nesse Exemplo quero bloquear tudo menos essas portas tratadas em INPUT e OUTPUT.
Lembrando que peguei só algumas partes do script somente para ilustrar como fiz. Analisem aí e se alguem puder dar uma luz onde esta o erro Agradeço.


  


2. MELHOR RESPOSTA

Jefferson Diego
Diede

(usa Debian)

Enviado em 18/05/2011 - 19:07h

Jovem, suas regras "$IPTABLES -A INPUT -p tcp --syn -j DROP", "$IPTABLES -A OUTPUT -p tcp --syn -j DROP" e "$IPTABLES -A FORWARD -p tcp --syn -j DROP" não são políticas padrões.
"iptables -P INPUT DROP" é um exemplo de política padrão. A ideia de chamá-la "padrão" é que ela só seja atingida se o pacote não atender a nenhum outro critério em qualquer outra regra da chain.
Se fossem realmente políticas padrões (como citada acima) você poderia colocá-las em qualquer lugar do script e não faria diferença.
Mas, no seu caso, suas máquinas não navegam pois você bloqueou os pacotes com flag SYN (início de conexão) logo no primeiro conjunto de regras, e pelo fato do iptables checar as regras sequencialmente, nenhum pacote passa dessas regras.

Seria mais viável você tentar algo assim:

#Libera os pacotes pertencentes e relacionados às conexões liberadas:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#####AQUI VOCÊ LIBERA OS SERVIÇOS:
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT #PARA SEU PROXY
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #PARA SEU APACHE


$IPTABLES -t nat -A PREROUTING -i $SAI -p tcp --dport 80 -j REDIRECT --to-port 3128
#$IPTABLES -t nat -A PREROUTING -i $SAI -p tcp --dport 443 -j REDIRECT --to-port 3128 #A porta 443 não pode ser redirecionada para o proxy. Leia sobre Man in the middle attack.


#Bloqueia todo o resto:
$IPTABLES -A INPUT -p tcp --syn -j DROP
$IPTABLES -A OUTPUT -p tcp --syn -j DROP
$IPTABLES -A FORWARD -p tcp --syn -j DROP


3. Re: Politica padrão Iptables [RESOLVIDO]

irado furioso com tudo
irado

(usa XUbuntu)

Enviado em 18/05/2011 - 09:52h

por definição - não há uma regra real para isso - a definição de politicas (normalmente DROP) ficam nas primeiras linhas do script, para manter pelo menos uma ordem visual e lógica. Quanto ao pessoal que perambula por aí usando portas distintas das 80/443 são complicadissimas para se bloquear.. vou dar um ou dois chutinhos que podem (ou não) ajudar:

a) definir a punibilidade - junto à direção da empresa. Ou seja, deve existir uma politica CLARA, OBJETIVA e bem definida e INFORMANDO aos funcionarios que a violação dessas politicas podem (e serão) punidas de algum modo.
a-1) Lembre-se: vc NÃO pode assumir essa responsabilidade sob pena de ficar desacreditado caso não consiga definir punições e outras coisas menos agradáveis.

b) bloqueio da saída para a 'net caso não sejam através do squid; veja a dica aqui: http://www.dicas-l.com.br/arquivo/squid__quase__transparente_para_maquina_unica.php
ignore o "maquina unica", isso funciona para 1 ou 1000 maquinas e funciona bem ;)

no demais, o que vc PRECISA fazer é descobrir COMO os sujeitos estão saindo então coloque um tcpdump "olhando" o tráfego na interface de LAN, gerando um arquivo binário para posterior análise pelo wireshark. Caso suspeite de um ou alguns usuários em particular, faça a filtragem por êstes. Instale também o sarg e analise os relatórios.

no mais, é chato, muito chato ficar fazendo essas análises dias a fio, mas é produtivo.

divirta-se :)


4. Feito

Eberson Muenchen
sph

(usa Debian)

Enviado em 02/09/2011 - 09:09h

Ai o Diede ali matou a xarada, talvez eu não me expliquei direito mas ele entendeu. Não consigo achar o resolvido aqui, mas deu certo na mosca diede obrigado pela atenção.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts