Skip to: Site menu | Main content

Balanceamento entre links com Mikrotik


Existem duas técnicas bastante utilizadas para balancemanetos entre links, o ECMP (Equal Cost Multi-Path) e o PCC (per-connection-classifier), em se tratando de mikrotik. No PCC ocorre a divisão em igual fluxo a partir de parâmetros pré-definidos, como src-address, src-port, dst-address, dst-port. Ou seja, o PCC torna-se ótimo para balanceamento e alta disponibilidade em cenários onde há preocupação em manter sessões a partir de origem, como msn e tráfego SSL. Para esta técnica, disponível apenas a partir da versa 3.24 do RouterOs, os pacotes tem de retornar pela wan onde entraram, fazendo assim necessário a classificação do tráfego nas wan’s a partir das critérios definidos, forçando a sair pelo gateways onde as sessões estão persistentes. No ECMP os pacotes podem sair por wan’s diferentes das que entraram, apesar de mascarar uma única saída, a entrega dos pacotes continuará sendo a partir de diferentes gateways, não forçando que a entrega seja feito a partir de sua origem quando se estabeleceu a sessão. O ECMP possibilita a escabilidade de carga entre links, podendo definir que o maior link participe mais do balanceamento que outro, ou seja, entre 1 link com taxas de 3Mb/s e outro de 1Mb/s podemos definir o que o link 1 atue com 2/3 no balanceamento e o outro com 1/3 .

Cenário:

Dois links de igual tamanho:

Link1 : 192.168.1.254
Link2 : 192.168.2.254

Interfaces Wan Mikrotik:

ether2: 192.168.1.250
ether3: 192.168.2.250

Interface local Mikrotik :

ether1: 192.168.0.1

Técnicas:

ECMP
PCC

ECMP

;Definição de interfaces

/ ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=ether1
add address=192.168.1.250/24 network=192.168.1.0 broadcast=192.168.1.255 interface=ether2
add address=192.168.2.250/24 network=192.168.2.0 broadcast=192.168.2.255 interface=ether3

;Failover e definição de balanceamento 1:1 . Caso o check-gateway aponte falha em um gateway ele irá remover o gateway da listagem

/ ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.254,192.168.2.254 check-gateway=ping

;Saídas dos pacotes pelas interfaces Nateado para os ip’s de respectivos

/ ip firewall nat
add chain=srcnat out-interface=ether2 action=masquerade
add chain=srcnat out-interface=ether3 action=masquerade

; Marcação de conexões e rotas para mascaramento da saída independente da origem, quem entra pela wan1 pode sair pela wan2

/ ip firewall mangle
add chain=input in-interface=ether2 action=mark-connection new-connection-mark=wlan1_conn
add chain=input in-interface=ether3 action=mark-connection new-connection-mark=wlan2_conn
add chain=output connection-mark=wlan1_conn action=mark-routing new-routing-mark=to_wla1
add chain=output connection-mark=wlan2_conn action=mark-routing new-routing-mark=to_wla2

/ ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.254 routing-mark=to_wla1
add dst-address=0.0.0.0/0 gateway=192.168.2.254 routing-mark=to_wla2

PCC

;Definição de interfaces

/ ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=ether1
add address=192.168.1.250/24 network=192.168.1.0 broadcast=192.168.1.255 interface=ether2
add address=192.168.2.250/24 network=192.168.2.0 broadcast=192.168.2.255 interface=ether3

;Marcar as conexões de entrada para que saiam pela interface que entrou

/ Ip firewall mangle
add chain=input in-interface=ether2 action=mark-connection new-connection-mark=wlan1_conn add chain=input in-interface=ether2 action=mark-connection new-connection-mark=wlan1_conn
add chain=input in-interface=ether3 action=mark-connection new-connection-mark=wlan2_conn add chain = input in-interface=ether3 action=mark-connection new-connection-mark=wlan2_conn

; Marcação de saída no roteador para encaminhamento adequado

add chain=output connection-mark=wlan1_conn action=mark-routing new-routing-mark=to_wlan1
add chain=output connection-mark=wlan2_conn action=mark-routing new-routing-mark=to_wlan2

; Através da política de roteamento forçaremos as saídas pelos respectivos gateways.

