donssp
(usa Fedora)
Enviado em 30/08/2013 - 10:28h
Bom dia. Estou com dificuldade em algo que creio ser básico mas vamos la
estou implementando o seguinte script :
##################################################
#!/bin/bash
##Declaração de variaveis
## Constantes
ipt=/usr/sbin/iptables
modprobe=/sbin/modprobe
##Interfaces
if_ext=eth0
if_int=eth1
##Redes
ip_ext=192.168.0.199
ip_lan=10.1.1.0/8
##Portas especificas
SSH=22
##Servidores de DNS utilizados
DNS1=8.8.8.8
DNS2=8.8.4.4
function start(){
###PREPARACAO
##Carregando modulos
echo "Ativando modulos Iptables..."
$modprobe iptable_nat
$modprobe ip_conntrack
$modprobe ip_conntrack_ftp
$modprobe ip_nat_ftp
$modprobe ipt_LOG
$modprobe ipt_REJECT
$modprobe ipt_MASQUERADE
echo "..."
## Esvaziando Tabelas
echo "Limpando regras atuais..."
$ipt -F
$ipt -X
#$ipt -F -t nat
#$ipt -X -t nat
#$ipt -F -t mangle
#$ipt -X -t mangle
echo "..."
### Ativando Funcoes do Kernel
## Habilitando encaminhamento ip
echo 1 > /proc/sys/net/ipv4/ip_forward
## Protege contra IP spoofing
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
## Habilitando a protecao contra TCP SYN Cookie
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
## Ignorando Bradcast
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
######## FILTER
### CHAIN INPUT
## Definindo politica padrao
$ipt -P INPUT DROP
## Concedendo acesso de Loopback
$ipt -A INPUT -i lo -j ACCEPT
## Conceder acesso local ao squid, amarrando interface e range IP
######################################
## Permitir acesso a porta 80
#$ipt -A INPUT -p tcp -s $ip_lan --dport 80 -j ACCEPT
## Bloqueando Spoofing
$ipt -A INPUT -i $if_ext -s 10.0.0.0/8 -j DROP
$ipt -A INPUT -i $if_ext -s 172.16.0.0/12 -j DROP
$ipt -A INPUT -i $if_ext -s 192.168.0.0/16 -j DROP
$ipt -A INPUT -i $if_ext -s 224.0.0.0/4 -j DROP
$ipt -A INPUT -i $if_ext -s 240.0.0.0/5 -j DROP
## Manter conexoes ja estabelecidas
$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
## Abrir porta SSH (Acesso interno)
$ipt -A INPUT -p tcp -s $ip_lan --dport $SSH -j ACCEPT
## Abrir porta SSH (Acesso externo)
$ipt -A INPUT -p tcp -i $if_ext --dport $SSH -j ACCEPT
## Bloequear outras portas pela interface externa
$ipt -A INPUT -i $if_ext -j REJECT
# Descartar pings
$ipt -A INPUT -p icmp -s $ip_lan --icmp-type echo-request -j ACCEPT
$ipt -A INPUT -p icmp -s $ip_lan --icmp-type 8 -j ACCEPT
$ipt -A INPUT -p icmp -s $ip_lan --icmp-type 0 -j ACCEPT
$ipt -A INPUT -p icmp --icmp-type echo-request -j DROP
$ipt -A INPUT -p icmp --icmp-type 8 -j DROP
$ipt -A INPUT -p icmp --icmp-type 0 -j DROP
## Protecao contra port scanners
$ipt -N SCANNER
$ipt -A SCANNNER -j DROP
$ipt -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags ALL NONE -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags ALL ALL -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i $if_ext -j SCANNER
$ipt -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i $if_ext -j SCANNER
## Descarta pacotes malformados, protegendo contra ataques diversos
$ipt -A INPUT -m unclean -j DROP
$ipt -A INPUT -m state --state INVALID -j DROP
## Descarta a abertura de novas conexoes, bloqueando o acesso externo
#ipt -A INPUT -p tcp --syn -j DROP
## Descarta pacotes que nao se enquadram em nenhuma regra
$ipt -A INPUT -j REJECT
### CHAIN OUTPUT
## Definindo politica padrao
$ipt -P OUTPUT -j ACCEPT
## Conceder acesso de loopback
$ipt -A OUTPUT -o lo -j ACCEPT
## Manter conexoes ja estabelecidas
$ipt -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
### CHAIN FORWARD
## Descarta pacotes mal formados, protegendo contra ataques diversos
$ipt -A FORWARD -m state --state INVALID -j DROP
## Definindo politica padrao
$ipt -P FORWARD DROP
## Permitir conexao com o servidor DNS
#$ipt -A FORWARD -p udp -d $DNS1 --dport 53 -j ACCEPT
#$ipt -A FORWARD -p udp -d $DNS2 --dport 53 -j ACCEPT
#$ipt -A FORWARD -p udp -d $DNS3 --dport 53 -j ACCEPT
#$ipt -A FORWARD -p udp -d $DNS4 --dport 53 -j ACCEPT
## Permitir que pacotes com conexoes ja estabelecidas ou solicitadas atravessem o firewall
$ipt -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
## Protecao contra worms
$ipt -A FORWARD -p tcp --dport 135 -i $if_ext -j REJECT
## Protecao contra syn-flood
$ipt -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT
## Protecao contra ping da morte
$ipt -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# Bloqueando pacotes TCP indesejaveis
$ipt -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
### NAT
## CHAIN POSTROUTING
## Liberando acesso
$ipt -t nat -A POSTROUTING -s $ip_lan -j MASQUERADE
### CHAIN PREROUTING
## CHAIN FORWARD
###MANGLE
## CHAIN INPUT
## CHAIN OUTPUT
## Otimizando resolucao de nomes
$ipt -t mangle -A OUTPUT -o $if_ext -p udp --dport 53 -j TOS --set-tos 16
## Otimizando conexao http/https
$ipt -t mangle -A OUTPUT -o $if_ext -p tcp --dport 80 -j TOS --set-tos 16
$ipt -t mangle -A OUTPUT -o $if_ext -p tcp --dport 443 -j TOS --set-tos 16
## CHAIN FORWARD
## Otimizando resolucao de nomes
$ipt -t mangle -A FORWARD -o $LP -p udp --dport 53 -j TOS --set-tos 16
$ipt -t mangle -A FORWARD -o $INTRAGOV -p udp --dport 53 -j TOS --set-tos 16
## CHAIN PREROUTING
## CHAIN POSTROUTING
####################################################################
# Salvar configurações
#ipt-save
}
function limpa(){
echo "Limpando tabelas..."
$ipt -F
$ipt -X
$ipt -F -t nat
$ipt -X -t nat
$ipt -F -t mangle
$ipt -X -t mangle
echo "..."
}
function stop(){
echo "Desabilitando encaminhamento IP e outras funcoes..."
#Desabilitando encaminhamento IP
echo 0 > /proc/sys/net/ipv4/ip_forward
#IP Spoofing
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter
#Protecao contra TCP SYN Cookie
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
#Ignorando Broadcast
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "..."
echo "Limpando tabelas..."
$ipt -F
$ipt -X
$ipt -F -t nat
$ipt -X -t nat
$ipt -F -t mangle
$ipt -X -t mangle
echo "..."
echo "Redefinindo Policy..."
$ipt -t filter -P INPUT ACCEPT
$ipt -t filter -P OUTPUT ACCEPT
$ipt -t filter -P FORWARD ACCEPT
$ipt -t nat -P PREROUTING ACCEPT
$ipt -t nat -P POSTROUTING ACCEPT
$ipt -t nat -P FORWARD ACCEPT
$ipt -t mangle -P INPUT ACCEPT
$ipt -t mangle -P OUTPUT ACCEPT
$ipt -t mangle -P FORWARD ACCEPT
$ipt -t mangle -P PREROUTING ACCEPT
$ipt -t mangle -P POSTROUTING ACCEPT
echo "..."
}
function restart(){
stop
start
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
limpa)
limpa
;;
*)
echo ""
echo "(start-stop-restart-limpa)"
echo ""
exit 0
;;
esac
## Salvando configurações
#ipt-save
# Firewall habilitado
#exit
########################################################
O problema por enquanto é o seguinte:
notem que a linha na chain INPUT "$ipt -A INPUT -p tcp -s $ip_lan --dport 80 -j ACCEPT" esta comentada. Eu gostaria que a principio o acesso a porta 80 não seja permitido, então dei as permissões desejadas e no fim inclui a regra "$ipt -A INPUT -j DROP" para recusar oque não se encaixa. Porém quando habilito a regra "$ipt -t nat -A POSTROUTING -s $ip_lan -j MASQUERADE" ele compartilha a rede, e consequentemente o acesso web, mesmo eu não dando qualquer permissão de acesso na porta 80. Eu acreditava que mesmo habilitando o MASQUERADE, eu deveria dar permissão explicita as portas e conexões desejadas, mas pelo jeito não é assim. Gostaria de ter esse controle, até porque posteriormente vou instalar o squid e direcionar tudo para a porta 3128.
Alguém pode dar um help?
Grato =D