anúncios

terça-feira, 27 de dezembro de 2011

Configurando servidor proxy autenticado com Squid

No post http://mundodacomputacaointegral.blogspot.com/2011/11/configurando-servidor-proxy-com-squid.html mostrei como configurar o squid para proxy transparent, e hoje explicarei como configurar o squid para servir como proxy autenticado no gateway da rede fazendo cache e restrição de acesso de alguns sites e dessa vez com autenticação de usuário/senha.

Instalação
Baixando o source do squid 3.1.16
$wget "http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.16.tar.gz"
Extraindo o source do download acima
$tar -xzvf squid-3.1.16.tar.gz
$cd squid-3.1.16
$./configure --prefix=/usr/local/squid \
--enable-err-Portuguese=lang \
--mandir=/usr/share/man \
--enable-auth="basic,digest,ntlm" \
--enable-removal-policies="lru,heap" \
--enable-digest-auth-helpers="password" \
--enable-basic-auth-helpers="getpwnam,YP,NCSA,MSNT" \
--enable-external-acl-helpers="ip_user,unix_group,wbinfo_group" \
--enable-ntlm-auth-helpers="fakeauth,no_check" \
--enable-removal-policies \
--enable-linux-netfilter \
--enable-ident-lookups \
--enable-useragent-log \
--enable-cache-digests \
--enable-delay-pools \
--enable-referer-log \
--enable-underscores \
--enable-async-io \
--enable-truncate \
--enable-arp-acl \
--with-pthreads \
--enable-icmp \
--enable-htcp \
--enable-carp \
--enable-poll \
--enable-snmp \
--enable-wccp \
--enable-ssl

$make
#make install

Configuração
Como foi definido o local da instalação em /usr/local/squid no ./configure
#mv /usr/local/squid/etc/squid.conf /usr/local/squid/etc/squid.conf.bkp
squid.conf

#autenticação dos usuários para acesso
auth_param basic program /usr/local/squid/libexec/ncsa_auth /usr/local/squid/etc/passwd
auth_param basic children 5
auth_param basic realm COMPUTAÇÃO INTEGRAL
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl autenticados proxy_auth REQUIRED
http_port 3128
visible_hostname mundodacomputacao

cache_mem 128 MB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 2048 16 256
cache_access_log /usr/local/squid/var/logs/cache.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

acl manager proto cache_object
acl localhost src 127.0.0.1
acl autenticados proxy_auth REQUIRED
acl Safe_ports port 80 #http
acl Safe_ports port 21 #ftp
acl Safe_ports port 443 563 #https,snews
acl Safe_ports port 70 #gopher
acl Safe_ports port 210 #wais
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 Safe_ports port 901 #swat
acl Safe_ports port 1025-65535 #portas altas
acl purge method PURGE
acl CONNECT method CONNECT
acl SSL_ports port 443 563

##ACLS
#criando ACLs para os usuários com acesso livre e restrito
acl grupo_liberado proxy_auth "/usr/local/squid/usuarios_liberados"
acl grupo_limitado proxy_auth "/usr/local/squid/usuarios_limitados"

#criando ACLs para restrição de sites e palavras
acl sitesbloqueados url_regex -i "/usr/local/squid/dominiosbloqueados"
acl palavrasproibidas url_regex -i "/usr/local/squid/palavrasproibidas"
acl sitespermitidos url_regex -i "/usr/local/squid/dominiospermitidos"

#ACL para bloquear skype
acl acl_url_im_skype url_regex ^((0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5]|[3-9][0-9]{0,1})\.){3}(0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5][3-9][0-9]{0,1})(:|/|$\?)

#controle de acesso
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

#http_access deny sitesbloqueados !grupo_liberado
#http_access deny palavrasproibidas !grupo_liberado
#http_access deny CONNECT acl_url_im_skype !grupo_liberado
http_access allow sitespermitidos

http_access allow localhost
http_access allow autenticados grupo_liberado
http_access allow autenticados grupo_limitado !sitesbloqueados !palavrasproibidas !acl_url_im_skype

http_access deny all
error_directory /usr/local/squid/share/errors/pt-br


Criando os arquivos que serão utilizados
#touch /usr/local/squid/dominiosbloqueados
#touch /usr/local/squid/palavrasproibidas
#touch /usr/local/squid/dominiospermitidos
#cp /usr/local/squid/sbin/squid /usr/sbin
#mkdir /usr/local/squid/var/cache
#mkdir /usr/local/squid/var/logs
#chmod 0777 /usr/local/squid/var/cache
#chmod 0777 /usr/local/squid/var/logs
#touch /usr/local/squid/usuarios_liberados
#touch /usr/local/squid/usuarios_limitados

BadListSites /usr/local/squid/dominiosbloqueados

orkut.com
www.orkut.com
facebook.com
www.facebook.com
twitter.com
www.twitter.com
www.issoebizarro.com
www.ebuddy.com
www.meebo.com
www.4shared.com
4shared.com
www.esnips.com
esnips.com
www.adrive.com
adrive.com
www.megaupload.com
megaupload.com
www.thepiratebay.org
thepiratebay.org
www.rapidshare.com
rapidshare.com
www.hotfile.com
hotfile.com
www.filecrop.com
filecrop.com
www.fileserv.com
fileserv.com
www.freeproxy.ca
freeproxy.ca
www.redtube.com
redtude.com
www.youtube.com
youtube.com
www.torproject.org
torproject.org
www.ninjacloak.com
ninjacloak.com
speedyhide.info/index.php
speedyhide.info
www.dropbox.com
www.baixandolegal.org
baixandolegal.org
www.baixebr.org
baixebr.org
www.superdownloads.com
superdownloads.com
www.superdownloads.com.br
superdownloads.com.br
www.baixaki.com.br
baixaki.com.br
www.tecmundo.com.br
www.techtudo.com.br
gizmodo.uol.com.br