add chain=prerouting dst-address=192.168.1.0/24 action=accept in-interface=ether1
add chain=prerouting dst-address=192.168.2.0/24 action=accept in-interface=ether1

; Iremos dividir em dois grupos para marcação de rotas para Internet a partir da política de roteamento, excluindo o tráfego local, já que o prerounting, na marcação, captura todo tráfego. Usaremos como critério de balanceamento e distinção entre sessões de rotas “source and destination addressees”

add chain=prerouting dst-address-type=!local in-interface=ether1 per-connection-classifier=both-addresses:2/0 \
action=mark-connection new-connection-mark=wlan1_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=ether1 per-connection-classifier=both-addresses:2/1 \
action=mark-connection new-connection-mark=wlan2_conn passthrough=yes

; Marcação dos pacotes oriundas das conexões já marcadas

add chain=prerouting connection-mark=wlan1_conn in-interface=ether1 action=mark-routing new-routing-mark=to_wlan1
add chain=prerouting connection-mark=wlan2_conn in-interface=ether1 action=mark-routing new-routing-mark=to_wlan2

; Criando rota para cada marcação

/ ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.254 routing-mark=to_wlan1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.254 routing-mark=to_wlan2 check-gateway=ping

; Habilitando Failover

add dst-address=0.0.0.0/0 gateway=192.168.1.254 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.254 distance=2 check-gateway=ping

; Mascararemos o tráfego para saída a partir das devidas interfaces, de acordo o ip de origem

/ ip firewall nat
add chain=srcnat out-interface=ether2 action=masquerade
add chain=srcnat out-interface=ether3 action=masquerade

Alteração em índice de vídeos (Download Progressivo)

Problema com demora ao carregar vídeos em downloads progressivos(via HTTP) pode ser facilmente resolvido com multiplexador para arquivos MP4, chamado MP4Box. Esse problema se dá ao fato de não haver tempo de intercalação definido para os dados, ou seja, intervalo de tempo para leitura das informações sobre o vídeo, do index. Essas informações são: tempo, bitrate entre outros . Grosseiramente falando , é necessário trazer o index do vídeo para frente! rs.

O Script abaixo altera o tempo de intercalação para 300 ms fazendo com que o vídeo seja carregado de forma instantânea enquanto é baixado pelo player, ainda é possível enviar o vídeo através de FTP no mesmo script.

Dependências para o MP4Box: gpac build-essential zlib1g-dev

O script para conversão chamada outro script para envio ftp, segue os dois códigos:

    Script de conversão: alteraind.sh


#! /bin/bash

#
# Tiago Gomes Pereira - 27/01/2010
#

if [ ! $1 ] || [ ! $2 ]
then
echo "Falta nome do vídeo ou caminho local , Estrume"
echo "alteraind.sh nomedovideo.mp4 /host.com.br/video/2009/11"
exit 19
fi

######################### VARIAVEIS
# Com tempo de índice de 300ms

# Nome Vídeo
VIDEO=$1
# Caminho
caminho=$2

##################################
# Extrai caminhos de diretório
localdir=`dirname $VIDEO`

# Extrai arquivo
localfile=`basename $VIDEO`

cd $localdir

################ Executa Conversão
/usr/local/bin/MP4Box -inter 300 $localfile &
#################

################# Se conversão Ok, manda , se não, manda também.
if [ $? = "0" ] ; then

echo `date "+%Y-%m-%d %H:%M:%S INFO: [ VIDEO ] SUCESSO NA CONVERSAO DE $VIDEO"` >> /var/log/enviovideo.log
/bin/envftp.sh $VIDEO $caminho &

else

echo `date "+%Y-%m-%d %H:%M:%S ERRO: [ VIDEO ] ERRO NA CONVERSAO DE $VIDEO"` >> /var/log/enviovideo.log
/bin/envftp.sh $VIDEO $caminho &
fi

    script para envio FTP: envftp.sh


#! /bin/bash
#
# Tiago Gomes Pereira - 27/01/2010
#

if [ ! $1 ] || [ ! $2 ]
then
echo "Falta nome do vídeo ou caminho , Estrume"
echo "envftp.sh nomedovideo.mp4 /host.com.br/video/2009/11"
exit 19
fi

VIDEO1=$1
CAMINHO1=$2

####################### Dados FTP
caminhoArq="$VIDEO1"
host=host.com
usuario="usuario"
senha="senha"

