jueves, agosto 27, 2009

FreeBSD + Wordpress

Requerimientos:

FreeBSD instalado
Apache22 instalado

Instalacion:

1) Instalar wordpress mediante los ports
# whereis wordpress
wordpress: /usr/ports/german/wordpress (el resultado apunta a otro lugar)
# cd /usr/ports/www/wordpress
# make install clean

instalara automaticamente php5-gd, con opciones por defecto
php5-gd 5.2.10
[X] T1LIB
[X] TRUETYPE
[ ] JIS

2) Crear la entrada en /usr/local/etc/apache22/httpd.conf

# Modificacion para WORDPRESS inicio
<Directory /usr/local/www/wordpress>
Order deny,allow
Deny from all
#Allow from 127.0.0.1
Allow from all
</Directory>

Alias /wordpress /usr/local/www/wordpress/
# Modificacion para WORDPRESS fin

3) Re-iniciamos apache22
# /usr/local/etc/rc.d/apache22 restart

4) Configurar los datos de la DB (base de datos) en wordpress
# cd /usr/local/www/wordpress
# cp wp-config-sample.php wp-config.php
# edit wp-config.php

Colocamos los datos correctos:
define('DB_NAME', 'wordpress');^M
define('DB_USER', 'admin');^M
define('DB_PASSWORD', 'MICLAVE');^M
define('DB_HOST', 'localhost');^M
define('DB_CHARSET', 'utf8');^M
define('DB_COLLATE', '');^M

Nota:
MICLAVE se debe cambiar por la clave correcta

5) Creamos la DB
$ mysqladmin -uroot create wordpress

6) Garantizando acceso a la DB
$ mysql -uroot -e"GRANT ALL ON wordpress.* TO admin@localhost IDENTIFIED BY 'MICLAVE'" wordpress

Nota:
MICLAVE se debe cambiar por la clave correcta

7) Correr el script de instalacion de Wordpress
http://IPSERVIDOR/wordpress/wp-admin/install.php

8) Probar que la cosa funciona
Debemos ingresar con el navegador a http://IPSERVIDOR/wordpress

Links importantes
http://IPSERVIDOR/wordpress/wp-login.php

Notas:
1) Al tratar de subir alguna imagen, da un error de escritura en /usr/local/www/wordpress/wp-content
Para solucionar esto, le damos permiso total al folder
# chmod -R 777 /usr/local/www/wordpress/wp-content

2) Para eliminar la DB (que almacena el password igualmente), en el terminal se ejecuta:

$ mysqladmin -uroot drop wordpress

miércoles, julio 08, 2009

FreeBSD + Icecast2 + Theora

STREAMING SERVER

Requerimientos:
FreeBSD instalado

Guias:

http://www.icecast.org/docs.php
http://www.oddsock.org/guides/video.php
http://www.acooke.org/cute/SettingupR0.html

Instalacion:

1) Instalar icecast2
# whereis icecast2
icecast2: /usr/ports/audio/icecast2
# cd /usr/ports/audio/icecast2
# make install clean

2) Instalar ffmpeg2theora
# whereis ffmpeg2theora
ffmpeg2theora: /usr/ports/multimedia/ffmpeg2theora
# cd /usr/ports/multimedia/ffmpeg2theora
# make install clean

3) Instalar ezstream
# whereis ezstream
ezstream: /usr/ports/audio/ezstream
# cd /usr/ports/audio/ezstream
# make install clean

Archivos de configuracion:

# cp /usr/local/etc/icecast.xml.sample /usr/local/etc/icecast.xml

Crear una carpeta que tendra los videos
# mkdir /usr/home/hd3/streaming/

Crear el archivo con el listado de los videos y su orden
/usr/home/hd3/streaming/playlist.m3u
en este archivo podemos poner los videos por ejemplo:
# cat playlist.m3u
/usr/home/hd3/streaming/telesursoflibre.mpg

Copiar el archivo de
# cp /usr/local/share/examples/ezstream/ezstream_reencode_theora.xml /usr/local/etc/

# mkdir /var/log/icecast
# touch /var/log/icecast/access.log
# touch /var/log/icecast/error.log
# chmod -R 777 /var/log/icecast/

Iniciar el streaming

$ /usr/local/bin/icecast -c /usr/local/etc/icecast.xml >/dev/null 2>&1 &

$ /usr/local/bin/ezstream -c /usr/local/etc/ezstream_reencode_theora.xml >/dev/null 2>&1 &

Pararlo

killall ffmpeg2theora
killall ezstream
killall icecast

Probar que envia

http://192.168.1.1:8000/theora.ogg

Ajustar la resolucion para el streaming

En el archivo /usr/local/etc/ezstream_reencode_theora.xml
hay 2 lineas que tienen estos valores:
ffmpeg2theora -x 192 -y 128 -a 0 -v 4 --title "@M@" -o - "@T@"
se cambian para que queden asi:
ffmpeg2theora -x 384 -y 256 -a 0 -v 4 --title "@M@" -o - "@T@"

Aqui los archivos de configuracion

Nota:
Como los archivos son en un formato XML, el navegador muestra mal el contenido, de click derecho sobre los links y luego Save link as...
Guardelos en su disco y luego los abre con un editor.
icecast.xml

ezstream_reencode_theora.xml

Para hacer relay de alguna emisora, por ejemplo de www.di.fm

Trance Channel - D I G I T A L L Y - I M P O R T E D
en el archivo http://www.di.fm/mp3/trance.pls

vemos esta linea para conectar
http://scfire-ntc-aa06.stream.aol.com:80/stream/1003

entonces en el archivo de Icecast2 ponemos esto:

