iptables ? Está certo dessa maneira ?
Bom Tarde !
Tenho um servidor de internet, fiz um firewall aqui em um arquivo texto.
Na verdade é uma dúvida que não encontrei em apostilas.
Quando libero uma porta FORWARD, para rede interna,a mesmo deve ser liberada como INPUT no servidor certo ?
No caso abaixo, está certo ?
liberei o servidor a 80, que o servidor internet usa para conectar... e as máquinas da rede interna vao usar a porta 3128 no caso o proxy, e a porta 443 que é https, no qual o squid não suporta.
Também liberei a porta 25 e 110 (pop, e smtp).
Está certo a maneira que eu estou fazendo ?
Só montei para ter uma nossao de como estou fazendo, e se estou fazendo da maneira correta...
(Desculpe mas no tópico abaixo, esqueci de colocar o FORWARD...)
Segue abaixo as regras
#Interfaces
IF_INTERNA="eth0"
IF_EXTERNA="eth1"
#Rede Interna
REDE_INTERNA="10.0.0.0/24"
#roteamento
echo "1"> /proc/sys/net/ipv4/ip_forward
#Limpando iptables
iptables -F
iptables -Z
iptables -X
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
# Conexão estabelida não é verificada novamente
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
#Regras IF_EXTERNA
iptables -A INPUT -i $IF_EXTERNA -p tcp --syn --dport 22 -j ACCEPT
iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -i $IF_EXTERNA -p udp --dport 43 -j ACCEPT
iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 443 -j ACCEPT
#Rede Interna
iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 3128 -j ACCEPT
iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 443 -j ACCEPT
#Fecha o resto
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables ? Está certo dessa maneira ?
Na verdade o que ocorre nesse caso: proxy --> firewall.
Você deve liberar acesso pela porta 80 somente para input da internet p/ firewall e output do firewall para internet.
Código :
iptables -A INPUT -p tcp -i $IF_EXTERNA --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -i $IF_EXTERNA --dport 80 -j ACCEPT
pois o browser dos clientes ira fazer uma requisição http na porta 80 até o servidor. antes que a CHAIN INPUT processe as regras, a CHAIN PREROUTING da tabela NAT processa a requisição e faz um NAT de porta redirecionando a requisição antes que a CHAIN INPUT barre o acesso.
Código :
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
Requisições na porta 443 (https) não passarão pelo proxy e seguirão direto.
Código :
iptables -A FORWARD -p tcp -dport 443 -j ACCEPT
E assim sucessivamente. Quando tiver que liberar acesso as máquinas internas utilize a CHAIN FORWARD e se possível analize os dois pontos da rede (interna e externa) e veja se é realmente necessário que o acesso parta dos dois lados.
Quando for fazer acesso ao servidor (conexões que são destinadas ao servidor) utilize a CHAIN INPUT. Ex:
Código :
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Nesse caso liberamos acesso via SSH ao servidor. Seria bom especificar que somente queremos conexões SSH vinda da rede interna. ex:
Código :
iptables -A INPUT -i $IF_INTERNA -s $REDE_INTERNA --dport 22 -j ACCEPT
Não se esqueça de fazer o bloqueio dos serviços indesejados, pois nesse caso estamos apenas fazendo a liberação daquilo que queremos.
Espero ter ajudado.
Abraços,
Alain Dellon Brito
iptables ? Está certo dessa maneira ?
Muito Obrigado pelas respostas !!!
maverick_cba, realmente eu esqueci do OUTPUT...
Vou colar abaixo como eu refiz as regras novamente...
Por favor não deixe de comentar se estiver algo errado...
Criticas e sugestoes sempre é bem vinda!
#Interfaces
IF_INTERNA="eth0"
IF_EXTERNA="eth1"
#Rede Interna
REDE_INTERNA="10.0.0.0/24"
#roteamento
echo "1"> /proc/sys/net/ipv4/ip_forward
#Limpando iptables
iptables -F
iptables -Z
iptables -X
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
# Conexão estabelida não é verificada novamente
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
#Regras IF_EXTERNA
iptables -A INPUT -i $IF_EXTERNA -p tcp --syn --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -i $IF_EXTERNA --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -i $IF_EXTERNA --dport 80 -j ACCEPT
iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -i $IF_EXTERNA -p udp --dport 43 -j ACCEPT
iptables -A OUTPUT -i $IF_EXTERNA -p udp --dport 43 -j ACCEPT
iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 110 -j ACCEPT
iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 443 -j ACCEPT
#Squid
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
#Rede Interna
iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 3128 -j ACCEPT
iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i $IF_INTERNA -p tcp --dport 443 -j ACCEPT
$IPT -t nat -A POSTROUTING -s $REDE_INTERNA -j MASQUERADE
#Fecha o resto
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
Mais uma vez Obrigado :clap: :clap: :clap:
iptables ? Está certo dessa maneira ?
está correto este script acima ?
iptables ? Está certo dessa maneira ?
que uma dica boa?
arquitetura do script vc ja montada, agora da um estudada boa no iptables, tem aqui na under e tem o guia foca linux materia sobre o mesmo, ai vc n vai depender de ninguem, caso vc tem duvida na hora dos estudos, ai vc posta aqui q eu mesmo respondo.
abraço
iptables ? Está certo dessa maneira ?
Seguinte amigo, se você tem um servidor de email instalado no firewall, a regra descrita abaixo está parcialmente correta, pois você somente liberou acesso do servidor de email --> para internet na interface externa e se esqueceu da interface interna. Uma opção seria omitir a declaração da interface proveniente da conexão e expecificando somente a porta e se possível o endereço de destino.
Citação:
iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -i $IF_EXTERNA -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -i $IF_EXTERNA -p tcp --dport 443 -j ACCEPT
Agora caso seu servidor de email seja proveniente de outro lugar que seja por exemplo da internet mundial (fora da rede interna), daí a regra não vale pois a chain que processa requisições que passam pelo firewall, é a chain FORWARD, ou seja:
Código :
iptables -A FORWARD -p tcp -i $IF_EXTERNA -d $REDE_INTERNA --dport 25 -j ACCEPT
iptables -A FORWARD -p tcp -i $IF_INTERNA -d 0.0.0.0 --dport 25 -j ACCEPT
repare que nesse caso estamos liberando acesso a todas as requisições internas ou externas que passem(FORWARD) pelo firewall utilizando a porta 25(smtp). Outro fator novo aqui é o fato de usar a opção -d que especifica o destino dos pacotes, que no caso de um acesso de dentro para fora especificamos que o destino dos pacotes é a rede interna, e n caso de um acesso de dentro para fora, qualquer rede(0.0.0.0). Isso é uma boa prática de segurnaça, aliás quanto mais específica for sua regra, mais clara e mais segura ela será.
Abaixo segue alguns sites muito bons onde você poderá extrair ao máximo os conceitos e práticas do poderoso firewall IPTABLES.
http://www.pop-pr.rnp.br/tiki-index....ores+Firewalls
http://www.conectiva.com/doc/livros/...R/ch14s03.html
Recomendo também a leitura do guia Foca Linux.
http://focalinux.cipsga.org.br/guia/...w-iptables.htm
Abraços,