# Identificação de arquivos e diretórios remotos a serem utilizados pelo ftp

localdir=`dirname $caminhoArq`
localfile=`basename $caminhoArq`

#################################

echo `date "+%Y-%m-%d %H:%M:%S INFO: [ FTP ] INICIO DA TRANSFERENCIA DE $VIDEO1 EM http://host.com/$CAMINHO1"` >> /var/log/enviovideo.log

################### Transação FTP
ftp -un $host < quote USER $usuario
quote PASS $senha
lcd $localdir
cd $CAMINHO1
binary
put $localfile
quit
EOF
################################

Bridge Mikrotik

Há tempos procuramos uma forma prática para filtro e classificação de pacotes através de bridges em determinados segmentos da rede. Heis que surge a solução, e de peso, utilizando apenas uma Router Board com mikrotik que mais assemelha-se a um pequeno HUB. Com isso, é possível substituir aquelas CPU’S que ocupam espaço e estão sujeitas a mais um grau de complexidade no que diz respeito a falhas e configuração.

    Especificação do equipamento:

Dimensões – Peso: 12 cm x 09 cm x 28 cm / Peso: 210 g
CPU: Atheros AR7240 300MHz Processador de Rede
Memoria: 32MB DDR SDRAM onboard
Armazenamento: 64MB onboard NAND memory chip
Ethernet: Cinco portas 10/100 (switch) com Auto-MDI/X
Consumo de Energia: 6W consumo medio, máximo 10W
Sistema Operacional: MikroTik RouterOS v3, Level4
Preço: Entre R$ 179,00 a R$ 192,00

O propósito é que o tráfego em determinado segmento da rede ou domínio de colisão entre por uma porta ( a qual enxergará demais portas – Trunk ) e seja passado às demais portas as quais os hosts direcionados estejam conectados. As portas, com excessão da ether1 , não se comunicarão entre si. Além dos filtros para dropagem de alguns vírus e malware, e tráfego broadcast, será impedido tráfego oriundos da porta 67 e protocolo UDP ( servidores que desejam fornecer o DHCPOFFER na rede) a fim de evitar servidores dhcp alheios ofereçam ip a nossos clientes.

    Cenário:

. O link a partir do segmento de rede o qual o tráfego será repassado para os demais pontos entrará na ETHER1, assim como tráfego do backbone.
. Clientes internos ou seguimentos que se conectam com o Link entrante ficarão entre a ETHER2 e a ETHER4 .
. Opcionalmente a ETHER5 será utilizada por outro segmento que realiza enlace com algum ponto conectado à RouterBoard, uma antena repetidora que recebe tráfego do link entrante, mas pode ser utilizado como outro cliente das demais portas.

    Criando a interface Bridge entre as portas :

/interface bridge
add admin-mac=00:00:00:00:00:00 ageing-time=5m arp=enabled auto-mac=yes comment="" disabled=no forward-delay=15s l2mtu=1524 max-message-age=20s mtu=1500 name=bridge1 priority=\
0x8000 protocol-mode=none transmit-hold-count=6

    Adicionando as portas à Bridge

/interface bridge port
add bridge=bridge1 comment="" disabled=no edge=auto external-fdb=auto horizon=none interface=ether1 path-cost=10 point-to-point=auto priority=0x80
add bridge=bridge1 comment="" disabled=no edge=auto external-fdb=auto horizon=none interface=ether5 path-cost=10 point-to-point=auto priority=0x80
add bridge=bridge1 comment="" disabled=no edge=auto external-fdb=auto horizon=none interface=ether4 path-cost=10 point-to-point=auto priority=0x80
add bridge=bridge1 comment="" disabled=no edge=auto external-fdb=auto horizon=none interface=ether3 path-cost=10 point-to-point=auto priority=0x80
add bridge=bridge1 comment="" disabled=no edge=auto external-fdb=auto horizon=none interface=ether2 path-cost=10 point-to-point=auto priority=0x80

.. e permitindo filtros a patir do firewall

/interface bridge settings
set use-ip-firewall=yes use-ip-firewall-for-pppoe=no use-ip-firewall-for-vlan=no

    Bloqueando tráfego entre as portas exclusive a ether1, pois essa será nossa trunk