<relay>
<server>scfire-ntc-aa06.stream.aol.com</server>
<port>80</port>
<mount>/stream/1003</mount>
<local-mount>/different2.ogg</local-mount>
<on-demand>0</on-demand>

<relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>

Y listo, para escuchar, usamos esta direccion:
http://192.168.1.1:8000/different2.ogg.m3u

Nota 2:

El archivo ezstream_reencode_theora.xml es en caso de querer usar archivos en formatos .mpg , si podemos usar directamente archivos de video en formato .ogv debemos usar el archivo ezstream_vorbis.xml con lo que nos ahorraremos procesador ya que no se requiere hacer el reencode, para esto:

# cp /usr/local/share/examples/ezstream_vorbis.xml /usr/local/etc/

Nota:
En este caso el ezstream se debe iniciar con el archivo .xml correcto, en este caso seria:

$ /usr/local/bin/ezstream -c /usr/local/etc/ezstream_vorbis.xml >/dev/null 2>&1 &

Crear el archivo con el listado de los videos .ogv y su orden
/usr/home/hd3/streaming/playlist.m3u
en este archivo podemos poner los videos en formato .ogv por ejemplo:
# cat playlist.m3u
/usr/home/hd3/streaming/otrovideo.ogv

Para verificar que funciona, abrimos en VLC, esta direccion:
http://192.168.1.1:8000/http://alpha:8000/vorbis.ogg.m3u

Nota 3:
Para hacer que el servicio se inicie con el servidor, se debe:
Agregar las lineas en /etc/rc.conf

icecast_enable="YES"
icecast_config="/usr/local/etc/icecast.xml"

Editar el archivo /usr/local/etc/icecast.xml y modificar la linea

<security>
<chroot>0</chroot>
<!--
<changeowner>
<user>nobody</user>
<group>nobody</group>
</changeowner>
-->
</security>

Por

<security>
<chroot>0</chroot>
<!-- -->
<changeowner>
<user>angel</user>
<group>nobody</group>
</changeowner>
<!-- -->
</security>

Donde angel es un usuario creado en el servidor

viernes, julio 03, 2009

FreeBSD + NAGIOS

Requerimientos:

FreeBSD instalado
Apache2 instalado

Instalacion:

1) Instalar nagios
# whereis nagios
nagios: /usr/ports/net-mgmt/nagios
# cd /usr/ports/net-mgmt/nagios
# make install clean

Al finalizar la instalacion te mostrara las lineas que debes poner en el archivo /usr/local/etc/apache22/httpd.conf

<Directory /usr/local/www/nagios>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>

<Directory /usr/local/www/nagios/cgi-bin>
Options ExecCGI
</Directory>

ScriptAlias /nagios/cgi-bin/ /usr/local/www/nagios/cgi-bin/
Alias /nagios/ /usr/local/www/nagios/

2) Hacer que inicie con el sistema colocando en /etc/rc.conf
nagios_enable="YES"

Nota:
Nagios por defecto requiere autenticacion, se puede desactivar temporalmente si cambiamos en
/usr/local/etc/nagios/cgi.cfg
la linea original
use_authentication=1
Por esta otra
use_authentication=0

Y asi podemos hacer pruebas temporalmente para poder ver los contenidos CGI mediante el navegador, pero no es buena idea dejarlo asi.

3) Activando la autenticacion para nagios
En las lineas que nos recomienda la instalacion de nagios para el http.conf le adicionaremos otras de modo que quede asi:

# Modificacion para NAGIOS inicio

<Directory /usr/local/www/nagios>
Order deny,allow
Deny from all
#Allow from 127.0.0.1
Allow from all
# Autenticacion inicio
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/etc/nagios/htpasswd.users
Require valid-user
# Autenticacion fin
</Directory>

<Directory /usr/local/www/nagios/cgi-bin>
Options ExecCGI
# Autenticacion inicio
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/etc/nagios/htpasswd.users
Require valid-user
# Autenticacion fin
</Directory>

ScriptAlias /nagios/cgi-bin/ /usr/local/www/nagios/cgi-bin/
Alias /nagios/ /usr/local/www/nagios/

# Modificacion para NAGIOS fin

Y ya si podemos dejar la linea original como recomiendan para cgi.cfg "use_authentication=1"

4) Creando el password
Crear el archivo htpasswd.users
# touch /usr/local/etc/nagios/htpasswd.users
Ponerle la clave
# htpasswd -c /usr/local/etc/nagios/htpasswd.users nagiosadmin
New password: ******
Re-type new password: ******
Adding password for user nagiosadmin

Para el usuario guest (a,b,c):

a) Para permitir el usuario guest, luego de aver configurado nagiosadmin:
Para permitir el usuario guest, el comando seria asi:
# htpasswd /usr/local/etc/nagios/htpasswd.users guest
New password: *****
Re-type new password: *****
Adding password for user guest

b) Luego en el archivo /usr/local/etc/nagios/cgi.cfg
se comentan las lineas originales y se agregan las nuevas, se ve asi:

#authorized_for_all_services=nagiosadmin
authorized_for_all_services=nagiosadmin,guest
#authorized_for_all_hosts=nagiosadmin
authorized_for_all_hosts=nagiosadmin,guest

c) Hay que re-iniciar nagios
# /usr/local/etc/rc.d/nagios restart

5) Re-iniciar el apache
# /usr/local/etc/rc.d/apache22 restart
Ya al tratar de ingresar con el navegador a:
http://miservidor/nagios/
nos debera pedir el usuario (nagiosadmin) y la clave (miclavesecreta)

6) Configurando los equipos dentro de nagios
Bueno, esto no sera una guia completa, ya que hay muchas posibilidades.

Nagios se inicia con el comando
# /usr/local/etc/rc.d/nagios start

Pero seguramente no nos iniciara hasta que le dejemos los archivos que requiere, es que vienene con nombres como