BadListWords /usr/local/squid/palavrasproibidas

orkut
facebook
twitter
youtube
sexo
bondage
issoebizarro
tor
torproject
vidalia
ultrasurf
proxy
anonymous
gatewall.dll
ms
messenger
webmessengers
webmessenger
ebuddy
meebo
iloveim
skype
porno
sexy
safadinha
speedhide
ninjacloak
dropbox
piratebay
filecrop
baixaki
superdownload
techmundo
techtudo
gizmodo


Cadastrando usuários no proxy squid
#htpasswd -c /usr/local/squid/etc/passwd usuario1
Nota: O argumento -c é necessário apenas na primeira vez para criar o arquivo /usr/local/squid/etc/passwd.
#htpasswd /usr/local/squid/etc/passwd usuario2

Adicione os usuários com acesso livre no arquivo /usr/local/squid/usuarios_liberados
/usr/local/squid/usuarios_liberados
sysadmin
suportesystem

Adicione os usuários com acesso restrito no arquivo /usr/local/squid/usuarios_limitados
/usr/local/squid/usuarios_limitados
#Exemplo
usuario1
usuario3
usuario6

Configurando o proxy no navegador da estação
No IE
No menu Ferramentas>Conexões da Internet na aba Conexões
clique no botão Configurações da LAN em Servidor proxy e nos campos Endereço e Porta coloque o IP de seu servidor proxy e porta utilizado do squid.
Nesse caso: Endereço: 192.168.1.103 Porta: 3128
No Firefox
Na opção Preferências do Firefox em Avançado na aba Rede no botão Configurar conexão marque o radiobutton Configuração manual de proxy digite nos campos Endereço e Porta o IP de servidor proxy e porta do squid.
Nesse caso: Endereço: 192.168.1.103 Porta: 3128 e marque também o checkbox Usar este proxy para todos os protocolos

Check-list do Squid
#squid -z

Iniciando o serviço
Copie este script retirado do Servidor Linux(Slackware) para iniciar/parar o squid, mas também funciona na distro Debian, basta mover o script para /etc/init.d/.
rc.squid.conf

#!/bin/sh
# Start/stop/restart/reload the Squid Internet Object Cache (squid)
# To make Squid start automatically at boot, make this
# file executable: chmod 755 /etc/rc.d/rc.squid
# Written for Slackware Linux by Erik Jan Tromp
# Modified by David Somero
SQUIDCFG=/usr/local/squid/etc/squid.conf
SQUIDCMD=/usr/sbin/squid
if [ ! -r $SQUIDCFG ]; then
echo "Please set the correct path to $SQUIDCFG"
exit 1
fi
if [ ! -x $SQUIDCMD ]; then
echo "$SQUIDCMD not found"
exit 1
fi
squid_start() {
# Create cache directory hierarchy if needed
ALL_DIRS=$(awk '/^cache_dir/ {print $3}' $SQUIDCFG)
[ -z "$ALL_DIRS" ] && ALL_DIRS=/var/cache/squid
for CACHE_DIR in $ALL_DIRS ; do
if [ ! -d $CACHE_DIR/00 ] ; then
echo "Creating swap directories: $SQUIDCMD -z"
$SQUIDCMD -z 2> /dev/null
break
fi
done
echo "Starting Squid: $SQUIDCMD -F"
$SQUIDCMD -F
}
squid_stop() {
COUNTDOWN=$(awk '/^shutdown_lifetime/ {print $2}' $SQUIDCFG)
[ -z "$COUNTDOWN" ] && COUNTDOWN=30
echo -n "Shutting down Squid in $COUNTDOWN seconds: "
$SQUIDCMD -k shutdown 2> /dev/null
while $SQUIDCMD -k check 2> /dev/null ; do
sleep 1
echo -n .
COUNTDOWN=$[ $COUNTDOWN - 1 ]
if [ $COUNTDOWN -le 0 ] ; then
$SQUIDCMD -k interrupt 2> /dev/null
sleep 1
break
fi
done
echo
}
squid_restart() {
squid_stop
sleep 1
squid_start
}
squid_reload() {
$SQUIDCMD -k reconfigure 2> /dev/null
}
case "$1" in
'start')
squid_start
;;
'stop')
squid_stop
;;
'restart')
squid_restart
;;
'reload')
squid_reload
;;
*)
echo "usage: $0 start|stop|restart|reload"
esac


No Slackware:
#chmod +x /etc/rc.d/rc.squid
#/etc/rc.d/rc.squid start
No Debian:
#chmod +x /etc/init.d/rc.squid
#/etc/init.d/rc.squid start

Pronto, toda vez que o usuário abrir o navegador irá pedir autenticação user/passwd para acessar a internet.

Agora vem uma dica, caso algum usuário do proxy retirar o ip:porta do navegador na tentativa de acessar a internet livremente, basta adicionar essa regra no seu script de firewall

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

Pronto, se o usuário retirar o ip:porta no navegador simplesmente não navega, se colocar navega com as regras do proxy squid.
A interface eth1 indica a placa da rede local, onde o proxy recebe as requisições dos outros micros da rede e o 3128 indica a porta usada pelo Squid.
PS:Nesse caso: eth0=rede externa(internet) e eth1=rede interna(intranet)
Verifique o log do Squid de acessos

# tail -f /usr/local/squid/var/logs/cache.log


Feito!

domingo, 27 de novembro de 2011

Configurando servidor Samba PDC no Linux

Hoje irei explicar como configurar Samba PDC(controlador de domínio) em uma rede com máquinas Windows XP.
Instalação
Debian: #apt-get install samba
CentOS: #yum install samba samba-client
Slackware: No CD1 encontra o pacote samba-3.5.2-i486-1.txz e digite:
#installpkg samba-3.5.2-i486-1.txz

Após instalado o pacote samba, execute os comandos abaixo na distro CentOS
#service smb start
#service nmb start
#chkconfig smb on
#chkconfig nmb on

Configuração do Samba
As configurações do Samba PDC são realizadas no arquivo /etc/samba/smb.conf
Estando no diretório /etc/samba fazemos o backup do smb.conf default
#mv smb.conf smb.conf.bkp
criamos o diretório de compartilhamento do samba
#mkdir /home/samba
smb.conf

#### SAMBA COM PDC
#======================= Global Settings =======================
[global]
workgroup = DOMINIO
netbios name = GRUPO
server string = Linux
os level = 33
log file = /var/log/samba/log.%m
log level = 1
max log size = 1000
debug level = 2
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd

#####Servidor de Data e Hora
time server = yes

#Parametros que aumentam o desempenho
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
read raw = yes
write raw = yes
oplocks = yes
max xmit = 65536
getwd cache = yes

#Samba falando português
unix charset = iso8859-1
display charset = cp850
preserve case = no
short preserve case = no
default case = lower

#Servidor Wins
wins support = yes
wins proxy = no
dns proxy = no
max wins ttl = 518400
min wins ttl = 21600

#Configuração do domínio
domain master = yes
prefered master = yes
local master = yes
encrypt passwords = yes
admin users = root
add machine script = useradd -g pdc -c "Maquina do PDC" -s /bin/false -d /dev/null %u
domain logons = yes
logon script = netlogon.bat
logon drive = U:

##Sincronização das senhas dos usuários
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *:* %n\n *:* %n\n *successfully*

## Debugging/Accounting ####
# This tells Samba to use a separate log file for each machine
# that connects
log file = /var/log/samba/log.%m %u

# If you want Samba to only log through syslog then set the following
# parameter to 'yes'.
syslog only = yes

#Auditando os acessos
log level = 1
log file = /var/log/samba/samba-full_audit.log
max log size = 100000
vfs objects = full_audit
full_audit:sucess=open opendir write read unlink rename mkdir rmdir chmod chown
full_audit:prefix = %u|%I|%S
full_audit:failure = none
full_audit:facility = local5
full_audit:priority = notice

#Lixeira
vfs objects = recycle
recycle:maxsize = 1000
recycle:repository = .recycle
recycle:keeptree = yes
recycle:touch = yes
recycle:versions = yes
recycle:noversions = .doc|.xls|.ppt
recycle:exclude = *.obj *.tmp *.o *~$* *.mp3 *.wma *.tmp *.temp
recycle:exclude_dir = /tmp/cache

[homes]
comment = Pasta %U
browseable = no
writable = yes

[netlogon]
comment = Network Logon Service
path = /etc/samba/netlogon
writable = no
browseable = no

[profiles]
comment = Users profiles
path = /home/profiles
read only = no

guest ok = no
browseable = no
create mask = 0600
directory mask = 0700

[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700

# Windows clients look for this share name as a source of downloadable
# printer drivers
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no

[Publico]
comment = Compartilhamento
path = /home/samba
browseable = yes
valid users = @grupos
writeable = yes
write list = @users
force create mode = 0770
force directory mode = 0770
recycle:repository = .recycle
vfs objects = recycle full_audit


Arquivo netlogon que faz o mapeamento das unidades de redes do usuário
netlogon.bat

@echo off
cls
echo logon para servidor samba Linux
rem Sincronizando a data e hora com servidor
net time \\saitam /set /yes
rem
rem Mapeamento das portas de impressoras do servidor
rem
if %OS%==Windows_NT goto WinNT
rem Mapeando Unidades de rede do usuário
:Win9x
echo Win9x
rem
net use F: \\saitam\Publico
#net use G: \\saitam\comum
net use U: /HOME /yes

goto end
rem
:WinNT
echo WinNT
net use F: \\saitam\Publico
#net use G: \\saitam\comum
echo Configurando teclado ABNT2
REG ADD "HKCU\Keyboard Layout\Preload" /V 1 /T REG_SZ /F /D 00010416
REG ADD "HKCU\Keyboard Layout\Substitutes" /V 00010416 /T REG_SZ /F /D 00010416
:end

Cadastrando usuários no Samba
Execute o comando abaixo para cadastrar usuários e poder acessar o diretório compartilhado.
#smbpasswd -a teste
Nota:
É necessário adicionar o hostname das máquinas Windows XP para que funcione o domínio nas mesmas. Se você não sabe como ver isso no Windows XP, siga os passos a seguir:
Clica com botão direito o atalho Meu Computador depois em Propriedades
Na aba Nome do computador
Iniciar -> Configurações -> Painel de Controle -> Sistema
Agora nas abas em cima, clique em Nome do Computador.
Em Frente ao Nome completo do Computador é o hostname.
No meu caso, coloquei como maquina1.
#useradd -d /dev/null -s /bin/false maquina1$
#smbpasswd -a -m maquina1

Configurando o Windows XP para acessar o domínio
Vou apresentar duas maneiras de ingressar o Windows XP no domínio
Maneira 1:
Clica com botão direito o atalho Meu Computador depois em Propriedades
Na aba Nome do computador, clica no botão ID de rede
Irá abrir o Assistente para identificação da rede, clique em Avançar, marque a opção Este computador faz parte de uma rede corporativa e o utiliza para conectar-me a outros computadores no trabalho, clique em Avançar, marque a primeira opção, antes de prosseguir tenha em mente o usuário,senha e nome de domínio que será pedido, clique em Avançar, e digite os dados respectivamente.
Maneira 2:
Clica com botão direito o atalho Meu Computador depois em Propriedades
Na aba Nome do computador, clica no botão Alterar, digite o nome de domínio, e OK.

No final do processo irá aparecer Bem-vindo ao domínio e avisará que deverá reiniciar o computador.

Auditoria de acessos
Adicione no syslog.conf local5.notice /var/log/samba/samba-full_audit.log

Iniciando o servidor samba
Por fim, inicie o servidor samba.
Debian: #/etc/init.d/samba start
CentOS: #service smb start
Slackware: #/etc/rc.d/rc.samba start

Agora na estação cliente(Windows) esta configurado no domínio Samba PDC.
Feito!

terça-feira, 15 de novembro de 2011

Configurando servidor proxy transparent com Squid

Hoje explicarei como configurar o squid para servir como proxy transparente no gateway da rede fazendo cache e restrição de acesso de alguns sites.

Instalação
Baixando o source do squid 3.1.16
$wget "http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.16.tar.gz"
Extraindo o source do download acima
$tar -xzvf squid-3.1.16.tar.gz
$cd squid-3.1.16
$./configure --prefix=/usr/local/squid \
--enable-err-Portuguese=lang \
--mandir=/usr/share/man \
--enable-auth="basic,digest,ntlm" \
--enable-removal-policies="lru,heap" \
--enable-digest-auth-helpers="password" \
--enable-basic-auth-helpers="getpwnam,YP,NCSA,MSNT" \
--enable-external-acl-helpers="ip_user,unix_group,wbinfo_group" \
--enable-ntlm-auth-helpers="fakeauth,no_check" \
--enable-removal-policies \
--enable-linux-netfilter \
--enable-ident-lookups \
--enable-useragent-log \
--enable-cache-digests \
--enable-delay-pools \
--enable-referer-log \
--enable-underscores \
--enable-async-io \
--enable-truncate \
--enable-arp-acl \
--with-pthreads \
--enable-icmp \
--enable-htcp \
--enable-carp \
--enable-poll \
--enable-snmp \
--enable-wccp \
--enable-ssl

$make
#make install

Configuração
Como foi definido o local da instalação em /usr/local/squid no ./configure
#mv /usr/local/squid/etc/squid.conf /usr/local/squid/etc/squid.conf.bkp
squid.conf

http_port 3128 transparent
visible_hostname mundodacomputacao.com.br

cache_mem 64 MB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 2048 16 256
cache_access_log /usr/local/squid/var/logs/cache.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

acl manager proto cache_object
acl localhost src 127.0.0.1
acl localnet src 192.168.1.0/24
acl Safe_ports port 80 #http
acl Safe_ports port 21 #ftp
acl Safe_ports port 443 563 #https,snews
acl Safe_ports port 70 #gopher
acl Safe_ports port 210 #wais
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 Safe_ports port 901 #swat
acl Safe_ports port 1025-65535 #portas altas
acl purge method PURGE
acl CONNECT method CONNECT
acl SSL_ports port 443 563

##ACLS
acl sitesbloqueados url_regex -i "/usr/local/squid/dominiosbloqueados"
acl palavrasproibidas url_regex -i "/usr/local/squid/palavrasproibidas"
acl sitespermitidos url_regex -i "/usr/local/squid/dominiospermitidos"
acl redelocal src 192.168.1.0/24
#ACL para bloquear skype
acl acl_url_im_skype url_regex ^((0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5]|[3-9][0-9]{0,1})\.){3}(0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5][3-9][0-9]{0,1})(:|/|$\?)

http_access allow manager localhost localnet
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

##Controle de acesso
http_access deny sitesbloqueados
http_access deny palavrasproibidas
http_access deny CONNECT acl_url_im_skype
http_access allow sitespermitidos
http_access allow localhost
http_access allow redelocal
http_access deny all
error_directory /usr/local/squid/share/errors/pt-br


#touch /usr/local/squid/dominiosbloqueados
#touch /usr/local/squid/palavrasproibidas
#touch /usr/local/squid/dominiospermitidos
#cp /usr/local/squid/sbin/squid /usr/sbin
#mkdir /usr/local/squid/var/cache
#mkdir /usr/local/squid/var/logs
#chmod 0777 /usr/local/squid/var/cache
#chmod 0777 /usr/local/squid/var/logs

/usr/local/squid/dominiosbloqueados

orkut.com
www.orkut.com
facebook.com
www.facebook.com
twitter.com
www.twitter.com
www.issoebizarro.com
www.ebuddy.com
www.meebo.com
www.4shared.com
4shared.com
www.esnips.com
esnips.com
www.adrive.com
adrive.com
www.megaupload.com
megaupload.com
www.thepiratebay.org
thepiratebay.org
www.rapidshare.com
rapidshare.com
www.hotfile.com
hotfile.com
www.filecrop.com
filecrop.com
www.fileserv.com
fileserv.com
www.freeproxy.ca
freeproxy.ca
www.redtube.com
redtude.com
www.youtube.com
youtube.com
www.torproject.org
torproject.org
www.ninjacloak.com
ninjacloak.com
speedyhide.info/index.php
speedyhide.info
www.dropbox.com
www.baixandolegal.org
baixandolegal.org
www.baixebr.org
baixebr.org
www.superdownloads.com
superdownloads.com
www.superdownloads.com.br
superdownloads.com.br
www.baixaki.com.br
baixaki.com
www.tecmundo.com.br
www.techtudo.com.br
gizmodo.uol.com.br

/usr/local/squid/palavrasproibidas

orkut
facebook
twitter
youtube
sexo
bondage
issoebizarro
tor
torproject
vidalia
ultrasurf
proxy
anonymous
gatewall.dll
ms
messenger
webmessengers
webmessenger
ebuddy
meebo
iloveim
skype
porno
sexy
safadinha
speedhide
ninjacloak
dropbox
piratebay
filecrop
baixaki
superdownload
techmundo
techtudo
gizmodo


Check-list do Squid
#squid -z

Iniciando o serviço
Copie este script retirado do Servidor Linux(Slackware) para iniciar/parar o squid, mas também funciona na distro Debian, basta mover o script para /etc/init.d/.
rc.squid.conf

#!/bin/sh
# Start/stop/restart/reload the Squid Internet Object Cache (squid)
# To make Squid start automatically at boot, make this
# file executable: chmod 755 /etc/rc.d/rc.squid
# Written for Slackware Linux by Erik Jan Tromp
# Modified by David Somero
SQUIDCFG=/usr/local/squid/etc/squid.conf
SQUIDCMD=/usr/sbin/squid
if [ ! -r $SQUIDCFG ]; then
echo "Please set the correct path to $SQUIDCFG"
exit 1
fi
if [ ! -x $SQUIDCMD ]; then
echo "$SQUIDCMD not found"
exit 1
fi
squid_start() {
# Create cache directory hierarchy if needed
ALL_DIRS=$(awk '/^cache_dir/ {print $3}' $SQUIDCFG)
[ -z "$ALL_DIRS" ] && ALL_DIRS=/var/cache/squid
for CACHE_DIR in $ALL_DIRS ; do
if [ ! -d $CACHE_DIR/00 ] ; then
echo "Creating swap directories: $SQUIDCMD -z"
$SQUIDCMD -z 2> /dev/null
break
fi
done
echo "Starting Squid: $SQUIDCMD -F"
$SQUIDCMD -F
}
squid_stop() {
COUNTDOWN=$(awk '/^shutdown_lifetime/ {print $2}' $SQUIDCFG)
[ -z "$COUNTDOWN" ] && COUNTDOWN=30
echo -n "Shutting down Squid in $COUNTDOWN seconds: "
$SQUIDCMD -k shutdown 2> /dev/null
while $SQUIDCMD -k check 2> /dev/null ; do
sleep 1
echo -n .
COUNTDOWN=$[ $COUNTDOWN - 1 ]
if [ $COUNTDOWN -le 0 ] ; then
$SQUIDCMD -k interrupt 2> /dev/null
sleep 1
break
fi
done
echo
}
squid_restart() {
squid_stop
sleep 1
squid_start
}
squid_reload() {
$SQUIDCMD -k reconfigure 2> /dev/null
}
case "$1" in
'start')
squid_start
;;
'stop')
squid_stop
;;
'restart')
squid_restart
;;
'reload')
squid_reload
;;
*)
echo "usage: $0 start|stop|restart|reload"
esac


No Slackware:
#chmod +x /etc/rc.d/rc.squid
#/etc/rc.d/rc.squid start
No Debian:
#chmod +x /etc/init.d/rc.squid
#/etc/init.d/rc.squid start

Para poder fazer proxy transparente adicione essa regra no seu script de firewall

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

A interface eth1 indica a placa da rede local, onde o proxy recebe as requisições dos outros micros da rede e o 3128 indica a porta usada pelo Squid.
PS:Nesse caso: eth0=rede externa(internet) e eth1=rede interna(intranet)
Verifique o log do Squid de acessos

# tail -f /usr/local/squid/var/logs/cache.log
1321733892.697 88 192.168.1.100 TCP_MISS/200 1067 GET http://s.glbimg.com/es/ge/media/globoesporte2010/img/icone_regulamento.png - DIRECT/186.192.82.11 image/png
2011/11/19 18:24:50| Squid is already running! Process ID 586
1321734296.188 33 192.168.1.100 TCP_DENIED/403 6472 GET http://www.youtube.com/ - NONE/- text/html
1321734299.694 3485 192.168.1.100 TCP_REFRESH_UNMODIFIED/304 454 GET http://www.squid-cache.org/Artwork/SN.png - DIRECT/209.169.10.131 -
1321734407.090 19 192.168.1.100 TCP_DENIED/403 4230 GET http://www.twitter.com/ - NONE/- text/html
1321734407.282 23 192.168.1.100 TCP_DENIED/403 4231 GET http://www.twitter.com/favicon.ico - NONE/- text/html
1321734410.259 6 192.168.1.100 TCP_DENIED/403 4263 GET http://www.twitter.com/favicon.ico - NONE/- text/html
1321734414.542 10 192.168.1.100 TCP_DENIED/403 4087 GET http://www.orkut.com/ - NONE/- text/html
1321734419.972 11 192.168.1.100 TCP_DENIED/403 3951 GET http://www.facebook.com/ - NONE/- text/html
2011/11/19 18:51:18| NETDB state saved; 0 entries, 1 msec


Feito!

quinta-feira, 3 de novembro de 2011

Instalando e configurando servidor NFS no Linux

Hoje irei explicar sobre a instalação e configuração do NFS(Network File System) para compartilhar arquivos entre máquinas Linux/Unix na rede.

Instalando o NFS
No Debian
#apt-get install portmap
#apt-get install nfs-common
#apt-get install nfs-kernel-server
#apt-get install nfs-user-server

No Slackware
No CD1 do Slackware procure pelo pacote nfs-utils-1.2.2-i486-1.txt e instale executando no terminal: #installpkg nfs-utils-1.2.2-i486-1.txt

Configurando o NFS no Servidor
Agora edite o arquivo /etc/exports, nele deverão ser colocados o diretório do servidor que vai ser compartilhado com a máquina cliente, o endenreço IP da máquina que estará acessando o servidor ou o endereço de rede/máscara e por fim as opções de segurança. Com o editor de textos de sua preferência segue:
#vim /etc/exports

#Conteúdo do Arquivo

/pasta_compartilhada 192.168.1.0/24(ro,no_root_squash,async,subtree_check)

Agora salve o arquivo e saia. (ESC+:x)

Explicando:

/pasta_compartilhada é o diretório do servidor que vai ser compartilhado com a máquina cliente.

• 192.168.1.0/24 é o IP da rede.

• (ro,no_root_squash,async,subtree_check) são permissões usadas nas máquinas da rede e opções de desempenho do servidor.

Em seguida digite:
#exportfs

Com esse comando, seu arquivo de configuração /etc/exports será lido e o Kernel atualizado com as mudanças realizadas.

Iniciando os serviços NFS no servidor:

Debian: #/etc/init.d/nfs-kernel-server start
Slackware:
#chmod +x /etc/rc.d/rc.rpc
#chmod +x /etc/rc.d/rc.nfsd
#/etc/rc.d/rc.rpc start
#rpc.mountd
#rpc.nfsd 8
#/etc/rc.d/rc.nfsd start

Configurando NFS na máquina cliente

Crie um diretório como no descrito abaixo, no caso utilizando um diretório com o nome de arquivos_da_rede (você pode nomear com um nome de sua preferência):

#mkdir /arquivos_da_rede

Neste caso foi criado o diretório /arquivos_da_rede. Agora vamos montar o diretório a ser compartilhado:

#mount -t nfs 192.168.1.103:/pasta_compartilhada /arquivos_da_rede

Explicando:

• /pasta_compartilhada é o diretório do servidor que vai ser compartilhado com a máquina cliente.

• 192.168.1.103 é o IP da máquina servidora

Pronto, servidor NFS configurado, e pode ser acessado entre máquinas Linux para Linux na rede.
Feito!

sexta-feira, 21 de outubro de 2011

Configurando servidor Samba no Linux

Neste post, irei explicar como compartilhar arquivos e impressoras na rede Windows e Linux.
Instalação
Debian: apt-get install samba
CentOS: yum install samba samba-client
Slackware: No CD1 encontra o pacote samba-3.5.2-i486-1.txz e digite:
installpkg samba-3.5.2-i486-1.txz

Após instalado o pacote samba, execute os comandos abaixo na distro CentOS
#service smb start
#service nmb start
#chkconfig smb on
#chkconfig nmb on

No Slackware execute:
#chmod +x /etc/rc.d/rc.samba
#/etc/rc.d/rc.samba start

Configuração do Samba
Para compartilhar arquivos e impressoras na rede, é realizado as configurações no arquivo /etc/samba/smb.conf

smb.conf

[global]
netbios name = SERVIDOR
workgroup = GRUPO
server string = Samba %v
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

[printers]
comment = All Printers
path = /var/spoll/samba
browseable = no
printable = yes
guest ok = yes
create mask = 0700

[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
guest ok = yes

[homes]
vfs object = audit
comment = Home Directories
browseable = no
read only = no
vfs object = recycle
recycle:maxsize = 0
recycle:repository = .recycle
recycle:keeptree = yes
recycle:touch = yes
recycle:versions = yes
recycle:noversion = .doc|.xls|.ppt
recycle:exclude = *.obj *.tmp *.temp *.o ~$*
recycle:exclude_dir = /tmp/cache

[mnt]
comment = Share Files
path = /mnt
read only = no
guest ok = yes
create mask = 0664
directory mask = 0775

#Auditando os acessos
log level = 1
log file = /var/log/samba-full_audit.log
max log size = 1000
vfs objects = full_audit
full_audit:success = open opendir write unlink rename mkdir rmdir chmod chown
full_audit:prefix = %u|%I|%S
full_audit:failure = none
full_audit:facility = local5
full_audit:priority = notice

#Lixeira
vfs object = recycle
recycle:maxsize = 0
recycle:repository = .recycle
recycle:keeptree = yes
recycle:touch = yes
recycle:versions = yes
recycle:noversions = .doc|.xls|.ppt
recycle:exclude = *.obj *.tmp *.temp *.o ~$*
recycle:exclude_dir = /tmp/cache


Cadastrando usuários no Samba
Execute o comando abaixo para cadastrar usuários e poder acessar o diretório compartilhado.
#smbpasswd -a saitam
Nota: Neste arquivo smb.conf foi compartilhado os diretórios /home e /mnt, no entando adapte as suas necessidades.

Auditoria de acessos
Adicione no syslog.conf local5.notice /var/log/samba-full_audit.log

Iniciando o servidor samba
Por fim, reinicie o servidor samba.
Debian: #/etc/init.d/samba start
CentOS: #service smb start
Slackware: #/etc/rc.d/rc.samba start

Agora na estação cliente(Windows) poderá acessar o servidor Samba (Linux).
Feito!

quarta-feira, 28 de setembro de 2011

Configurando servidor DHCP no Linux

Neste post, apresenta um breve resumo e configuração do servidor DHCP no Linux na distro Debian e Slackware.
Qual a função do servidor DHCP?
Distribuir um endereço IP de forma automática na LAN (estação).
Instalação
No Debian:
#apt-get install dhcp3-server
Após o download e instalação do pacote dhcp3-server, vá no diretório /etc/dhcp3
#cd /etc/dhcp3
Faz um cópia de segurança
#mv dhcpd.conf dhcpd.conf.bkp
No arquivo dhcpd.conf coloque a configuração abaixo adaptando para o seu endereço IP em uso.
#vim dhcpd.conf
dhcpd.conf

# dhcpd.conf
#
# Configuration file for ISC dhcpd (see 'man dhcpd.conf')
#
authoritative;
#Domínio configurado no BIND
option domain-name "mundodacomputacao.com.br";
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.101 192.168.1.200;
option routers 192.168.1.100;
option broadcast-address 192.168.1.255;
#Aqui você coloca os servidores DNS de terceiros ou seu domínio próprio configurado no BIND.
option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Explicação
default-lease-time 600; controla o tempo de renovação do IP.
max-lease-time 7200; determina o tempo que cada máquina pode usar um determinado IP.
authoritative; Se um cliente requisitar um endereço que o servidor não conheça, ou seja, o endereço é incorreto para aquele segmento, o servidor não enviará um DHCPNAK, o qual diz para ao cliente para parar de usar aquele endereço.
subnet 192.168.1.0 netmask 255.255.255.0
Define sua "sub-rede" 192.168.1.0 com a máscara 255.255.255.0 e abre uma faixa de IPs que o cliente pode usar.
range 192.168.1.101 192.168.1.200;
option routers 192.168.1.100;; Este é o gateway padrão (neste caso).
option broadcast-address 192.168.1.255;; Essa linha é o endereço de broadcast (neste caso).
option domain-name-servers;; Essa linha você especifica os servidores DNS de sua preferência ou seu próprio DNS configurado no BIND.
Define agora a interface de rede que irá ativar.
#vim /etc/default/dhcp3-server
Onde tiver INTERFACES="", coloque sua interface de rede
INTERFACES="eth1" (nesse caso).
Reinicie o serviço dhcpd: #/etc/init.d/dhcp3-server restart

No Slackware:
Basta você colocar o CD1 do Slackware, e após montado o CD-ROM , entrar na pasta Slackware/n do CD e digitar no console:
#installpkg dhcp-4.1.1-i486-2.txz
PS: Também pode optar para instalar o dhcp já na instalação do Slackware.
No arquivo /etc/dhcpd.conf coloque a configuração visto neste post (dhcpd.conf) adaptando para o seu caso.
Crie um script e salve em /etc/rc.d/rc.dhcpd
rc.dhcpd

#!/bin/sh
#Start/Stop/Restart the DHCP server
#INTERFACES ="eth1"
case "$1" in
'start')
dhcpd eth1
;;
'stop')
killall dhcpd
;;
'restart')
killall dhcpd
dhcpd eth1
;;
*)
echo "usage $0 start|stop|restart"
esac

Reinicie o serviço dhcpd: #/etc/rc.d/rc.dhcpd start

Para compartilhar a internet adicione no script de firewall a regra abaixo:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Algumas observações:
1. interface eth0 - externa e interface eth1 - interna
2. Configurando servidor DNS no BIND
3. testado na distro Slackware 13.1 e Debian 6

Feito!

domingo, 25 de setembro de 2011

Configurando servidor DNS (BIND) no Linux

Introdução
Neste post, apresenta um breve resumo do serviço DNS e configuração do Bind no sistema Linux (Slackware), mas pode ser aplicado em qualquer distro, claro apenas muda o modo de instalação, inicialização, localização do bind de distro para distro.

Qual a função do DNS?
A função do DNS é traduzir um domínio para endereço IP.
Imagina você memorizar todos endereços IPs dos sites que costuma acessar: Ex: 200.154.56.80 (www.terra.com.br), 200.18.7.2(www.joinville.udesc.br), etc, então é muito mais fácil lembrar o nome do site do que pelo endereço IP né, por isso que temos o serviço DNS que faz a tradução do site acessado para endereço IP.

O DNS (Domain Name System), é um serviço cliente/servidor baseado em hierarquias, em que a parte cliente é conhecida como resolver (resolvedor) e a parte servidora como name server. As conexões entre o cliente e o servidor se dão através do protocolo UDP e porta 53.

Estrutura de domínios
O servidor DNS é baseado em uma estrutura hierárquica, em que o processo de resolução se dá da hierarquia mais alta para a mais baixa. O ponto mais alto da hierarquia é chamado de root-level-domain, ou domínio raiz, que é representado por um caractere '.'.
O próximo nível da hierarquia são os top-level-domain, ou domínios de primeiro nível. Eles são representados por códigos domínio de primeiro nível. Veja alguns deles:

* com - Organização comercial
* mil - Militar
* net - Redes (backbones para a Internet)
* org - organizações sem fins comerciais
* gov - governamental
* xx - Sigla do país representado por dois caracteres. Ex: br, uk

Zona de autoridade
É a parte do domínio ao qual um servidor de DNS é o responsável. Em cada zona tem-se um arquivo de zona que é a base de referências entre os IPs e nomes desta zona.

Servidor primário

É o servidor onde estão os arquivos originais da zona. Só pode existir um servidor primário por zona.
Servidor secundário
Aqui é onde ficam as réplicas dos arquivos de zona, que podem ser consultados no caso de inoperabilidade do servidor primário. Ao contrário do servidor primário, podem existir vários servidores secundários. No Brasil, para que possamos registrar um domínio é obrigatório ter dois servidores: o Primário e também um Secundário.

Servidor master
É aquele servidor para o qual um servidor secundário irá solicitar as cópias dos arquivos de zona.
Servidor cache
É aquele servidor que não responde por zona alguma. Sua função é apenas armazenar resultados de consultas que ele armazena em cache. Assim, novas consultas ao mesmo registro serão atendidas com mais rapidez.

Instalação
No Debian: #apt-get install bind9
No Slackware: Basta você colocar o CD1 do Slackware, e após montado o CD-ROM , entrar na pasta Slackware/n do CD e digitar no terminal: #installpkg bind-9.4.3_P4-i486-1.txz
PS: Também pode optar para instalar o bind já na instalação do Slackware.

* /etc/named.conf - Arquivo de configuração geral do BIND.
* /usr/sbin/named - O binário (daemon) do BIND.
* /usr/doc/bind-9.4.3-P4/ - Manual em html muito bom do BIND em inglês.
* /var/named/caching-example/ - Diretório com arquivos exemplo de configuração básicos do BIND

Depois de instalado o pacote bind, vamos para configuração dos arquivos.
named.conf

options {
directory "/var/named";
version "PROTECT";
allow-transfer {192.168.1.103;};
listen-on {127.0.0.1; 192.168.1.103;};
allow-recursion {127.0.0.1; localhost; 192.168.1.0/24;};
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
zone "." IN {
type hint;
file "caching-example/named.root";
};

zone "localhost" IN {
type master;
file "caching-example/localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "caching-example/named.local";
allow-update { none; };
};
zone "103.1.168.192.in-addr.arpa" IN {
type master;
file "caching-example/domain.rev";
allow-transfer {192.168.1.103;};
};
zone "mundodacomputacao.com.br" IN {
type master;
file "caching-example/mundodacomputacao.host";
allow-transfer {192.168.1.103;};
};

Explicação do arquivo named.conf
*directory - Aqui você indica qual será o diretório onde ficará os arquivos de registros DNS.
*version - versão do bind. Pensando na segurança é comum esconder a versão do bind, por exemplo nesse caso 'PROTECT'.
*minimal-responses - Se habilitado, quando o servidor gerar respostas, somente adicionará registros na autoridade quando requerido. Esta opção aumenta a performance do servidor.
*allow-transfer - Aqui você indica quem poderá fazer transferência de autoridades.
*listen-on - Aqui você especifica quais interfaces estão habilitadas a "escutar" conexões no protocolo UDP e porta 53.
*allow-recursion - Caso vá usar um DNS que será acessível pela Internet, é bom que você não deixe que esse pessoal faça recursões, ou seja, que eles pesquisem outros domínios que não sejam os que você tem cadastrado no seu servidor.

Zona Reversa (domain.rev)

$TTL 86400
$ORIGIN mundodacomputacao.com.br.
@ IN SOA Slackware.mundodacomputacao.com.br. root.Slackware.mundodacomputacao.com.br. (
4 ; Serial de sincronização
604800 ; refresh
86400 ; retry
2419100 ; expiry
640800 ) ; Negative cache TTL
IN NS Slackware.mundodacomputacao.com.br.
1 IN PTR Slackware.mundodacomputacao.com.br.
1 IN PTR ftp
1 IN PTR www

Explicação:
O $TTL se refere ao time-to-live, o tempo de vida do registro que é medido em segundos. Então, no nosso exemplo, o tempo de vida é de 86400 segundos.
$ORIGIN é uma variável que o BIND usa para registros que não entende. É onde você coloca o nome do seu domínio em qualquer registro não-qualificado.
Domínio (mundodacomputacao.host)

$TTL 86400
@ IN SOA Slackware.mundodacomputacao.com.br. root.Slackware.mundodoacomputacao.com.br. (
4 ; Serial de sincronização
694800 ; refresh
86400 ; rety
2419100 ; expiry
640800 ) ; Negative cache TTL
NS Slackware.mundodacomputacao.com.br.
IN MX 10 mundodacomputacao.com.br.
localhost IN A 127.0.0.1
mundodacomputacao.com.br. IN A 192.168.1.103
dns IN A 192.168.1.103
www IN A 192.168.1.103
ftp IN A 192.168.1.103

Conclusão
Depois de configurado inicie o serviço (bind).
No Debian: #/etc/init.d/bind9 start
No Slackware: #/etc/rc.d/rc.bind start

Como verificar erros de sintaxe do Bind?
No terminal digite:
#named-checkconf /etc/named.conf
Você pode querer chroot para o diretório de forma que incluem diretório no arquivo de configuração são redirecionadas por um nome semelhante:
#named-checkconf -t /var/named/chroot /etc/named.conf
Se não há saída, a configuração é considerada correta e você pode com segurança reiniciar o daemon Bind. Se houver um erro será exibida na tela:
#named-checkconf /etc/named.conf

Na máquina cliente, coloque o DNS do servidor que acabou de configurar e faça um teste.
Nesse caso: $ping mundodacomputacao.com.br
Se obter resposta, então esta OK!

Algumas observações:
1. nesse caso foi configurado o serviço DNS com domínio 'mundodacomputacao.com.br', hostname 'Slackware' e IP 192.168.1.103. Substitua para seu caso.
2. atenção na sintaxe do bind, pois é comum esquecer '.' e ';' no arquivo de configuração.
3. testado na distribuição Linux Slackware 13.1

Feito!