/interface bridge filter
add action=drop chain=forward comment="" disabled=no in-bridge=bridge1 in-interface=!ether1 out-bridge=bridge1 out-interface=!ether1

    Adicionando NAT ao ip firewall para tratamento do tráfego da bridge pela camada de aplicação ( Firewall filter convencional do MK ):

/ip firewall nat
add action=accept chain=srcnat comment="" disabled=no out-interface=bridge1

    Adicionando filtros para dropar malware’s, dhcp a partir de clientes, forward entre portas, etc …

/ip firewall filter
add action=drop chain=forward comment="BLoqueia DHCP cliente" disabled=no \
in-bridge-port=!ether1 protocol=udp src-port=67
add action=accept chain=forward comment="allow established connections" \
connection-state=established disabled=no
add action=accept chain=forward comment="allow related connections" \
connection-state=related disabled=no
add action=drop chain=forward comment="drop invalid connections" \
connection-state=invalid disabled=no
add action=drop chain=virus comment="Drop virus" disabled=no dst-port=69 \
protocol=udp
add action=drop chain=virus comment="Drop Blaster Worm" disabled=no dst-port=\
135-139 protocol=tcp
add action=drop chain=virus comment="Drop Messenger Worm" disabled=no \
dst-port=135-139 protocol=udp
add action=drop chain=virus comment="Drop Blaster Worm" disabled=no dst-port=\
445 protocol=tcp
add action=drop chain=virus comment="Drop Blaster Worm" disabled=no dst-port=\
445 protocol=udp
add action=drop chain=virus comment=________ disabled=no dst-port=593 \
protocol=tcp
add action=drop chain=virus comment=________ disabled=no dst-port=1024-1030 \
protocol=tcp
add action=drop chain=virus comment="Drop MyDoom" disabled=no dst-port=1080 \
protocol=tcp
add action=drop chain=virus comment=________ disabled=no dst-port=1214 \
protocol=tcp
add action=drop chain=virus comment="ndm requester" disabled=no dst-port=1363 \
protocol=tcp
add action=drop chain=virus comment="ndm server" disabled=no dst-port=1364 \
protocol=tcp
add action=drop chain=virus comment="screen cast" disabled=no dst-port=1368 \
protocol=tcp
add action=drop chain=virus comment=hromgrafx disabled=no dst-port=1373 \
protocol=tcp
add action=drop chain=virus comment=cichlid disabled=no dst-port=1377 \
protocol=tcp
add action=drop chain=virus comment=Worm disabled=no dst-port=1433-1434 \
protocol=tcp
add action=drop chain=virus comment="Bagle Virus" disabled=no dst-port=2745 \
protocol=tcp
add action=drop chain=virus comment="Drop Dumaru.Y" disabled=no dst-port=2283 \
protocol=tcp
add action=drop chain=virus comment="Drop Beagle" disabled=no dst-port=2535 \
protocol=tcp
add action=drop chain=virus comment="Drop Beagle.C-K" disabled=no dst-port=\
2745 protocol=tcp
add action=drop chain=virus comment="Drop MyDoom" disabled=no dst-port=\
3127-3128 protocol=tcp
add action=drop chain=virus comment="Drop Backdoor OptixPro" disabled=no \
dst-port=3410 protocol=tcp
add action=drop chain=virus comment=Worm disabled=no dst-port=4444 protocol=\
tcp
add action=drop chain=virus comment=Worm disabled=no dst-port=4444 protocol=\
udp
add action=drop chain=virus comment="Drop Sasser" disabled=no dst-port=5554 \
protocol=tcp
add action=drop chain=virus comment="Drop Beagle.B" disabled=no dst-port=8866 \
protocol=tcp
add action=drop chain=virus comment="Drop Dabber.A-B" disabled=no dst-port=\
9898 protocol=tcp
add action=drop chain=virus comment="Drop Dumaru.Y" disabled=no dst-port=\
10000 protocol=tcp
add action=drop chain=virus comment="Drop MyDoom.B" disabled=no dst-port=\
10080 protocol=tcp
add action=drop chain=virus comment="Drop NetBus" disabled=no dst-port=12345 \
protocol=tcp
add action=drop chain=virus comment="Drop Kuang2" disabled=no dst-port=17300 \
protocol=tcp
add action=drop chain=virus comment="Drop SubSeven" disabled=no dst-port=\
27374 protocol=tcp
add action=jump chain=forward comment="jump to the virus chain" disabled=no \
jump-target=virus
add action=accept chain=forward comment="Allow HTTP" disabled=no dst-port=80 \
protocol=tcp
add action=accept chain=forward comment="Allow SMTP" disabled=no dst-port=25 \
protocol=tcp
add action=accept chain=forward comment="allow TCP" disabled=no protocol=tcp
add action=accept chain=forward comment="allow ping" disabled=no protocol=\
icmp
add action=accept chain=forward comment="allow udp" disabled=no protocol=udp
add action=drop chain=forward comment="drop everything else" disabled=no

