Esclarecimentos sobre Iptables

1. Esclarecimentos sobre Iptables

David Rodrigues
david_rodrigues

(usa CentOS)

Enviado em 08/08/2012 - 16:27h

Bom pessoal eu estou usando o seguinte script de firewall no meu servidor , mas não estou conseguindo liberar o compartilhamento da internet nas estações , só consigo quando eu crio um outro script especifico para o compartilhando,porém quando eu uso o outro script, ele desabilita as regras do meu firewall, gostaria que os amigos mais experientes pudessem dar uma olhada no meu script e me mostrar onde eu posso incluir o a regra do compartilhamento dentro do script do firewall, segue o script do Firewall:


#!/bin/bash
#
# Shell Script - Firewall
# =======================
# Analista: David Rodrigues
# Email: david.rodrigues@lasalle.edu.br
#
# chkconfig: 2345 80 20
# description: Firewall is a script easy of use for protection in the system.
#
### BEGIN INIT INFO
# Provides: Firewall
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Firewall is a script easy of use for protection in the system.
### END INIT INFO

# IP da Rede
NETWORK=192.168.23.0/24

# Interface da Rede Local - LAN
ILAN=eth1

# Interface da Rede Externa - Internet
INET=eth0

IPT=/sbin/iptables

if [ ! -x $IPT ]; then
if [ -e $IPT ]; then
echo "O programa 'iptables' está sem permissão de execução"
else
echo "O programa 'iptables' não está instalado atualmente. Você pode instalá-lo digitando:"
echo "yum install iptables"
fi
exit 0
fi

CLEAN_RULES () {
# Removendo regras
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F

# Apagando chains
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Zerando contadores
$IPT -Z
$IPT -t nat -Z
$IPT -t mangle -Z
}

REDIRECT () {
# Redirecionamento
$IPT -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4158
}

SHARE_INTERNET () {
#Mascaramento
$IPT -t nat -A POSTROUTING -o $INET -s $NETWORK -j MASQUERADE

# Ativando o redirecionamento de pacotes
echo 1 > /proc/sys/net/ipv4/ip_forward
}