Los que estan en /usr/local/etc/nagios/
cgi.cfg-sample
nagios.cfg-sample
resource.cfg-sample

Los que estan en /usr/local/etc/nagios/objects/
commands.cfg-sample
contacts.cfg-sample
localhost.cfg-sample
printer.cfg-sample
switch.cfg-sample
templates.cfg-sample
timeperiods.cfg-sample
windows.cfg-sample

Bueno, en ambos casos solo hay que compiar cada uno de los archivos dentro de sus respectivos folders con los nombres sin el "-sample" y luego editarlos segun se requiera.

Luego inticiamos nagios nuevamente y vemos si arranca sin errores.

Para chequear luego de hacer algun cambio en los archivos podemos usar este comando y si todo esta bien, lo re-iniciamos
# /usr/local/bin/nagios -v /usr/local/etc/nagios/nagios.cfg

Actualizacion:

1) Algunas funciones requiren la instalacion de nagios-plugin

# whereis nagios-plugins
nagios-plugins: /usr/ports/net-mgmt/nagios-plugins
# cd /usr/ports/net-mgmt/nagios-plugins
# make config
[X] NETSNMP SNMP support (check_snmp)
[X] IPv6 support

Guarde e instale
# make install clean

2) Para poder ponerle los logos, hay que instalar nagios-base-logos

# whereis nagios-base-logos
nagios-base-logos: /usr/ports/misc/nagios-base-logos
# cd /usr/ports/misc/nagios-base-logos
# make install clean

De aqui se pueden bajar mas logos http://exchange.nagios.org/directory/Images-and-Logos
se deben descomprimir en la carpeta /usr/local/www/nagios/images/logos/

Actualizacion 2

Crear grupos
Por defecto me tocaba meter los equipos con Gnu/Linux dentro del archivo windows.cfg y esto no me gustaba...

Crear un grupo LINUX

1) editar el archivo /usr/local/etc/nagios/nagios.cfg
AGREGAR LA LINEA

# Definitions for monitoring a Linux machine
cfg_file=/usr/local/etc/nagios/objects/linux.cfg

2) Crear el archivo /usr/local/etc/nagios/objects/linux.cfg
AGEGAR LAS LINEAS

# HOST DEFINITION
define host{
use linux-server ; Inherit default values from a template
host_name ISP ; The name we're giving to this switch
alias UNE ; A longer name associated with the switch
icon_image linux40.png
statusmap_image linux40.gd2
address google.com ; IP address of the switch
parents ADSL
}

# HOST GROUP DEFINITION
define hostgroup{
hostgroup_name linux-servers ; The name of the hostgroup
alias Linux Servers ; Long name of the group
members ; Comma separated list of hosts that belong to this group
}

# SERVICE DEFINITIONS
define service{
use generic-service ; Name of service template to use
host_name ISP
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}

3) Editar el archivo /usr/local/etc/nagios/objects/templates.cfg
AGREGAR LAS LINEAS EN LA SECCION # HOST TEMPLATES

# LINUX host definition template - This is NOT a real host, just a template!

define host{
name linux-server ; The name of this host template
use generic-host ; Inherit default values from the generic-host template
check_period 24x7 ; By default, Windows servers are monitored round the clock
check_interval 5 ; Actively check the server every 5 minutes
retry_interval 1 ; Schedule host check retries at 1 minute intervals
max_check_attempts 10 ; Check each server 10 times (max)
check_command check-host-alive ; Default command to check if servers are "alive"
notification_period 24x7 ; Send notification out at any time - day or night
notification_interval 30 ; Resend notifications every 30 minutes
notification_options d,r ; Only send notifications for specific host states
contact_groups admins ; Notifications get sent to the admins by default
hostgroups linux-servers ; Host groups that Windows servers should be a member of
register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
}

4) Re-iniciar Nagios
/usr/local/etc/rc.d/nagios restart

martes, junio 23, 2009

FreeBSD + Squid + Sarg

Ya tenemos instalado FreeBSD

Ya tenemos instalado Squid

Instalacion de SARG

# whereis sarg
sarg: /usr/ports/www/sarg
# cd /usr/ports/www/sarg
# make install clean

Configuracion de SARG

# edit /usr/local/etc/sarg/sarg.conf
# egrep -v '#|^ *$' /usr/local/etc/sarg/sarg.conf
---
language English
access_log /usr/local/squid/logs/access.log
graphs yes
graph_days_bytes_bar_color orange
title "Squid User Access Reports"
font_face Tahoma,Verdana,Arial
header_color darkblue
header_bgcolor blanchedalmond
font_size 9px
header_font_size 9px
title_font_size 11px
background_color white
text_bgcolor lavender
title_color green
logo_image none
logo_text ""
image_size 80 45
background_image none
temporary_dir /usr/home/hd3/sarg/tmp
output_dir /usr/local/www/apache22/data/squid-reports
output_email none
resolve_ip yes
user_ip yes
topuser_sort_field BYTES reverse
user_sort_field BYTES reverse
date_format u
lastlog 4
remove_temp_files yes
index yes
index_tree file
overwrite_report yes
topsites_num 100
long_url no
---

Nota:
La opcion
lastlog 4
hace que solo se mantengan los ultimos 4 reportes, esto es importante si por ejemplo se tiene programado hacer un reporte semanal y no se quiere llenar el disco con los reportes.

Para ver las opciones de un archivo sin los comentarios
# egrep -v '#|^ *$' /usr/local/etc/sarg/sarg.conf

Generar el reporte
# /usr/local/bin/sarg

Para ver el reporte hay que entrar a:
http://miequipo/squid-reports/

Aqui se puede ver un ejemplo de los datos que genera
http://sarg.sourceforge.net/squid-reports/index.html

Generar un reporte de un equipo especifico

Copiar el access.log de squid
# cp /usr/local/squid/log/access.log /home/angel

Entro al directorio
# cd /home/angel

Filtro el access.log con la IP del equipo a investigar
# cat access.log | grep 192.168.1.119 > access1.log

Genero el reporte con SARG
sarg -o /home/angel/ -d 22/05/2010-24/05/2010 -g e -l /home/angel/access1.log

Se creara el siguiente contenido, que es el reporte
23May2010-24May2010 index.html images

Para ver el reporte, se abre el archivo index.html

Tambien puedo convertir el access1.log a un formato entendible por humanos
# sarg -convert -l /home/angel/access1.log > access2.log

miércoles, junio 17, 2009

FreeBSD + PHPMailer

Para poder hacen envios de correos desde PHP, se puede utilizar

# cd /usr/ports/mail/phpmailer
# make install clean

(OJO A ESTO)
You need to adjust php's include_path to contain `/usr/local/share/phpmailer'!
For example, insert
include_path = ".:/usr/local/share/phpmailer"
into `/usr/local/etc/php.ini'.
===> Registering installation for phpmailer-2.0.2

Listo, instalo la version 2.0.2

Le pondre la linea que dicen en el /usr/local/etc/php.ini'
UPS! busco y en FreeBSD no existe el php.ini, lo que encuentro es
/usr/local/etc/php.ini-dist y una nota sobre el php.ini dentro que
dice:

;;;;;;;;;;;;;;;;;;;
; About php.ini ;
;;;;;;;;;;;;;;;;;;;
; This file controls many aspects of PHP's behavior. In order for PHP to
; read it, it must be named 'php.ini'. PHP looks for it in the current
; working directory, in the path designated by the environment variable
; PHPRC, and in the path that was defined in compile time (in that order).
; Under Windows, the compile-time path is the Windows directory. The
; path in which the php.ini file is looked for can be overridden using
; the -c argument in command line mode.

Bueno, no entiendo bien, pero ya que en este archivo fue donde se
activo la linea

default_charset = "iso-8859-1"

Supongo que es donde se controla al PHP y por esto le metere la linea
:/usr/local/share/phpmailer

Hago copia del archivo por si me lo tiro
# cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini-dist-
20-04-2009

Listo a editar el archivo tranquilo

Veo que el archivo /usr/local/etc/php.ini-dist esta estructurado por
sectores y en la parte donde dice Paths and Directories, justo al
final lo meto, queda asi:

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; Activamos PHP Mailer el port es /usr/ports/mail/phpmailer
include_path = ".:/usr/local/share/phpmailer"

NOTA:
Hay que re-iniciar algo al cambiar o poner cosas en el
/usr/local/etc/php.ini-dist ???

Ahora a configurarlo:

Para saber que y donde quedo instalado phpmailer, uso:

alpha# find . -name "phpmailer"
./usr/local/share/doc/phpmailer
./usr/local/share/examples/phpmailer
./usr/local/share/phpmailer
./usr/local/www/glpi/lib/phpmailer
./usr/ports/mail/phpmailer
./usr/home/hd1/apps/GLPI/glpi-0.70.1a/glpi/lib/phpmailer
./usr/home/hd1/apps/GLPI/glpi-0.70/glpi/lib/phpmailer
alpha#

Vamos a ver los examples...

# ls /usr/local/share/examples/phpmailer/
contents.html pop3_before_smtp_test.php
test_sendmail.php
images test_gmail.php test_smtp.php
index.html test_mail.php
alpha#

Supongo que este port /usr/ports/security/php5-
openssl/ hara
lo mismo para PHP con OpenSSL

Instalandolo:

# cd /usr/ports/security/php5-openssl
# make install clean
...

Libraries have been installed in:
/usr/ports/security/php5-openssl/work/php-5.2.9/ext/openssl/modules

FreeBSD + Samba + ClamAV

Requerimientos:
Tener instalado y funcionando FreeBSD
Tener instalado y funcionando Samba 3.0

Instrucciones:

Instalar el port clamav
# cd /usr/ports/security/clamav
# make install clean

Editar el archivo de configuracion
# edit /usr/local/etc/clamd.conf

Y cambiar las lineas:

LocalSocket /var/run/clamav/clamd.sock
por
LocalSocket /var/run/clamav/clamd

User vscan
por
User vscan root

Instalar el port sama-vscan
# cd /usr/ports/security/samba-vscan
# make install clean

Editar el archivo de configuracion
# edit /usr/local/etc/samba-vscan/vscan-clamav.conf

Y cambiar las lineas:

infected file action = nothing
por
infected file action = quarantine

quarantine directory = /tmp
por
quarantine directory = /usr/home/hd1/infected

Cargar el clamav al iniciar el sistema con unas lineas en /etc/rc.conf

# Activamos ClamAV (antivirus para Samba)
clamav_freshclam_enable="YES"
clamav_clamd_enable="YES"

Activar en le archivo de samba el escaneo

# edit /usr/local/etc/smb.conf

Y colocar en los shares que queramos las siguientes lineas:

# Antivirus ClamAV + Samba-vscan y recycle
vfs objects = vscan-clamav
vscan-clamav: config-file = /usr/local/etc/samba-vscan/vscan-clamav.conf

Re-iniciar samba
# /usr/local/etc/rc.d/samba restart

Para probar que funciona clamav, se pueden bajar unos archivos supuestamente infectados de
http://svn.clamav.net/svn/clamav-devel/trunk/contrib/test/

y tratar de compiarlos en uno de los shares protejidos

Nota:
samba-vscam solo funciona con samba 3.0, con las versiones superiores, como 3.3 ó 3.4 no funciona.

sábado, mayo 02, 2009

FreeBSD + vsftpd standalone

1) Instalar el port /usr/ports/ftp/vsftpd
# cd /usr/ports/ftp/vsftpd
# make install clean

2) En el archivo /etc/rc.conf agregar las lineas:

# Activamos vsftpd en modo "standalone" mode (osea, sin inetd)
vsftpd_enable="YES"

3) Editar o crear el archivo /usr/local/etc/vsftpd.conf
# edit /usr/local/etc/vsftpd.conf

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=Bienvenido al servidor FTP de Telemedellin.
chroot_local_user=YES
secure_chroot_dir=/usr/local/share/vsftpd/empty
listen=YES
background=YES
pasv_enable=YES
pasv_promiscuous=YES
pasv_min_port=49152
pasv_max_port=65535

4) Editar o crear el archivo /usr/local/etc/rc.d/vsftpd con este contenido:
datos del script tomados de aqui

# edit /usr/local/etc/rc.d/vsftpd

#!/bin/sh
#
# $FreeBSD: ports/ftp/vsftpd/files/vsftpd.sh.in,v 1.7 2006/02/20 20:47:01 dougb Exp $
#

# PROVIDE: vsftpd
# REQUIRE: DAEMON

# Add the following line to /etc/rc.conf to enable `vsftpd':
#
# vsftpd_enable="YES"
# vsftpd_flags="/some/path/conf.file" # Not required
#

. "/etc/rc.subr"

name="vsftpd"
rcvar=`set_rcvar`

load_rc_config "$name"
: ${vsftpd_enable:="NO"}
: ${vsftpd_flags:=""}

command="/usr/local/libexec/$name"
required_files="/usr/local/etc/$name.conf"
start_precmd="vsftpd_check"

vsftpd_check()
{
if grep -q "^ftp[ ]" /etc/inetd.conf ${required_files}
then
err 1 "ftp is already activated in /etc/inetd.conf"
fi
if ! egrep -q -i -E "^listen.*=.*YES$" ${required_files}
then
err 1 "vsftpd script need "listen=YES" on config file"
fi
if ! egrep -q -i -E "^background.*=.*YES$" ${required_files}
then
err 1 "vsftpd script need "background=YES" on config file"
fi
}

run_rc_command "$1"
5) Darle permisos de ejecucion

# chmod +x /usr/local/etc/rc.d/vsftpd

6) Iniciarlo manualmente

# /usr/local/etc/rc.d/vsftpd start
Starting vsftpd.

7) Para verificar que esta corriendo

# /usr/local/etc/rc.d/vsftpd status
vsftpd is running as pid 1428.

miércoles, marzo 18, 2009

FreeBSD 7.1 + RAID0 - Striping

Bueno, hoy tengo que montar un monstruo en almacenamiento, sera un RAID0 por software, los datos no son criticos y el limitante es el factor dinero...

Informacion de los discos

6 HITACHI de 1TB SATA II

La organizacion

/dev/ad0 de 1TB FreeBSD 7.1 amd64

/ 1G
swap 4G
/var 4G
/tmp 1G
/usr 20G
/home 873G

5 SATAs 1TB cada uno para el raid0 por sofware
/dev/ad1
/dev/ad2
/dev/ad3
/dev/ad10
/dev/ad8

1) Instalar FreeBSD 7.1
(ya sabemos como, asi que no lo explicare, solo decir que se instala lo basico [X] 6 Kernel deve...)

2) Configurar los discos
Segun el manual http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/geom-striping.html

Solo modifico unas cosas en mi caso

Creating a stripe of unformatted ATA disks

  1. Load the geom_stripe.ko module:

    # kldload geom_stripe
  2. Ensure that a suitable mount point exists. If this volume will become a root partition, then temporarily use another mount point such as /mnt:

    # mkdir /mnt
  3. Determine the device names for the disks which will be striped, and create the new stripe device. For example, to stripe two unused and unpartitioned ATA disks, for example /dev/ad2 and /dev/ad3:

    # gstripe label -v st0 /dev/ad1 /dev/ad2 /dev/ad3 /dev/ad10 /dev/ad8
    Metadata value stored on /dev/ad1.
    Metadata value stored on /dev/ad2.
    Metadata value stored on /dev/ad3.
    Metadata value stored on /dev/ad10.
    Metadata value stored on /dev/ad8.
    Done.
  4. Write a standard label, also known as a partition table, on the new volume and install the default bootstrap code:

    (Esta parte la omito, ya que bsdlabel no trabaja con mas de 4TB)
    # bsdlabel -wB /dev/stripe/st0
  5. This process should have created two other devices in the /dev/stripe directory in addition to the st0 device. Those include st0a and st0c. At this point a file system may be created on the st0a device with the newfs utility:

    (Como omiti bsdlabel, el siguiente comando es sin la a al final)
    # newfs -U /dev/stripe/st0

    Many numbers will glide across the screen, and after a few seconds, the process will be complete. The volume has been created and is ready to be mounted.

To manually mount the created disk stripe:

# mount /dev/stripe/st0 /mnt

To mount this striped file system automatically during the boot process, place the volume information in /etc/fstab file. For this purpose, a permanent mount point, named stripe, is created:

# mkdir /home/stripe
# echo "/dev/stripe/st0 /stripe ufs rw 2 2" \
>> /etc/fstab

The geom_stripe.ko module must also be automatically loaded during system initialization, by adding a line to /boot/loader.conf:

# echo 'geom_stripe_load="YES"' >> /boot/loader.conf

Update:
Si queremos hacer RAID0 con ZFS...
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/filesystems-zfs.html
http://wiki.freebsd.org/ZFSQuickStartGuide

(desmontar el stripe)
# umount /stripe

(deshacer el stripe)
# gstripe unload /dev/stripe/st0
# gstripe clear -v /dev/ad1
# gstripe clear -v /dev/ad2
# gstripe clear -v /dev/ad3
# gstripe clear -v /dev/ad6
# gstripe clear -v /dev/ad8

(quitar la linea del fstab)
#/dev/stripe/st0 /stripe ufs rw 2 2

20.2.2.1 Single Disk Pool
# zpool create tank ad1 ad2 ad3 ad6 ad8

# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 989M 419M 491M 46% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1g 873G 40K 803G 0% /home
/dev/ad0s1e 989M 12K 910M 0% /tmp
/dev/ad0s1f 19G 2.3G 16G 13% /usr
/dev/ad0s1d 3.9G 34M 3.5G 1% /var
tank 4.5T 128K 4.5T 0% /tank

# zfs create tank/data

# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 989M 419M 491M 46% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1g 873G 40K 803G 0% /home
/dev/ad0s1e 989M 12K 910M 0% /tmp
/dev/ad0s1f 19G 2.3G 16G 13% /usr
/dev/ad0s1d 3.9G 34M 3.5G 1% /var
tank 4.5T 128K 4.5T 0% /tank
tank/data 4.5T 128K 4.5T 0% /tank/data

(para eliminar el ZFS)
# zfs destroy /tank/data

(para eliminar el pool)
# zpool destroy /tank

Nota con ZFS tambien se puede hacer un RAID5 (lo denomina "raidz")
Para RAID5
# zpool create storage raidz ad1 ad2 ad3 ad6 ad8

En este caso la unidad sera mas pequeña

bueno, parece que todo quedo listo...

jueves, marzo 05, 2009

FreeBSD 7.1 + Firewall + Internet para nuestra LAN

Introduccion:
Instalaremos un servidor para dar salida a Internet a los usuarios de la LAN, implementaremos un firewall para controlar lo que sale o entra a nuestra LAN y los pondremos a salir por Squid-cache como proxy para controlar la navegacion.

Ultima actualizacion:
(DD-MM-AAA) 27-10-2009

Contenido:
Instalaremos FreeBSD 7.2
Activaremos un Firewall
Daremos salida a Internet
Configuraremos Squid-cache como proxy para optimizar y controlar la navegacion

Requerimientos:
1 Real server o en su caso, un buen PC
2 Tarjetas de red para para el equipo que compartira la salida a Internet

Diagrama de la configuracion:

Internet---Router---bge0-[FreeBSD]-bge1---Suiche---LAN

Proceso:
1) Instalar FreeBSD 7.1 (en mi caso como el procesador es un Intel Xeon con soporte para 64bits, instalare la version de FreeBSD 7.2 amd64 que se puede bajar de la web www.freebsd.org)

Se inicia con el cd-rom, se siguen unas instrucciones en pantalla, se usa todo el disco, se particiona por defecto y se instala solo lo basico
[X] 6 Kern-Developer Full binaries and doc, kernel sources only

En el proceso de instalacion se debe poner atencion en los nombres de las tarjetas que se muestran en la instalacion, por ejemplo: bge0 y bge1 , ya que luego se debera activar la segunda (la primera nos permite configurarla en el momento de la instalacion)

2) Actualizar nuestro FreeBSD
En el pasado lo hacia de otra forma, pero en este lugar encontre una forma mas facil
http://www.sarckz.com.ar/2009/01/06/freebsd-71-guia-de-instalacion/
Y la pondre aqui igualmente (seria una lastima perderla)

Copiamos al directorio de root 2 archivos importantes
# cp /usr/share/examples/cvsup/stable-supfile .
# cp /usr/share/examples/cvsup/ports-supfile .

Luego los editamos para especificar de donde puede bajar las cosas

# edit /root/
stable-supfile

Modificamos una linea para que quede asi:

*default host=cvsup.de.freebsd.org

Guardamos los cambios y salimos del editor

# edit /root/ports-supfile

Modificamos una linea para que quede asi (manteniendonos en 7.2):

*default host=cvsup10.us.FreeBSD.org
*default release=cvs tag=RELENG_7_2

Guardamos los cambios y salimos del editor

Actualizamos (kernel+base)

# csup -g -L 2 /root/stable-supfile

Descargamos/Actualizamos el arbol de ports con el supfile antes creado:
(el arbol de ports es el sistema para instalar aplicaciones)

# csup -g -L 2 /root/ports-supfile

Compilar un KERNEL personalizado para que tenga soporte para algunas cositas

Segun nuestro querido HANDBOOK
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-building.html

Seguimos los pasos

(como estamos usando FreeBSD 7.1 amd64)
# cd /usr/src/sys/amd64/conf

(o en caso de que usaramos FreeBSD 7.1 i386)
# cd /usr/src/sys/i386/conf

# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL

Es bueno darle una leida a UPDATING, pues tiene informacion importante
# edit /usr/src/UPDATING

Salimos del editor y continuamos

Editamos el archivo MYKERNEL en el cual especificamos que nuevas opciones queremos

# edit /root/kernels/MYKERNEL

Al final le ponemos estas lineas:

# Nuevas opciones

# 30.4 The OpenBSD Packet Filter (PF) and ALTQ
# 30.4.6 Enabling ALTQ
options ALTQ
options ALTQ_CBQ # Class Bases Queuing (CBQ)
options ALTQ_RED # Random Early Detection (RED)
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
options ALTQ_PRIQ # Priority Queuing (PRIQ)
options ALTQ_NOPCC # Required for SMP build

Guardamos y salimos del editor

(segun el handbook, seguir estos pasos)

Building a Kernel

  1. Change to the /usr/src directory:

    # cd /usr/src
  2. Compile the kernel:

    # make buildkernel KERNCONF=MYKERNEL
  3. Install the new kernel:

    # make installkernel KERNCONF=MYKERNEL

Re-iniciar el equipo
# shutdown -r now

Al entrar nuevamente deberemos tener funcionando el nuevo kernel, para verificar

# uname -a
FreeBSD alpha.company.com 7.2-RELEASE-p2 FreeBSD 7.2-RELEASE-p2 #2: Sat Jul 4 12:17:17 COT 2009 angel@alpha.company.com:/usr/obj/usr/src/sys/MYKERNEL amd64

3) Activar la segunda tarjeta de red (ya que en la instalacion, solo activamos la primera)

(como en la instalacion anotamos el nombre de las tarjetas detectadas, ya sabemos el nombre de la segunda segun FreeBSD, que en mi caso es bge1)

# edit /etc/rc.conf

defaultrouter="192.168.0.1"
hostname="alpha.company.com"
ifconfig_bge0="inet 192.168.0.1 netmask 255.255.255.0"
sshd_enable="YES"

# Segunda tarjeta
ifconfig_bge1="inet 192.168.1.1 netmask 255.255.255.0"

Guardar y salir

Re-iniciar el equipo
# shutdown -r now

Al entrar nuevamente, debemos tener 2 tarjetas levantadas, para verificar
(se mostrara algo como esto)
alpha# ifconfig
bge0: flags=8843 metric 0 mtu 1500
options=9b
ether 00:13:21:e9:dc:0e
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
media: Ethernet autoselect (100baseTX )
status: active
bge1: flags=8843 metric 0 mtu 1500
options=9b
ether 00:13:21:c8:fd:c2
inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (1000baseTX )
status: active

4) Compartir el Internet con la LAN
(Se supone que ya tenemos internet en nuestro FreeBSD 7.1 de modo que lo podemos compartir)

Editamos este archivo y le agregamos estas lineas al final

# edit /etc/rc.conf

# Activamos OpenBSD Packet Filter (PF)
pf_enable="YES" # Enable PF (load module if required)
pf_rules="/etc/pf.conf" # rules definition file for pf
pf_flags="" # additional flags for pfctl startup
pflog_enable="YES" # start pflogd(8)
pflog_logfile="/var/log/pflog" # where pflogd should store the logfile
pflog_flags="" # additional flags for pflogd startup
gateway_enable="YES" # Enable as LAN gateway (PF)

5) Generar nuestro archivo de politicas del firewall (que es el que compartira el Internet)

Aqui toca leer un poco el manual oficial de PF, que se puede ver aqui
http://www.openbsd.org/faq/pf/

Un ejemplo basico para una red pequena
http://www.openbsd.org/faq/pf/example1.html

Aqui el que yo tengo que puedes adaptar segun tus necesidades (muy completo y bien explidado)
http://alpha.telemedellin.tv/public/pf.conf

El archivo con las reglas es /etc/pf.conf

Ya con nuestro archivo creado re-iniciamos el servidor y los equipos de la LAN deben navegar si tienen los datos correctos de IP, MASK, GATEWAY y DNS

Nota:
Si usas como ejemplo mi archivo pf.conf debes tener cuidado con estas lineas:

# mejor solo les permito ftp a algunos usuarios, por lo de los .exe y otros
rdr pass on $eth_if1 proto tcp from $usuarios_ftp to !$eth_if1 port ftp \
-> 127.0.0.1 port 8021
# rdr allow outgoing WWW requests to the squid, but not from LAN to my server
rdr pass on $eth_if1 proto tcp from any to !$eth_if1 port www \
-> 127.0.0.1 port 3128

Esto ya que la primera hace una redireccion para las conexiones FTP a un proxy llamado pftpx y la segunda hace igualmente una redireccion para las conexiones WWW a un proxy llamado Squid-chache

Tanto pftpx como Squid-cache, se pueden instalar mediante los ports asi:
Istalando PFTPX
# cd /usr/ports/ftp/pftpx
# make install clean

Activandolo al iniciar el sistema, poner esta linea en /etc/rc.conf
# Activamos pel pftpx proxy
pftpx_enable="YES"

Iniciar pftpx
# /usr/local/etc/rc.d/pftpx start

Instalando Squid-chache
# cd /usr/ports/www/squid30
# make install clean

Activandolo al iniciar el sistema, poner esta linea en /etc/rc.conf
# Activamos el Squid para cachear y controlar la navegacion WWW
squid_enable="YES"

Iniciar el directorio donde se cacheara el contenido de Squid
# /usr/local/sbin/squid -z

Iniciar Squid
# /usr/local/etc/rc.d/squid start

Squid es todo un mundo, hay infinidad de cosas que se pueden hacer o bloquear, aqui
el que actualmente uso y con el cual torturo a los usuarios de mi LAN ;-)

http://alpha.telemedellin.tv/public/squid.conf

Aqui un manual mas explicativo de como poner a funcionar Squid con mas detalle
http://www.freebsddiary.org/squid.php

NOTA 2:
En mi archivo squid.conf se navega libremente con Firefox, Opera, y todos los otros
buenos navegadores. Con el Internet Explorer solo les dejo navegar en algunos sitios
mal construidos y que solo funcionan con ese navegador.

Igualmente mi squid.conf hace referencias a algunos archivos como:
/usr/local/etc/squid/deny_sites.conf
# ejemplo de contenido:
playboy.com

usr/local/etc/squid/sites_hours.conf
# ejemplo de contenido:
facebook.com

/usr/local/etc/squid/msn_overhttp.conf
# ejemplo de contenido:
msnmessenger.com

/usr/local/etc/squid/msn_domains.conf
# ejemplo de contenido:
gateway.messenger.hotmail.com