.. Desabilitando o Discovery Neighbor. Não permitir tráfego do protocolo CDP assim bloqueando a descoberta de interfaces mikrotik pela rede

/ip neighbor discovery
set bridge1 discover=no
set ether1 discover=no
set ether2 discover=no
set ether3 discover=no
set ether4 discover=no
set ether5 discover=no

Espero ter ajudado, qualquer dúvida enviem comentários ou diretamente pelo email: algodas@gmail.com

Viva à Resistência!

Bob Marley Day!

Ano Novo!

Como é de prache e mesmo sem saber se vocês ainda tem saco para as ditas felicitações, independente  da finalidade, rsrsrs ( comercial, alfinetada – eu venho me divertindo muito) , aqui vai o meu: Feliz Ano Novo!! O que vale é o que se deseja independente do objetivo.

Este ano foi bem legal, amadurecimento profissional, boas experiências relacionados a esse, ajustes e adaptações para convívio corporativo e um reconhecimento legal e que me faz bem . Nos aspectos pessoais  alguns problemas se retratam de forma ainda mais comum, as opiniões das pessoas estão cada vez mais voláteis às circunstâncias que as favorecem, ou ainda, pior, as circunstâncias que as tornam mais amigáveis . Ví que todos estão sujeitos a isto, mas intervalos de tempos tão pequenos e tão bem sincronizados é sacanagem! rsrs. Enfim, continuei a cometer alguns erros e mantive alguns péssimos hábitos , me preciptei em algumas atitudes (ô arrependimento!) mas acreditem , alguns, mas apenas alguns destes erros quero para toda vida, porque mostram que continuo autêntico nas eventualidades que me incomodam e ao que não faço nem desejo aos outros. Conheci pessoas legais  e pude perceber de forma mais clara o real valor da família, principalmente meus pais, estes e mais algumas pessoas me fazem bem a cada minuto corrente e que diminuem o tempo de vida útil do Ano que se passa. Este ano foi de *#&er , legal mesmo e ano que vem será muito melhor pela lei natural das coisas, a positividade a serviço da positividade rsrs. Abraço a todos e se divirtam muito!

Tiago Gomes

Maildrop não atualiza maildirsize após alteração em base virtual?

Para entender
Para solucionar

Para entender:

Problemas nas passagens de parâmetro do authlib para o maildrop ( quota e bla, bla, blá ) ?? Este problema torna-se típico quando há necessidade de alteração em serviço de delivery ( maildrop ) na utilização de anti-spam como o tmda e ou spam-assassin. Em meu caso , parâmetros do OpenLdap que seriam passados pelo authlib, tiveram de ser passados e muitas vezes resgatados (forçadamente) através do maildroprc, para que fosse possivel os testes de confirmação e armazenamento temporário de mensagens em um mailbox temporário, para entrega posterior à confirmação. Depois de algumas alterações no master.cf para passagem de parâmetros ao maildroprc , valores de quota passaram a não ser resgatados pelo maildrop. No processo de recompilação do maildrop (erronêamente achando que o problema fosse o maildirquota desabilitado). Com auxílio do Sam Varshavchik’s que fortaleceu alguns pontos e expurgou algumas lendas sobre o maildrop.

> A partir da versão 1.8 não é necessário parâmetro de configuração como –with-authlib , é nativo do maildrop o suporte ao authlib

> Passagem de parâmetros de arquivo para armazenar variáveis para contas virtuais com: –with-confdir=maildropldaprc , torna-se desnecessário se você já mapeia no postfix os atributos da base para as contas virtuais. Por exemplo: /etc/authlib/authldaprc já é presente no authlib .

> “group+world writable” no binário do maildrop é uma péssima idéia para pensar em ownar o Maildir dos usuários.

> Basear-se em um forma de configuração citada no NOTE do arquivo INSTALL é imprecíndivel e desnecessários agregar mais de uma em uma compilação:
NOTE:

When using the standalone maildrop build with courier-authlib, one
of the following configurations must be used:

* Your mail server must invoke maildrop as the root user (the -d
flag reads the mail account’s uid and gid, then drops root) .
* Manually change the permissions on the maildrop binary to be
setuid root.
* Manually change the permissions on the courier-authlib’s socket
directory (/usr/local/var/spool/authdaemon by default) to be
globally readable or executable.

> Certifique-se de ter um maildrop assim :

hrd:~ # maildrop -v
maildrop 2.0.4 Copyright 1998-2005 Double Precision, Inc.
GDBM extensions enabled.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.

Fazendo assim, por exemplo: ./configure --sysconfdir=/etc --enable-sendmail=/usr/sbin/sendmail --enable-trusted-users=root maildrop vmail --enable-syslog=1 --enable-maildirquota --enable-maildrop-uid=100 --enable-maildrop-gid=8

> No master.cf , caso não seja passado apenas “-d {$recipient}” ao maildrop , trate de ler as variáveis passadas na ordenação do Shell.

Se for assim (não maildroprc, não forçar variáveis para tratamento no delivery e não customizar serviço de delivery ):
maildrop unix - n n - - pipe
flags=DRhu user=maildrop argv=/usr/local/bin/maildrop -d ${recipient}

Se for assim:
maildrop unix - n n - - pipe
flags=DRhu user=maildrop argv=/usr/local/bin/maildrop /etc/maildroprc -d
${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop} ${sender}

Ordem de passagem ao maildroprc: $1 = ${user}@${nexthop} $2 = ${extension} .........

Para Solucionar:

No master.cf:

maildrop unix – n n – – pipe
flags=DRhu user=maildrop argv=/usr/local/bin/maildrop /etc/maildroprc
-d ${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop} ${sender}

No script de consulta na base /usr/bin/quotz :

#!/bin/bash

LDAPHOST=”ldap.server.com.br”
LDAPBASE=”dc=mail,dc=server,dc=com,dc=br”
LDAPSEARCH=”dc=mail,dc=server,dc=com,dc=br”
LDAPBIND=”cn=admin,dc=mail,dc=server,dc=com,dc=br”
LDAPBINDPASS=’senhaaa’
LDAPSEARCHATTRIBUTE=quota

BUSCA=`ldapsearch -x -h $LDAPHOST -b $LDAPBASE “(&(mail=$1)(objectclass=CourierMailAccount))” -D $LDAPBIND -w $LDAPBINDPASS $LDAPSEARCHATTRIBUTE | grep quota: `

VALOR=`echo $BUSCA | cut -d ‘:’ -f 2`
echo $VALOR

No maildroprc:

##########MAILDROPRC#############

EXTENSION=”$3″
RECIPIENT=tolower(“$4″)
LOGNAME=tolower(“$5″)
USER=tolower(“$5″)
HOST=tolower(“$6″)
HOME=”/boxvirtual/$HOST/$USER”
SENDER=”$7″
DEFAULT=”/boxvirtual/$HOST/$USER”
DEST=”Maildir”

logfile “/tmp/maildrop.log”

# Importação de valores de quota do ldap e valores atuais do maildirsize

# Resgatar valor atual do maildirsize no momento da entrega da mensagem
QUOTASIZE=`/usr/bin/head -n1 $DEFAULT/Maildir/maildirsize`

# Consulta valor da quota para o usuário
QUOTALDAP=`/usr/bin/quotz $USER@$HOST`

if ( “$EXTENSION” ne “” )
{
DELIMITER=”+”
}
log “QUOTA ATUAL: $QUOTASIZE NOVA: $QUOTALDAP”

RECIPIENT=”$LOGNAME$DELIMITER$EXTENSION@$HOST”
log “Recip: $RECIPIENT”

if (!$SENDER)
{
SENDER = “<>”
}

`test -e $HOME`
if ( $RETURNCODE != 0 )
{
`mkdir -p $HOME`
`maildirmake $HOME/Maildir`
`maildirmake -q $QUOTALDAP /boxvirtual/$HOST/$USER/Maildir`
`chmod 0700 $HOME/Maildir`
}
log “home: $HOME”