SECURITY () {
# Proteção para SYN Flood
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Rejeitar requisição de ICMP Echo destinado a Broadcasts e Multicasts
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Ignorar Mensagens Falsas de icmp_error_responses
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

for i in /proc/sys/net/ipv4/conf/*; do
# Não Redirecionar Mensagens ICMP
echo 0 > $i/accept_redirects

# Proteção a Ataques IP Spoofing
echo 0 > $i/accept_source_route

# O kernel decide se envia resposta pelo mesmo endereço ou não.
echo 1 > $i/arp_filter

# Permitir que Pacotes Forjados sejam logados pelo próprio kernel
echo 1 > $i/log_martians

# Verificar Endereço de Origem do Pacote (Proteção a Ataques IP Spoofing)
echo 1 > $i/rp_filter
done
}

LOG () {
$IPT -A INPUT -i $INET -p tcp --dport 135 -j DROP
$IPT -A INPUT -p tcp -m multiport ! --dports 0:1056 -j DROP
$IPT -A INPUT -p udp -j DROP
$IPT -A INPUT -p icmp -j DROP
$IPT -A INPUT -m limit --limit 3/m --limit-burst 3 -j LOG --log-prefix "LOG-FW: "
}

SERVER_RULES () {
# Apache - Servidor Web
#$IPT -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

# Apache TomCat - Servidor Web
#$IPT -A INPUT -p tcp --dport 8080 -j ACCEPT

# Bind9 - Servidor DNS
#$IPT -A INPUT -p udp --dport 53 -j ACCEPT

# DanGuardian - Servidor Proxy
#$IPT -A INPUT -i $ILAN -p tcp --dport 8080 -j ACCEPT

# DHCP - Servidor DHCP
$IPT -A INPUT -i $ILAN -p udp --sport 68 --dport 67 -j ACCEPT

# IPP - Protocolo de Impressão na Internet
$IPT -A INPUT -i $ILAN -p tcp --dport 631 -j ACCEPT
$IPT -A INPUT -i $ILAN -p udp -m multiport --dports 138,631 -j ACCEPT

# NFS - Servidor NFS
#$IPT -A INPUT -p tcp -m multiport --dports 111,2049,51049 -j ACCEPT
#$IPT -A INPUT -p udp -m multiport --dports 111,49176,50445 -j ACCEPT

# ProFTPD - Servidor FTP
#$IPT -A INPUT -i $ILAN -p tcp --dport 21 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 49152:49162 -j ACCEPT

# Postfix - Servidor de E-mail
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 25,110 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 465,995 -j ACCEPT

# PostgreSQL - Servidor Postgresql
#$IPT -A INPUT -i $ILAN -p tcp --dport 5432 -j ACCEPT

# Samba - Serviços de Diretório da Microsoft
$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 445,139 -j ACCEPT
$IPT -A INPUT -i $ILAN -p udp -m multiport --dports 137,138 -j ACCEPT

# Squid - Servidor Proxy
$IPT -A INPUT -i $ILAN -p tcp --dport 4158 -j ACCEPT

# SSH - Servidor SSH
$IPT -A INPUT -i $ILAN -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 20 -j DROP
$IPT -A INPUT -i $ILAN -p tcp --dport 22 -m state --state NEW -m recent --set
$IPT -A INPUT -i $ILAN -p tcp --dport 22 -j ACCEPT

# TFTP/uDHCP - Servidor LTSP
#$IPT -A INPUT -i $ILAN -p udp --dport 69 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p tcp --dport 2000 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p udp --dport 514 -j ACCEPT

# VNC - Servidor de Acesso Remoto
#$IPT -A INPUT -p tcp --dport 5900 -j ACCEPT

# Webmin - Gerenciador Web de Servidor
#$IPT -A INPUT -i $ILAN -p tcp --dport 10000 -j ACCEPT
}

SERVICE_RULES () {
# DNS - Serviço de Nomes de Dominios
$IPT -A FORWARD -o $INET -p udp -m multiport --dports 53,5353 -j ACCEPT

# FTP - Protocolo de Transferência de Arquivo
$IPT -A FORWARD -o $INET -p tcp --dport 21 -j ACCEPT

# HTTP - Protocolo de Transferência de Hypertext
$IPT -A FORWARD -o $INET -p tcp -m multiport --dports 80,8080 -j ACCEPT

# HTTPS - Protocolo de Transferência de Hypertext Seguro
$IPT -A FORWARD -o $INET -p tcp --dport 443 -j ACCEPT

# MSNMS - Serviço de Mensageiro de Rede da Microsoft
#$IPT -A FORWARD -o $INET -p tcp -m multiport --dports 1863,7001 -j ACCEPT
#$IPT -A FORWARD -o $INET -p udp --dport 7001 -j ACCEPT

# NTP - Protocolo para sincronização dos relógios
#$IPT -A FORWARD -o $INET -p udp --dport 123 -j ACCEPT

# Ping
#$IPT -A INPUT -i $ILAN -p icmp --icmp-type 8 -j ACCEPT
#$IPT -A FORWARD -o $INET -p icmp --icmp-type 8 -j ACCEPT

# POP3 - Protocolo de Correio
#$IPT -A FORWARD -o $INET -p tcp --dport 110 -j ACCEPT

# POP3S - Protocolo de Correio Seguro
#$IPT -A FORWARD -o $INET -p tcp --dport 995 -j ACCEPT

# PPTP - Protocolo de Encapsulamento Ponto a Ponto
#$IPT -A FORWARD -o $INET -p tcp --dport 1723 -j ACCEPT

# RDP - Protocolo de Área de Trabalho Remoto
#$IPT -A FORWARD -o $INET -p tcp --dport 3389 -j ACCEPT

# SSDP - Protocolo para Descoberta de Serviços Simples
#$IPT -A INPUT -i $ILAN -p udp --dport 1900 -j ACCEPT

# SSH - Shell Seguro
$IPT -A FORWARD -o $INET -p tcp --dport 22 -j ACCEPT

# SMTP - Protocolo Simples para Transferência de Correio
#$IPT -A FORWARD -o $INET -p tcp --dport 25 -j ACCEPT

# SSMTP - Protocolo Simples para Transferência de Correio Seguro
#$IPT -A FORWARD -o $INET -p tcp --dport 465 -j ACCEPT

# TELNET
#$IPT -A FORWARD -o $ILAN -p tcp --dport 23 -j ACCEPT

# VNC - Computação em Rede Virtual
#$IPT -A FORWARD -o $ILAN -p tcp --dport 5900 -j ACCEPT

# XMPP - Protocolo de Presença e Mensagens Extensiva
#$IPT -A FORWARD -o $INET -p tcp --dport 5222 -j ACCEPT
}

ENABLE_FW () {
# Removendo regras, apagando chains e zerando contadores
CLEAN_RULES

# Política
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

# Adicionando redirecionamentos
#REDIRECT

# Compartilhando a Internet
SHARE_INTERNET

# Atribuindo segurança
SECURITY

# Adicionando regras p/ Servidores
SERVER_RULES

# Adicionando regras p/ Serviços
SERVICE_RULES

# Manter Conexões Estabelecidas
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Liberando o Tráfego na Interface loopback
$IPT -A INPUT -i lo -j ACCEPT

# LOGs
LOG
}

DISABLE_FW () {
# Removendo regras, apagando chains e zerando contadores
CLEAN_RULES

# Política
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

# Adicionando redirecionamentos
#REDIRECT

# Compartilhando a Internet
SHARE_INTERNET
}

MODULES () {
MOD=(
"iptable_filter"
"iptable_nat"
"iptable_mangle"
"ipt_LOG"
"ipt_REDIRECT"
"ipt_MASQUERADE"
)

for N in $(seq 0 $[${#MOD[@]}-1]); do
if [ -z "$(lsmod | grep ${MOD[$N]})" ]; then
/sbin/modprobe ${MOD[$N]}
fi
done
}

EXEC () {
if [ $(whoami) = "root" ]; then
MODULES
$1 && success || failure
RET=0
else
echo -n "You're not a user root"
failure
RET=1
fi
}

. /etc/init.d/functions

case "$1" in
start)
echo -n "Starting Firewall iptables: "
EXEC ENABLE_FW
;;
stop)
echo -n "Stopping Firewall iptables: "
EXEC DISABLE_FW
;;
restart|reload)
echo -n "Reloading Firewall configuration: "
EXEC ENABLE_FW
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
esac

echo
exit $RET


  


2. Re: Esclarecimentos sobre Iptables

Alex
alexhctp

(usa Linux Mint)

Enviado em 08/08/2012 - 18:00h

Oi Amigo, observando o seu script eu achei ele um pouco desorganizado.
Para ficar algo simples de fácil compreensão divida tudo em módulos. Vou simplificar pra você. O script é lido de cima para baixo, ou seja, se você colocar uma regra liberando e outra proibindo, vc acabada criando redundância e enlouquece o seu sistema. Procure seguir a sequencia a seguir:

-> BLOQUEIA TUDO
-> DEFINA SUAS PRÓPRIAS CHAINS (QDO POSSUIR)
-> CRIE/ADICIONE AS REGRAS PARA AS CHAINS PERSONALIZADAS
-> CRIE/ADICIONE AS REGRAS PARA CHAIN INPUT
-> CRIE/ADICIONE AS REGRAS PARA CHAIN FORWARD
-> CRIE/ADICIONE AS REGRAS PARA CHAIN OUTPUT
-> CRIE/ADICIONE AS REGRAS PARA TABELA NAT
-> CRIE/ADICIONE AS REGRAS PARA CHAIN PREROUTING (TAB NAT)
-> CRIE/ADICIONE AS REGRAS PARA CHAIN POSTROUTING (TAB NAT)- {O redirecionamento do squid vem aqui.}
-> CRIE/ADICIONE AS REGRAS PARA TABELA MANGLE

Se voce organizar nessa sequencia, seu scrip vai funfar de boa.

Se tiver duvida, entra em contato.

Abraco!


3. Re: Esclarecimentos sobre Iptables

David Rodrigues
david_rodrigues

(usa CentOS)

Enviado em 09/08/2012 - 17:20h

Um imagino que sim eu fui copiando conforme as minha necessidades , vou tentar organizar o meu script , mas me diga onde devo atribuir a regra para compartilhar a internet? Em qual secção das que você criou para eu organizar ?
Poderia dar um exemplo de algo que você usa ?


Obrigado e valeu por responder !

"conhecimento não compartilhado se torna nulo".


4. Re: Esclarecimentos sobre Iptables

Alex
alexhctp

(usa Linux Mint)

Enviado em 11/08/2012 - 15:10h

Oi amigo, caso o seu objetivo seja apenas liberar e compartilhar a conexão, usa os comandos listados abaixo. antes de cada um eu lhe explico o que eles fazem:

Habilita o modulo do iptables, caso o mesmo não esteja ativo.
modprobe iptable_nat

Ativa o ip_forward para encaminhar os pacotes utilizados pra fazer o NAT.
echo 1 > /proc/sys/net/ipv4/ip_forward

Regra de roteamento que diz para o iptables redirecionar para a internet as requisições com destinos diferentes da rede local, ou seja, habilita um gateway no seu server.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Na hora de colocar no script, lembra da dica que te dei, segue uma sequencia logica. To comentando um dos meus scripts pra te mostrar, ok?

Qualquer duvida estou a disposicao. ;)


5. Re: Esclarecimentos sobre Iptables

David Rodrigues
david_rodrigues

(usa CentOS)

Enviado em 14/08/2012 - 07:49h

Já fiz isso meu amigo , não tenho dúvidas quanto a isso , mas para que a regra inicie com o boot preciso introduzir isso em um script com ordem de execução junto com o boot, como eu tenho aquele script lá do firewall queria introduzir nele , para que todas as regras destinas ao Iptables fique naquele arquivo , ficando fácil na hora de fazer uma manutenção!

Minha dúvida é , em qual posição eu coloco aquelas regras no script do firewall???


6. Re: Esclarecimentos sobre Iptables

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 14/08/2012 - 09:27h

Cara, notei com base nas tuas regras no firewall abaixo
# IPP - Protocolo de Impressão na Internet
$IPT -A INPUT -i $ILAN -p tcp --dport 631 -j ACCEPT
$IPT -A INPUT -i $ILAN -p udp -m multiport --dports 138,631 -j ACCEPT

# NFS - Servidor NFS
#$IPT -A INPUT -p tcp -m multiport --dports 111,2049,51049 -j ACCEPT
#$IPT -A INPUT -p udp -m multiport --dports 111,49176,50445 -j ACCEPT

# ProFTPD - Servidor FTP
#$IPT -A INPUT -i $ILAN -p tcp --dport 21 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 49152:49162 -j ACCEPT

# Postfix - Servidor de E-mail
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 25,110 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 465,995 -j ACCEPT

# PostgreSQL - Servidor Postgresql
#$IPT -A INPUT -i $ILAN -p tcp --dport 5432 -j ACCEPT

# Samba - Serviços de Diretório da Microsoft
$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 445,139 -j ACCEPT
$IPT -A INPUT -i $ILAN -p udp -m multiport --dports 137,138 -j ACCEPT


Então mantém todos esses serviços no firewall ?
Não é recomendado, principalmente o servidor de arquivos Samba junto com firewall.
se precisar de algumas dicas sobre firewall e criação de script shell iptables
http://mundodacomputacaointegral.blogspot.com.br/2012/05/entendendo-o-funcionamento-de-um.html


7. Re: Esclarecimentos sobre Iptables

David Rodrigues
david_rodrigues

(usa CentOS)

Enviado em 14/08/2012 - 09:57h

Sabe amigo , eu preciso sim do Samba e Firewall , nesse servidor eu preciso manter os seguintes serviços:

# dhcpd
# Squid (Controle de Acesso)
# Samba ( Integrar as estações e permitir o compartilhamento de dados
# Firewall
# Apache (Programa da Empresa)
# Bind
# PostgreSQL ( Base de dados do Programa da empresa)


Para mim está sendo um desafio e tanto e tenho estudado bastante, mas ainda tenho alguns probleminhas com IPtables , por isso pedi ajuda em algumas dúvidas parceiro, se puder me ajudar desde já agradeço ....









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts