firewall nat cbq squid

Imagen de maxstoro

Tema: 

Hola bueno ya tengo algunos meses consultando y colocando mis dudas muchas han sido resueltas pero sigo teniendo una gran duda con respecto al squid porque la verdad pensé que había resuelto mi problema con la subida pero lamentablemente no se ha podido solucionar uso Centos 5.2.

De antemano gracias por toda la ayuda brindada por la comunidad de ecualug.

He usado el htb-gen y el cbq con ambos no controlo la subida si uso proxy transparente o proxy configurando el pc de ambas formas no he logrado controlar la subida pero si uso solamente el firewall y habilito la navegación solo usando el firewall y habilito cbq o el htb-gen puedo controlar la subida y la bajada.

Por lo que he leído en los diferentes temas que están posteados en ecualug hace falta una regla en el firewall para poder controlar la subida he probado con algunas pero no doy con la regla que me falta.

Comenzare con mi firewall nat que es muy sencillo pero me ha sido de mucha utilidad, espero que si hay algún error o sugerencia para mejorarlo la sabré aceptar y poner en práctica.


#!/bin/sh

OK="\033[1;0m [ \033[00;32mOK \033[1;0m]\033[0m"

echo -e "Aplicando Reglas de Firewall... $OK"

A128=/etc/.scripts/128
A256=/etc/.scripts/256
A512=/etc/.scripts/512

## reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

## Establecimiento de politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

echo " APLICANDO REGLAS DE SEGURIDAD ELEMENTALES ..."
# Quitamos los pings.
# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
# No respondemos a los broadcast.
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Otros
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

## Empezamos a filtrar

/sbin/iptables -A INPUT -i lo -j ACCEPT

# Ahora hacemos enmascaramiento de la red local
# y activamos BIT DE FORWARDING (necesario pues sera parte del enrutado)

iptables -t nat -A POSTROUTING -s 192.168.123.0/24 -o eth0 -j MASQUERADE

# Permitimos hacer forward de paquetes en el firewall, es decir
# que otras máinas puedan salir a traves del firewall.
echo "1" > /proc/sys/net/ipv4/ip_forward

#port 80 al 3128

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

#******************INICIO DE PERMISOS DE ACCESO*****************************
###########################HABILITAR IP ################################

echo -e "Habilitando IP........ $OK"