/usr/local/etc/squid/accept_domains.conf
# ejemplo de contenido:
.grupoaval.com

/usr/local/etc/squid/accept_domains_system.conf
# ejemplo de contenido:
.microsoft.com
.windowsupdate.com
.windowsmedia.com
.mcafee.com
.nai.com
.mcafeeasap.com

/usr/local/etc/squid/FreeDB.conf
# ejemplo de contenido
freedb.org
cddb.com
music-city.org
allmediaguide.com
allmediaguide.com/lasso
allmusic.com
musicbrainz.org
microsoft.com
windowsmedia.com

Nota:
Recientemente al mirar los log de cache de squid
# tail -f /usr/local/squid/logs/cache.log
2009/09/15 11:58:48| clientNatLookup: PF open failed: (13) Permission denied

Para solucionar esto, debemos modificar el archivo /etc/devfs.conf
# edit /etc/devfs.conf

y agregar esta linea al final:

# Le doy permiso a squid en /dev/pf
own pf root:squid
perm pf 0640

sábado, febrero 14, 2009

FreeBSD + GLPI + MySQL

GLPI es una herramienta para inventario de hardware, licencias y muchas otras cosas utiles.

1) Instalar el port glpi
# whereis glpi

# cd /usr/ports/www/glpi
# make install clean

2) Instalar mysqlXX-server (si glpi instalo mysql-client-5.0, se debe instalar mysql50-server)
# cd /usr/ports/databases/mysql50-server

2) Hacer que el MySQL se inicie con el sistema poniendo una linea en /etc/rc.conf como esta

# Activamos MySQL
mysql_enable="YES"

3) Iniciar MySQL para no tener que re-iniciar el servidor
# /usr/local/etc/rc.d/mysql-server start

4) Crear la database
Creandola
$ mysqladmin -uroot create glpi

Garantizando acceso a la database
$ mysql -uroot -e"GRANT ALL ON glpi.* TO USERNAME@localhost IDENTIFIED BY 'PASSWORD'" glpi

(choose your own values for USERNAME and PASSWORD)

5) Poner estas lineas en el /usr/local/etc/apache22/httpd.conf

# Modificacion para GLPI inicio
Alias /glpi/ /usr/local/www/glpi/
<Directory /usr/local/www/glpi>
AllowOverride Options FileInfo
Order allow,deny
Allow from all
</Directory>
# Modificacion para GLPI fin

Mostrar el codigo de arriba, fue posible gracias a esta herramienta

6) Re-iniciar Apache
# /usr/local/etc/rc.d/apache22 restart

7) Entrar con el navegador a:
http://alpha/glpi/
(note que ingresara automaticamente a http://alpha/glpi/install/install.php)

8) Llenarl los datos que nos pide:
Select your languag: Español (Argentina)(es-AR)
OK
* He leído y ACEPTO los términos de la licencia enunciados arriba.
Continuar
Instalacion (ya que lo estoy instalando por primera ves)
(todo sale Perfect!)
Continuar
Mysql server: localhost
Mysql user: admin
Mysql pass : MICLAVESECRETA
Continuar
(La conexión a la base de datos ha sido exitosa)
Seleccione una base de datos:
* glpi (ya que ese fue el nombre que le dimos al crearla en mysql)
Continuar
OK - La base ha sido inicializada
Continuar
La instalación ha terminado
Utilizar GLPI

9) Exportar los datos (ya sea para hacerle backups o de otro equipo)
# mysqldump --user=admin --password=MICLAVESECRETA glpi | gzip > /root/glpi.sql.gz

10) Importar los datos (como root no los importa)

# gunzip glpi.sql.gz

$ mysql --user=admin --password=MICLAVESECRETA glpi < /root/glpi.sql

Notas:
Al actualizar desde la version 0.71.6 a la 0.72 mediante los ports, daba un error que decia que GLPI no podia funcionar sin las funciones json_encode y json_decode, para solucionar esto...
Se instala el port /usr/ports/devel/php5-json
Se re-inicia Apache22 /usr/local/etc/rc.d/apache22 restart

Si requiero borrarla por algun motivo
$ mysqladmin -uroot drop glpi

Si luego tengo dudas de los datos de nombre de la DB, usuario y password, mirar el archivo
/usr/local/www/glpi/config/config_db.php

viernes, febrero 13, 2009

De FreeBSD 6.3 a 7.1 STABLE con cvsup

Actualizacion
Genero errores y toco re-instalar todo

estoy actualizando con este manual
http://www.sarckz.com.ar/2009/01/06/freebsd-71-guia-de-instalacion/

Pasos escenciales para obtener el source de ports y world (kernel+base)

Se copian los supfiles al directorio local:

root:~% cp /usr/share/examples/cvsup/stable-supfile .
root:~% cp /usr/share/examples/cvsup/ports-supfile .

Añadimos el mirror adecuado para las descargas en el supfile:

root:~% sed -ie 's/CHANGE_THIS/cvsup.de/g' ports-supfile
root:~% sed -ie 's/CHANGE_THIS/cvsup.de/g' stable-supfile

(cvsup.de - escoje mirror aleman cvsup.de.freebsd.org )

Descargamos/Actualizamos el arbol de ports con el supfile antes creado:

root:~% csup -g -L 2 /root/ports-supfile

En caso que despues quiera actualizar su sistema a -STABLE tambien debe descargar el source
del workd(kernel+base):

root:~% csup -g -L 2 /root/stable-supfile

Luego
# cd /usr/src/sys/amd64/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL

Edito MYKERNEL

Building a Kernel
Change to the /usr/src directory:
# cd /usr/src
Compile the kernel:
# make buildkernel KERNCONF=MYKERNEL
Install the new kernel:
# make installkernel KERNCONF=MYKERNEL