# Se a quota se diferenciar entre valor na base e o valor no maildir parte para atualização

if ( $QUOTASIZE != $QUOTALDAP )
{
`maildirmake -q $QUOTALDAP /boxvirtual/$HOST/$USER/Maildir`
log “FOI”
}
if ( $SENDER eq “MAILER-DAEMON@server.com.br” )
{
to “/boxvirtual/$HOST/$USER/$DEST”;
}
else
{
if ( $RECIPIENT eq $SENDER )
{
if ( $QUOTASIZE != $QUOTALDAP )
{
`maildirmake -q $QUOTALDAP /boxvirtual/$HOST/$USER/Maildir`
}
to “/boxvirtual/$HOST/$USER/$DEST”;
}
else
{
`test -e /boxvirtual/$HOST/${USER}/.tmda_install`
if ( $RETURNCODE == 0 )
{
include “/boxvirtual/$HOST/${USER}/.tmda_install”
}
if ( $TMDA eq “Y” )
{
EXTENSION=”$3″
RECIPIENT=”$LOGNAME$DELIMITER$EXTENSION@$HOST”
SENDER=”$7″

to “| /usr/local/tmda/bin/tmda-filter”

}
else
{
to “/boxvirtual/$HOST/$USER/$DEST”;
}
}
}

# FIM MAILDROPRC

Espero ter ajudado. Grande abraço e até a próxima.

RoundCube Mail – Patch to password change in LDAP Authentication . V2.0 Stable

The RoundcubeMail is in fact one of the greatest innovations of open source webmail. Code very structured and approach to web standards much improved, using Ajax and promote greater interactivity and speed, on your latest version stable consolidated itself as the best webmail IMAP in my opinion.

I am providing a patch adapted by me to password change on roundcubmail authentication in LDAP. This patch applies to the stable version roundcubemail, v2.0. There were many changes in Beta for stable but some functions had to be rewritten. Some instances of such functions as:
$ OUTPUT-> add_handler ( 'userpasswd', 'rcmail_passwd_form');

But absent in passwd.inc had to be added due to changes made in func.inc. I hope to contribute with all the changes that were waiting for this release.

Download Patch

Premissas técnicas básicas para segurança em ambientes Linux.

 

O conceito de Segurança da informação é muito mais complexo que atributos técnicos abordados neste artigo. Tratar de segurança da Informação é enxergar a Tecnologia da informação como processo de negócio aplicados a sustentabilidade de uma corporação. Por isso, este artigo aborda algumas recomendações básicas para aplicações técnicas a servidores. Sugiro que não se limite a estes comandos ou configurações, é imprescindível ler as Normas ISO/IEC 27001 e a BS17799 , onde são abordados aspectos de gestão e normas práticas aplicadas aos processos de negócio. Espero que ajude induzir o contato com as peculiaridades relacionadas ao assunto. Boa leitura e grande abraço a todos!

induzir ao contato com as particularidades e pecurliaridades características ao assunto. Boa leitura e grande abraço a todos!

Link para : Premissas técnicas básicas para segurança em ambientes Linux

considerações sobre a LPI

Há alguns dias conclui com êxito as fases (duas provas) para LPIC-1, a certificação Linux provida pela Linux Professional Institute. Trata-se de uma certificação padrão para averiguação da qualificação para administração de ambientes Linux por grandes corporações no Brasil e no mundo. A prova 101 ( a primeira ) tem como maiores pesos atribuídos a gerência de pacotes e configuração do X, sendo a segunda(102) direcionada à aspectos básicos e medianos de redes além de serviços aplicados como o httpd e configuração do Samba e do Apache, além de cálculos simples de subnets. De nada adiantaria decorar parâmentros e opções de comandos e sintaxes de configuração se não tivesse o auxílio de simulados dedicados, acreditem , passei mais tempo resolvendo simulados providos por livros e sites  direcionados, revisados do ano de 2007, do que revisando os conteúdos direcionados â certificação que  já havia estudado. No que diz respeito ao material didático o Guia FOCA Linux me forneceu embasamento suficiente para aprovação, material muito robusto e com abordagem muito direcionada ao que é cobrado pelas provas e ótimo material para consulta por administradores. Próximo passo pretendido será alguma cetificação voltado a Governança em T.i , afim de focar na gestão de qualidade e boas práticas aplicados a serviços de Ti internos e externos, ITIL, tema de meu trabalho de conclusão de curso, seria uma boa pedida, mas sobre isto falaremos depois. Abraço e boa sorte a todos.

