Meu Firewall - Sugestão

Iniciado por joaotime, 28 de Novembro de 2013, 09:35

tópico anterior - próximo tópico

joaotime

Ola Pessoal tenho um script de firewall que peguei aqui peguei ali gostaria de saber opinião sobre

#!/bin/sh


#Declaração de Variaçoes
PATH=/sbin:/bin:/usr/sbin:/usr/bin
IPTABLES="/sbin/iptables"
PROGRAMA="/usr/local/bin/firewall"
PORTSLIB="/usr/local/bin/portlib"
PORTSBLO="/usr/local/bin/portblock"

#Interfaces de Rede
LAN=eth0
WAN=eth1
REDE="192.168.0.0/24"

# Os diversos m.dulos do iptables s.o chamdos atrav.s do modprobe
modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ipt_state
modprobe ipt_multiport
modprobe iptable_mangle
modprobe ipt_tos
modprobe ipt_limit
modprobe ipt_mark
modprobe ipt_MARK
case "$1" in
start)

$IPTABLES -F
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t mangle -F
$IPTABLES -t nat -F
$IPTABLES -X

# Determina a politica Padrão
$IPTABLES -P INPUT  ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
# ativar o redirecionamento no arquivo ip_forward
echo "1" > /proc/sys/net/ipv4/ip_forward

#habilitando o fluxo interno entre os processos
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
for i in `cat $PORTSLIB`; do
$IPTABLES -A INPUT -p tcp --dport $i -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport $i -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --sport $i -j ACCEPT
$IPTABLES -A INPUT -p udp  --dport $i -j ACCEPT
done

#estabeliza conexão
$IPTABLES -I INPUT -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -I INPUT -m state --state RELATED -j ACCEPT
$IPTABLES -I OUTPUT -p icmp -o $WAN -j ACCEPT
$IPTABLES -I INPUT -p icmp -j ACCEPT
#Bloqueio de portas
#for i in `cat $PORTSBLO`; do
#$IPTABLES -A INPUT -p tcp -i $WAN --dport $i -j DROP
#$IPTABLES -A INPUT -p udp -i $WAN --dport $i -j DROP
#$IPTABLES -A FORWARD -p tcp --dport $i -j DROP
#done
#$IPTABLES -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port 3128
# ativar o mascaramento
$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.9
$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport 1025 -j DNAT --to-destination 192.168.0.10
$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport 3306 -j DNAT --to-destination 192.168.0.10
$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport 33899 -j DNAT --to-destination 192.168.0.110:33899
$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport 222 -j DNAT --to-destination 192.168.0.10
$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport 12020 -j DNAT --to-destination 192.168.0.110
$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport 4550 -j DNAT --to-destination 192.168.0.4
$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport 5550 -j DNAT --to-destination 192.168.0.4
$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport 6550 -j DNAT --to-destination 192.168.0.4
$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport 1200 -j DNAT --to-destination 192.168.0.4
$IPTABLES -t nat -A PREROUTING -i $WAN -p tcp -m tcp --dport 37777 -j DNAT --to-destination 192.168.0.4
$IPTABLES -t nat -A POSTROUTING  -o $WAN -j MASQUERADE

# Fim Fecho tudo que nao tiver no firewall
$IPTABLES -A INPUT -j LOG --log-prefix "FIREWALL: INPUT "

#cabecalho do firewall exibido na tela
echo
echo "==============================================================================="
echo "| REGRAS DO FIREWALL CARREGADAS COM SUCESSO |"
echo "==============================================================================="
echo
;;

stop)
$IPTABLES -F
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t mangle -F
$IPTABLES -t nat -F
$IPTABLES -t nat -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
echo
echo "==============================================================================="
echo "| FIREWALL DESLIGADO |"
echo "==============================================================================="
echo

;;

restart)
$PROGRAMA stop
$PROGRAMA start
;;
*)
echo -e "{TTEXTO}33[01;31mATENCAO \c";tput sgr0
echo -e "Argumento Invalido!!!"
echo "Uso Correto: firewall {start|stop|restart}" >&2
echo
echo "Restartando o Firewall..."
echo
sleep 5
$PROGRAMA restart
exit 1
esac
exit 0

so uma pergunta esta parte
# Determina a politica Padrão
$IPTABLES -P INPUT  ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT

eu devo deixar assim como esta ou devo bloquear tudo e ir liberando o que preciso

a empresa que eu fiz é de médio porta segunda total de dentro da empresa de fora preciso melhorar a segurança para não ter problemas de invasão estas coisa não deixar dar ping no servidor nem de dentro nem de fora

Bom gostaria de sugestão de melhoria

Obrigado

Joao


Arthur Bernardes

Qual a aplicação desse servidor? Ou é apenas um desktop?

Esse firewall tá cheio de "firulas" e muita coisa aí poderia ser removida, outras adicionadas, sem contar que tá desorganizado.

joaotime

somente proxy de rede e liberao de internet somente isto se puder me ajudar fico grato

Arthur Bernardes

O proxy é transparente?

Veja esse firewall, simples e funcional, uso aqui.

Código (/etc/init.d/firewall) Selecionar
#!/bin/bash

echo "Produzido por Arthur Bernardes (17)99199-1157"

echo "Declarando variáveis"

# Interface da Internet
ifinternet="eth0"

# IP da Internet
ip_internet="192.168.1.2"

# Interface da rede local
iflocal="eth1"

# IP da Rede Local
rede_local="10.0.0.0/23"

# Portas à serem liberadas
portas_liberadas="21,23,25,53,110,143,22,80,443,3128,3306,3389,5432,5900,9091"

echo "Variáveis declaradas"

#### Função "start" ####

iniciar(){

echo "Carregando módulos"

modprobe ip_tables
modprobe iptable_mangle
modprobe iptable_nat

echo "Módulos carregados"

echo "Limpando regras"

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z

echo "Regras limpas"

echo "Definindo política padrão"

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

echo "Política padrão definida"

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -o $ifinternet -j MASQUERADE

echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter

echo "Internet compartilhada"

echo "Manter conexões establecidas"

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

echo "Negando pacotes inválidos"

iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

echo "Liberando portas"

iptables -A INPUT -m multiport -p tcp --dport $portas_liberadas -j ACCEPT
iptables -A FORWARD -m multiport -p tcp --dport $portas_liberadas -j ACCEPT
iptables -A OUTPUT -m multiport -p tcp --dport $portas_liberadas -j ACCEPT
iptables -A INPUT -m multiport -p udp --dport $portas_liberadas -j ACCEPT
iptables -A FORWARD -m multiport -p udp --dport $portas_liberadas -j ACCEPT
iptables -A OUTPUT -m multiport -p udp --dport $portas_liberadas -j ACCEPT

echo "Liberando tráfego"

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $iflocal -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT
iptables -A FORWARD -i $iflocal -j ACCEPT

echo "Tráfego liberado"

echo "Redirecionando tráfego para proxy transparente"

iptables -t nat -A PREROUTING -i $iflocal -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i $iflocal -p udp --dport 80 -j REDIRECT --to-port 3128

echo "Tráfego redirecionado para proxy transparente"

}

parar(){
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z
}

status(){
iptables -L -v -n
}

case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
"status") status;;
*) echo "Use os parâmetros start ou stop"
esac


Adapte de acordo à sua rede.

O script é salvo em /etc/init.d, dê permissão de execução com sudo chmod +x /etc/init.d/firewall e pode iniciar, reiniciar ou parar o firewall com o comando sudo service firewall action, onde "action" é a ação desejada (start, stop, restart, status), para carregar durante a inicialização, execute sudo update-rc.d firewall defaults, espero ter ajudado.

joaotime

Artur meu proxy não é transplante estou usando sem por causa de autenticação achei melhor fazer assim
este proxy seu vc usar ele em servidor squid também certo
so me corriga se estiver errado por padrão todas as portas estão bloqueado certo ?
posso fazer redirecionanmento normal com ele certo ?


Obrigado pela resposta

Arthur Bernardes

Sim, a política padrão da cadeia "forward" e "input" é "drop", ou seja, tudo bloqueado.

Você pode sim fazer redirecionamentos usando a tabela "nat", antes libere as portas desejadas na cadeia "input" e "forward".

Como não usa proxy transparente, remova essas linhas do firewall.

echo "Redirecionando tráfego para proxy transparente"

iptables -t nat -A PREROUTING -i $iflocal -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i $iflocal -p udp --dport 80 -j REDIRECT --to-port 3128

echo "Tráfego redirecionado para proxy transparente"