RED_128Kbit=($(cat $A128 | awk '{print $1}' | sed '/#/d'))
INDICE_IP=0
NUM_IP=${#RED_128Kbit[*]}
while [ $INDICE_IP -lt $NUM_IP ]; do
iptables -A FORWARD -d ${RED_128Kbit[$INDICE_IP]} -j ACCEPT
iptables -A INPUT -s ${RED_128Kbit[$INDICE_IP]} -j ACCEPT
iptables -A OUTPUT -d ${RED_128Kbit[$INDICE_IP]} -j ACCEPT
echo ${RED_128Kbit[$INDICE_IP]}
let INDICE_IP++
done

RED_256Kbit=($(cat $A256 | awk '{print $1}' | sed '/#/d'))
INDICE_IP=0
NUM_IP=${#RED_256Kbit[*]}
while [ $INDICE_IP -lt $NUM_IP ]; do
iptables -A FORWARD -d ${RED_256Kbit[$INDICE_IP]} -j ACCEPT
iptables -A INPUT -s ${RED_256Kbit[$INDICE_IP]} -j ACCEPT
iptables -A OUTPUT -d ${RED_256Kbit[$INDICE_IP]} -j ACCEPT
echo ${RED_256Kbit[$INDICE_IP]}
let INDICE_IP++
done

RED_512Kbit=($(cat $A512 | awk '{print $1}' | sed '/#/d'))
INDICE_IP=0
NUM_IP=${#RED_512Kbit[*]}
while [ $INDICE_IP -lt $NUM_IP ]; do
iptables -A FORWARD -d ${RED_512Kbit[$INDICE_IP]} -j ACCEPT
iptables -A INPUT -s ${RED_512Kbit[$INDICE_IP]} -j ACCEPT
iptables -A OUTPUT -d ${RED_512Kbit[$INDICE_IP]} -j ACCEPT
echo ${RED_512Kbit[$INDICE_IP]}
let INDICE_IP++
done

iptables -A FORWARD -d 192.168.123.0/24 -j DROP
iptables -A INPUT -s 192.168.123.0/24 -j DROP
iptables -A OUTPUT -d 192.168.123.0/24 -j DROP

#vincular ip con mac

ip neig replace 192.168.123.155 lladdr 00:11:4F:43:9W:E6 dev eth1 nud perm

# ===>> Fin de las Reglas <<=== #

Bueno se preguntaran que hay en estas rutas


A128=/etc/.scripts/128
A256=/etc/.scripts/256
A512=/etc/.scripts/512

Bueno lo que contienen son las direcciones ip de mis clientes he creado varios porque en el cbq lo he modificado para genere automáticamente los índices de tal forma que solo coloco las ip de mis clientes dependiendo de cuanto ancho de banda quiero que tengan es decir si quiero que un grupo de clientes tenga 128 Kbit lo coloco en el archivo plano que se llama 128 o si deseo que tenga otro grupo de clientes 256kbit lo coloco en el archivo 256.

Ojo el script de cbq lo tengo configurado de tal forma que cada ip colocada en el archivo plano consuma 256 puros no es que si colocan en el archivo plano 10 ip las 10 ip van a compartir 256 kbit no cada una va a manejar 256kbit lo he hecho de esta forma porque la empresa en la que trabajo maneja un buen ancho de banda y me permite darle a cada cliente un ancho de banda fijo no compartido este script originalmente sino me equivoco fue realizado por damage del cual he podido poner en práctica sus pos de antemano muy agradecido.

<######!/bin/sh
#
# Script de Segmentacion de Ancho de Banda Utilizando CBQ
# < http://sourceforge.net/projects/cbqinit/ >
#
# ________________________________________________________

OK="\033[1;0m [ \033[00;32mOK \033[1;0m]\033[0m"
echo -e "CBQ: Cargando Reglas de Control de Ancho de Banda: ... $OK"

####################
# VARIABLES ########
####################
# COMANDOS
IPTABLES="/sbin/iptables -t mangle"
TC=/sbin/tc
CBQ=/sbin/cbq
A128=/etc/.scripts/128
A256=/etc/.scripts/256
A512=/etc/.scripts/512
# INTERFACES
WAN="0/0"
DEVWAN="eth0"
DEVLAN="eth1"

# VELOCIDAD DE INTERFACES DE RED
ETH0_BW="100Mbit"
ETH1_BW="100Mbit"

# PUERTOS
PROXY_PORT="3128"
SMTP_PORT="25"
P2P_PORT="4662"

####################
# ANCHOS DE BANDA###
####################
BW64="64Kbit"
BW128="128Kbit"
BW256="256Kbit"
BW512="512Kbit"
####################
# PRIORIDADES ######
####################
NORMAL="5"
ALTA="2"
BAJA="8"

A=-1
B=0
GRUPO=0

##########
# INICIO #
##########

$CBQ stop
$IPTABLES -F
$IPTABLES -X

$TC qdisc add dev $DEVWAN root handle 1: cbq bandwidth $ETH0_BW avpkt 1000 cell 8
$TC qdisc add dev $DEVLAN root handle 2: cbq bandwidth $ETH1_BW avpkt 1000 cell 8

####################
# CLIENTES #########
####################

echo -e "Habilitando 128 kbit $OK"

LAN128=($(cat $A128 | awk '{print $1}' | sed '/#/d'))
INDICE_IP=0
NUM_IP=${#LAN128[*]}
while [ $INDICE_IP -lt $NUM_IP ]; do

GRUPO=$((GRUPO+1))
A=$((A+2))
B=$((B+2))

$IPTABLES -A PREROUTING -s ${LAN128[$INDICE_IP]} -d $WAN -i $DEVLAN -j MARK --set-mark $A
$IPTABLES -A FORWARD -s $WAN -d ${LAN128[$INDICE_IP]} -i $DEVWAN -o $DEVLAN -j MARK --set-mark $B
$IPTABLES -A OUTPUT -d ${LAN128[$INDICE_IP]} -p tcp --sport $PROXY_PORT -o $DEVLAN -j MARK --set-mark $B
$IPTABLES -A OUTPUT -d ${LAN128[$INDICE_IP]} -p tcp --sport $SMTP_PORT -o $DEVLAN -j MARK --set-mark $B
$IPTABLES -A OUTPUT -d ${LAN128[$INDICE_IP]} -p tcp --sport $P2P_PORT -o $DEVLAN -j MARK --set-mark $B

$TC class add dev $DEVWAN parent 1:0 classid 1:$GRUPO est 1sec 2sec cbq bandwidth $ETH0_BW rate $BW64 allot 1514 cell 8 weight 1 prio $NORMAL maxburst 20 avpkt 1000 bounded
$TC class add dev $DEVLAN parent 2:0 classid 2:$GRUPO est 1sec 2sec cbq bandwidth $ETH1_BW rate $BW128 allot 1514 cell 8 weight 1 prio $NORMAL maxburst 20 avpkt 1000 bounded
$TC filter add dev $DEVWAN protocol ip handle $A fw classid 1:$GRUPO
$TC filter add dev $DEVLAN protocol ip handle $B fw classid 2:$GRUPO

echo "IP:${LAN128[$INDICE_IP]} $GRUPO $A $B "
let INDICE_IP++

done

################### GRUPO 256kbit #############################
echo -e "Habilitando 256kbit $OK"

LAN256=($(cat $A256 | awk '{print $1}' | sed '/#/d'))
INDICE_IP=0
NUM_IP=${#LAN256[*]}
while [ $INDICE_IP -lt $NUM_IP ]; do

GRUPO=$((GRUPO+1))
A=$((A+2))
B=$((B+2))

$IPTABLES -A PREROUTING -s ${LAN256[$INDICE_IP]} -d $WAN -i $DEVLAN -j MARK --set-mark $A
$IPTABLES -A FORWARD -s $WAN -d ${LAN256[$INDICE_IP]} -i $DEVWAN -o $DEVLAN -j MARK --set-mark $B
$IPTABLES -A OUTPUT -d ${LAN256[$INDICE_IP]} -p tcp --sport $PROXY_PORT -o $DEVLAN -j MARK --set-mark $B
$IPTABLES -A OUTPUT -d ${LAN256[$INDICE_IP]} -p tcp --sport $SMTP_PORT -o $DEVLAN -j MARK --set-mark $B
$IPTABLES -A OUTPUT -d ${LAN256[$INDICE_IP]} -p tcp --sport $P2P_PORT -o $DEVLAN -j MARK --set-mark $B

$TC class add dev $DEVWAN parent 1:0 classid 1:$GRUPO est 1sec 2sec cbq bandwidth $ETH0_BW rate $BW128 allot 1514 cell 8 weight 1 prio $NORMAL maxburst 20 avpkt 1000 bounded
$TC class add dev $DEVLAN parent 2:0 classid 2:$GRUPO est 1sec 2sec cbq bandwidth $ETH1_BW rate $BW256 allot 1514 cell 8 weight 1 prio $NORMAL maxburst 20 avpkt 1000 bounded
$TC filter add dev $DEVWAN protocol ip handle $A fw classid 1:$GRUPO
$TC filter add dev $DEVLAN protocol ip handle $B fw classid 2:$GRUPO

echo "IP:${LAN256[$INDICE_IP]} $GRUPO $A $B "
let INDICE_IP++

done

################### GRUPO 512kbit #############################
echo -e "Habilitando 512kbit $OK"

LAN512=($(cat $A512 | awk '{print $1}' | sed '/#/d'))
INDICE_IP=0
NUM_IP=${#LAN512[*]}
while [ $INDICE_IP -lt $NUM_IP ]; do

GRUPO=$((GRUPO+1))
A=$((A+2))
B=$((B+2))

$IPTABLES -A PREROUTING -s ${LAN512[$INDICE_IP]} -d $WAN -i $DEVLAN -j MARK --set-mark $A
$IPTABLES -A FORWARD -s $WAN -d ${LAN512[$INDICE_IP]} -i $DEVWAN -o $DEVLAN -j MARK --set-mark $B
$IPTABLES -A OUTPUT -d ${LAN512[$INDICE_IP]} -p tcp --sport $PROXY_PORT -o $DEVLAN -j MARK --set-mark $B
$IPTABLES -A OUTPUT -d ${LAN512[$INDICE_IP]} -p tcp --sport $SMTP_PORT -o $DEVLAN -j MARK --set-mark $B
$IPTABLES -A OUTPUT -d ${LAN512[$INDICE_IP]} -p tcp --sport $P2P_PORT -o $DEVLAN -j MARK --set-mark $B

$TC class add dev $DEVWAN parent 1:0 classid 1:$GRUPO est 1sec 2sec cbq bandwidth $ETH0_BW rate $BW256 allot 1514 cell 8 weight 1 prio $NORMAL maxburst 20 avpkt 1000 bounded
$TC class add dev $DEVLAN parent 2:0 classid 2:$GRUPO est 1sec 2sec cbq bandwidth $ETH1_BW rate $BW512 allot 1514 cell 8 weight 1 prio $NORMAL maxburst 20 avpkt 1000 bounded
$TC filter add dev $DEVWAN protocol ip handle $A fw classid 1:$GRUPO
$TC filter add dev $DEVLAN protocol ip handle $B fw classid 2:$GRUPO

echo "IP:${LAN512[$INDICE_IP]} $GRUPO $A $B "
let INDICE_IP++

done

echo "ANCHOS DE BANDA ASIGNADOS"
# FIN DEL ARCHIVO #
###############################

Bueno de esta forma se me facilita mas el habilitar o deshabilitar una determinada ip ahora si necesitan otro grupo pues solo deben analizar un poquito el script para que lo puedan usar o lo puedan adaptar a sus necesidades pero repito no es compartido cada ip que coloquen en cada archivo plano va tener el valor que le configuren.

Y bueno para finalizar voy a colocar la configuración del squid.


http_port 3128 transparent

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
#reglas locales
acl red128 src "/etc/.scripts/128"
acl red256 src "/etc/.scripts/256"
acl red512 src "/etc/.scripts/512"
acl bloqueadas url_regex "/etc/squid/bloqueadas"
acl SSL_ports port 443 563

acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

http_access allow manager localhost
http_access allow localhost
http_access allow red128 !bloqueadas
http_access allow red256 !bloqueadas
http_access allow red512 !bloqueadas
http_access deny all
http_access deny manager
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports
dns_nameservers x.x.x.x x.x.x.x

Bueno quizás se me escape algo del squid pero ha de ser mínimo no me recuerdo otra cosa que haya configurado pero si se me escapa disculpen.

Bueno estos serian los script que uso en mi servidor en el cual administro el internet bueno con esto ya tienen como administrar y asignarle el ancho de banda que deseen a cada cliente pero el problema es la subida que no controla cuando uso el squid pero si lo detengo y uso solo el firewall y el cbq lo controla muy bien otra cosita también uso el htb-gen en otro server y la verdad es súper bueno también pueden encontrar en los comos la forma de configurar e implementar el htb-gen, pero igual con el squid no logro controlar la subida si uso solo el firewall y el htb-gen funciona súper bien pero bueno la verdad espero que le sea de utilidad a algún usuario de ecualug y si realizan una modificación o mejora me la hagan saber para implementarla y comentar que tal me fue espero que también analicen mis script y que me ayuden a solucionar el problema de la subida cuando uso el squid muchas gracias saludos a todos.

Comentarios

Ya veo, yo lo he probado

Ya veo, yo lo he probado corriendo el CBQINIT en el firewall+nat y en otro server el squid y allí si limita, quería hacerlo todo en el mismo equipo pero esta difícil la tarea.

Gracias por tu respuesta.

mmmm el problema es que la

Imagen de maxstoro

mmmm el problema es que la salida la controla el squid y no los script de control de ancho de banda pero sinceramente no extraño el squid espero igual encuentres una solucione

Páginas