Mais informações sobre a LPI no site da LPI Brasil .

Rotina para calcular IP aplicada ao gerenciador

Iêpa!

Levando em consideração que alguns casos requeiram prover Ip´s para arquivos do dhcpd, criei uma pequena rotina para gerar ip’s para subnets com 30 bits destinados a Rede, máscara 255.255.255.252,  podendo ser utilizada ou não com qualquer interface de gerenciamento de redes e provedores. Esta rotina foi desenvolvida associada ao código do gerenciador citado em posts antigos, onde a função é chamado antes da gravação dos ips no arquivo de configuração do dhcpd.

calculaip () {

for ipd in `cat /etc/rc.d/hosts.liberadosMAC`;do
IPSOURCE=`echo $ipd | cut -d ‘;’ -f 2 >> /etc/rc.d/ipord`
done;

for ipd in `cat /etc/rc.d/ipord`;do
IPSOURCE=`echo $ipd | cut -d ‘;’ -f 2 `

done;

ip=`echo $IPSOURCE`
ip1=`echo $ip | cut -d ‘.’ -f 4`
ip2=`echo $ip | cut -d ‘.’ -f 3`
if [ $ip1 -lt  "250"  ]  ; then
nfinaladdr=$(($ip1 + 4));
nfinalrede=$(($nfinaladdr – 2));
nfinalgw=$(($nfinalrede + 1));
nfinalbroad=$(($nfinaladdr + 1));
ipaddr=”192.168.$ip2.$nfinaladdr”
ipnet=”192.168.$ip2.$nfinalrede”
ipgw=”192.168.$ip2.$nfinalgw”
ipbroad=”192.168.$ip2.$nfinalbroad”
<!–more–>

elif [ $ip1="250" ]  ; then
$ip2=$(($ip2 + 1));
$ip1=0;

nfinaladdr=$(($ip1 + 4));
nfinalrede=$(($nfinaladdr – 2));
nfinalgw=$(($nfinalrede + 1));
nfinalbroad=$(($nfinaladdr + 1));
ipaddr=”192.168.$ip2.$nfinaladdr”
ipnet=”192.168.$ip2.$nfinalrede”
ipgw=”192.168.$ip2.$nfinalgw”
ipbroad=”192.168.$ip2.$nfinalbroad”

fi

}

Abaixo a rotina de gravação no arquivo /etc/dhcpd.conf

calculaip
echo $ipmac | tr a-z A-Z  >> $caminhoIPMAC
#cadastro na lista de acesso do Proxy-cache
ipmac2=`echo $ipmac | cut  -d ‘;’ -f 2`
mac=`echo $ipmac | cut  -d ‘;’ -f 3`
nome=`echo $ipmac | cut -d ‘;’ -f 4`

#GRAVAÇÃO NO ARQUIVO

echo “subnet $ipnet netmask 255.255.255.252 {” >> /etc/rc.d/hostsDHCPD
echo “option broadcast-address $ipbroad;” >> /etc/rc.d/hostsDHCPD
echo “option routers $ipgw;” >> /etc/rc.d/hostsDHCPD
echo “host $nome {” >> /etc/rc.d/hostsDHCPD
echo “hardware ethernet $mac;” >> /etc/rc.d/hostsDHCPD
echo “fixed-address $ipaddr;” >> /etc/rc.d/hostsDHCPD
echo “}}” >> /etc/rc.d/hostsDHCPD

Note que a gravação é feita em um arquivo temporário linkado ao arquivo de configuração do DHCPd, o arquivo /etc/rc.d/hostsDHCPD . Para linkar ao dhcpd.conf será necessário colocar apenas $ ./etc/rc.d/hostsDHCPD no arquivo de configuração do DHCP para que seja adicionado as linhas para cada Host do dhcpd.

O gerenciador adaptado a esta realidade encontra-se disponível neste Aqui. Uma versão sem bugs também estará disponível preciso apenas “restorar” meu sistemas de Arquivos do SVN , rsrsrs. Abraço e até a próxima.