Páginas

lunes, 16 de diciembre de 2013

Instalar y congurar Samba FreeBSD

Samba en servidor FreeBSD 9.1

Samba fue creado para proveer servicios de archivos e impresión para todo tipo de clientes SMB/CIFS, incluyendo las diferentes versiones de los sistemas operativos windows. Andrew Tridgell desarrollo Samba en 1992 utilizando ingerieria-inversa.

# cd /usr/ports/net/samba3
# make config

En el menú que aparece deseleccione LDAP presionando la barra espaciadora.

Instalar samba
# make install clean
# rehash

Archivo de configuración:
# ee /usr/local/etc/smb.conf

[global]
workgroup = FREEBSD
server string = Unix Servidor de Archivos
security = user
hosts allow = 192.168.1. 192.168.3. 127.

log file = /var/log/samba/log.%m
max log size = 50

display charset = ISO8859-15
unix charset = ISO8859-15
dos charset = 850

[homes]
comment = Home Directories
browseable = no
writable = yes

[compartido]
comment = Compartido Unix Windows
path = /compartido
valid users = compartido
public = no
writable = yes

Ejecutar demonios desde inetd:


Releer archivo de confiuración

# killall -1 inetd


Comprobar errores de sintaxis:
# testparm

Usar el comando adduser para añadir usuario unix:

# adduser
Username: compartido
Full name: compartidou
Uid (Leave empty for default):
Login group [compartido]:
Login group is compartido. Invite compartido into other groups? []:
Login class [default]:
Shell (sh csh tcsh bash rbash nologin) [sh]:
Home directory [/home/compartido]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : compartido
Password   : *****
Full Name  : compartidou
Uid        : 1009
Class      :
Groups     : compartido
Home       : /home/compartido
Home Mode  :
Shell      : /bin/sh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (compartido) to the user database.
Add another user? (yes/no): no
Goodbye!

Crear el directorio a compartir por Samba:
# mkdir /compartido

Agregando el grupo Samba smbprivate y el usuario compartido:
root@freebsdsvr # pw groupadd smbprivate -M compartido

Cambiar permisos sobre el directorio Samba:
root@freebsdsvr # chgrp smbprivate /compartido
root@freebsdsvr # chmod 770 /compartido

root@freebsdsvr # ls -ld /compartido/
drwxrwx---  2 root  smbprivate  512 May 15 08:58 /compartido/

Ahora es el momento de establecer la contraseña:
root@freebsdsvr # smbpasswd -a compartido
New SMB password:
Retype new SMB password:
Added user compartido.

Reiniciar el servicio Samba:
root@freebsdsvr # service samba restart
Removing stale Samba tdb files: . done
Starting nmbd.
Starting smbd.

Comprobar el servidor:
root@freebsdsvr: # smbclient -U compartido -L localhost


Iniciar el servidor Samba automáticamente con el sistema.
# ee /etc/rc.conf
samba_enable="YES"

guardar y salir, reiniciar Samba:
# /usr/local/etc/rc.d/samba restart
# /usr/local/etc/rc.d/samba status

Montar directorio compartido en cliente FreeBSD:
# mkdir /media/samba
# cd /media

Configurar permisos directorio cliente:
# chown root:carles samba/
# chmod 770 samba/

$ ls -ld samba/ drwxrwx  ---  1 root  carles  16384  1 ene  1970 samba

root@freebsd:/ # mount_smbfs -I 192.168.3.1 //compartido@freebsdsvr/compartido /media/samba/

Crear el fichero /root/.nsmbrc, permisos 600:


Agregar el directorio compartido al fichero /etc/fstab. La opción -N significa que no pregunte por la contraseña, la leerá del fichero /root/.nsmbrc



Acceder desde cliente Windows 7

Para conectar a las unidades de red;

Inicio, Panel de control, Herramientas administrativas, Directivas locales, Opciones de seguridad, cambiar lo siguiente:

- seguridad de red: nivel de autenticación de lan manager: enviar lm y ntlm: usar la seguridad de sesion ntlmv2 si se negocia
- Seguridad de red: seguridad de sesión minima para clientes NTLM basados en SSP: Sin mínimo
- Seguridad de red: seguridad de sesión minima para servidores NTLM basados en SSP: Sin mínimo

\\192.168.3.1\compartido








Gestionar usuarios:
pdbedit es la utilidad que gestiona la base de datos de usuarios de Samba.

Agregar usuarios
# pdbedit -a

Eliminar usuario
# pdbedit -x nombreusuario

Por ejemplo para agregar al usuario Liliam Junqueras a la base de datos Samba con el nombre de usuario lili:
# pdbedit -a -u lili -f "Liliam Junqueras"

Listar usuarios en la base de datos en detalle
# pdbedit -L -v

Mostrar la política de cuenta, longitud mínima de la contraseña
# pdbedit -P "min password length"

Cambiar la longitud mínima de la contraseña a 8 caracteres:
# pdbedit -P "min password length" -C 8

Más información
# man pdbedit

Unix es genial!.

domingo, 1 de diciembre de 2013

FreeBSD ddns apache mysql drupal

Si en un momento determinado tenemos la intención de habilitar un servidor web o acceder remotamente a nuestra red, nos encontramos con el tema de que nuestro ISP nos proporciona una ip dinámica (diferente) cada vez que nos conectamos. Por esto se hace necesario registrar una cuenta ddns.

En este caso y a modo de laboratorio realizaremos todo el proceso desde el registro ddns hasta la instalación y puesta en funcionamiento del CMS Drupal.

Dinamic DNS

Configurar ddns en el router vdsl Comtrend VR-3025u 30MB Jazztel



Les presento dnsdynamic.org un ddns gratuito y según dice siempre lo será. Durante el registro nos pedirá una cuenta de correo válida y un password que serán utilizados posteriormente, también hay que elegir un dominio. El password me lo invento por lo tanto no traten de entrar en dnsdynamic.org con esta cuenta, solo serviría para cargar el servidor:

login=nombreusuario@gmail.com # correo registrado
password=26Ac9yodLK4jzH48== # password registrado (inventado)
carlescamilo.dnsdynamic.com # dominio registrado

Ahora vamos a nuestro servidor FreeBSD e instalamos ddclient utilizado para actualizar automáticamente dynamic DNS:
$ ssh -l carlos -p 3434 192.168.3.1
password

$ hostname
$ freebsdsvr.linux.bcn

# cd /usr/ports/dns/ddclient
# make install clean
# rehash

# cd /usr/local/etc
# cp ddclient.conf.sample ddclient.conf
# ee ddclient.conf
# Archivo de configuración /usr/local/etc/ddclient.conf


Guardar y salir.

ddclient.conf contiene el password de su proveedor DNS dinámico, hágalo legible solo por root:
# chmod 600 /usr/local/etc/ddclient.conf

y agregue las siguientes líneas de inicio:
# ee /etc/rc.conf

ddclient_enable="YES"
ddclient_flags="-daemon 600" # comprobar cada 600 segundos

Guardar los cambios y levantar el demonio:

# /usr/local/etc/rc.d/ddclient start
Confirmar que ddclient se está ejecutando:


Si repite el comando ps comprobará el estado de ddclient en cualquier momento. Después de que el tiempo de sueño expire, ddclient
debe comprobar su IP pública y hacer los cambios apropiados a su proveedor DNS dinámico.

El archivo /var/tmp/ddclient.cache guarda la última dirección IP pública conocida del sistema y los mensajes de estado de los registros ddclient, así como errores los guarda en /var/log/messages


Correos electrónicos de estado se enviarán a la dirección de correo electrónico de la cuenta root. (Si configura el reenvío de correo electrónico del usuario root en el archivo /etc/aliases), configure la dirección de correo electrónico a la que desea que lleguen los mensajes agregando esta línea:
# ee /etc/aliases

root: localuser, nombreusuario@gmail.com # su cuenta

Guardar y salir

Nota: El puerto 25 es utilizado por mail para el envío de email por lo tanto el firewall debe permitir su paso y no olvide abrir el puerto 587 en su router ADSL si utiliza gmail, por ejemplo en este caso el 587 abierto para la dirección IP 192.168.1.250)

Adicionalmente debe configurar dnsdynamic en su router de acceso a Internet. Un ejemplo para el Comtrend vr3025u Multi-DSL 30 Megas de Jazztel:

hostname: carlescamilo.dnsdynamic.com # dominio dnsdynamic
username: nombreusuario@gmail.com # mail registro dnsdynamic
password=26Ac9yodLK4jzH48== # password, me lo invento
service: dyndns
interface: ppp1.1

Depurar ddclient. Trate de ejecutar el comando siguiente:

# ddclient -daemon=0 -noquiet -debug
DEBUG:    proxy  =
DEBUG:    url    = myip.dnsdynamic.com
DEBUG:    server = myip.dnsdynamic.com
DEBUG:    get_ip: using web, myip.dnsdynamic.com reports 96.27.155.98
DEBUG:   
DEBUG:     nic_dyndns2_update -------------------
DEBUG:    proxy  =
DEBUG:    url    = http://www.dnsdynamic.org/nic/update?system=custom&hostname=carlescamilo.dnsdynamic.com&myip=96.27.155.98
DEBUG:    server = www.dnsdynamic.org

Apache HTTP Server

Instalar el servidor Apache

Comprobar el archivo /etc/hosts
ee /etc/hosts

#
::1 localhost freebsdsvr.linux.bcn
127.0.0.1 localhost freebsdsvr.linux.bcn
192.168.3.1 freebsdsvr freebsdsvr.linux.bcn
#

Instalar el Servidor Apache
# cd /usr/ports/www/apache22
# make config ; make install clean
# rehash

Agregar las siguientes líneas a httpd.conf
# ee /usr/local/etc/apache22/httpd.conf

ServerAdmin mailvalido@gmail.com
ServerName freebsdsvr.linux.bcn:80

Comprobar errores de sintaxis en el archivo de configuración
# apachectl configtest
Performing sanity check on apache22 configuration:
Syntax OK

Después agregar las siguientes lineas en /etc/rc.conf:
apache22_enable="YES"
apache22_http_accept_enable="YES"

# /usr/local/etc/rc.d/apache22 start


El comando GET es case sensitive. Asegúrese de presionar enter dos veces y fíjese que antes y después del primer slash hay espacio.

Si puede ver el texto it works! en la última línea de salida quiere decir que Apache funciona.

Con el navegador lynx puede hacerse lo mismo
# lynx http://freebsdsvr.linux.bcn:



o desde un cliente de la red invocando freebsdsvr.linux.bcn ó la dirección IP 192.168.3.1:


Archivos LOG de Apache:

/var/log/httpd-access.log
Contiene un log de las direcciones IP, hora, y la actividad enn el servidor HTTP.
/var/log/httpd-error.log
Contiene un log de los mensajes de error producidos opr el seridor HTTP.

PHP5

# cd /usr/ports/lang/php52
# make config ; make install clean
# rehash

Un menú de opciones para php5 diríjase hasta Apache y presione la barra espaciadora para instalar el módulo Apache, luego OK para empezar la instalación.

PHP5-5.4-29

El module requerido para el soporte de aplicaciones PHP  sobre Apache debe instalarse:
# cd /usr/ports/www/mod_php5
make install clean

Antes de construir este puerto vamos a añadir soporte para MySQL y MySQLi (una interfaz mejorada para MySQL) con el fin de comunicarse con el servidor MySQL.
# cd /usr/ports/lang/php5-extensions/
make config

En el menú correspondiente tiene seleccione “MySQL database support” y “MySQLi database support,” luego proceda a construir el puerto:
# make install clean

Ha llegado el momento de configurar PHP para utilizarlo en su sistema insertando en DirectoryIndex declaración index.php:

# ee /usr/local/etc/apache22/httpd.conf

DirectoryIndex index.php index.html

y agregar estas líneas:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

En el caso de PHP5-5.4_29 al final del archivo http.conf agregamos:


Copiar el archivo php.ini-production php.ini que son las opciones recomendadas para entornos de servidores en producción.

# cp /usr/local/etc/php.ini-production /usr/local/php.ini

La directiva session.save_path le dice a PHP donde almacenar los archivos temporales de sesión.

# ee /usr/local/php.ini

session.save_path = "/tmp"

Guardar y salir.

# /usr/local/etc/rc.d/apache22 restart

Para comprobar la instalación de PHP crearemos un archivo llamado phpinfo.php en el directorio raíz del servidor web:

# ee /usr/local/www/apache22/data/phpinfo.php
Añadir estas líneas:

Guardar y salir.

Solicite phpinfo.php de su servidor Apache desde un navegador web. Si lynx está instalado este es el aspecto para el hostname freebsdsvr.linux.bcn:

PHP5-5.4_29




Suprimir el archivo phpinfo.php después de la prueba.
# rm /usr/local/www/apache22/data/phpinfo.php

MySQL junto a PHP es utilizado para crear sitios web dinámicos.
Asegúrese de que el nombre de host de su servidor puede resolverse localmente:
 Comprobar el archivo /etc/hosts
ee /etc/hosts

::1 localhost freebsdsvr.linux.bcn
127.0.0.1 localhost freebsdsvr.linux.bcn
192.168.3.1 freebsdsvr freebsdsvr.linux.bcn

Instalar MySQL Server
# cd
/usr/ports/databases/mysql55-server
# make -D BUILD_OPTIMIZED install clean
# rehash

Ejecute el script de mysql_install_db para establecer las tablas de permisos necesarios para MySQL. Almacenan información acerca privilegios, Permisos de usuario de MySQL y otras opciones de seguridad.

# mysql_install_db --user=mysql

Iniciar el demonio MySQL y configurar la contraseña de root de MySQL:

# mysqld_safe &
# mysqladmin -u root password 'localpassword'

MySQL incluye ejemplos de configuración ubicados en el directorio /usr/local/share/mysql, cada uno de los cuales configurado para un sistema determinado:

my-medium.cnf

Sistemas con más de 128MB de RAM (recomendado para servidores web)

# cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf

Si MySQL va a utilizarse para aplicaciones PHP basadas en la web desactivar las redes TCP hará la instalación MySQL más segura.

Se aplica si el servidor web y la base de datos MySQL funcionan en el mismo ordenador. Descomentar la línea skip-networking del archivo /var/db/mysql/my.cnf

# ee /var/db/mysql/my.cnf
skip-networking

Configurar MySQL para iniciarse automáticamente con el sistema

# ee /etc/rc.conf
mysql_enable="YES"

Aplicar los cambios reiniciando MySQL:

# /usr/local/etc/rc.d/mysql-server restart

Para ver los mensajes de log error si los hubieran, el path es /var/db/mysql/freebsdsvr.linux.bcn.err y su nombre coincide con su hostname.


También hay que asegurarse que los permisos del directorio /tmp son los correctos:

# ls -ld /tmp
drwxrwxrwt  6 root  wheel  512 Nov 26 10:03 /tmp

Si no fuera así root puede corregirlos:

# chown root:whell /tmp
# chmod 777 /tmp
# chmod =t /tmp

Instalar el gestor de contenidos (CMS) Drupal7:

Primero hay que crear la base de datos.

# mysql -u root -p
Enter password: 
mysql> create database drupal;
mysql> grant all on drupal.* to
    -> drupal@localhost identified by 'password';
mysql> quit

Sustituya password por la contraseña de su elección. Esta contraseña la necesitará más adelante, no la olvide!.

Instalar Drupal7

# cd /usr/ports/www/drupal7
# make config; make install clean


Configurar Drupal para utilizarlo en su sistema:

Este archivo indica a apache la ubicación correcta de los archivos de Drupal y hace la administración más fácil. De forma predeterminada Apache busca en el directorio /usr/local/apache22/Includes para los archivos de configuración. Crear un archivo para Drupal:

# ee /usr/local/etc/apache22/Includes/drupal.conf

Agregue las líneas siguientes:


Guardar y salir. Reiniciar Apache.

# /usr/local/etc/rc.d/apache22 restart

Crontab es un servicio del sistema que permite la ejecución automática de scripts o programas de acuerdo con un calendario establecido en el archivo /etc/crontab. Hay que añadir una línea a /etc/crontab para permitir las tareas de mantenimiento de Drupal.

# ee /etc/crontab

45 */4 * * * root /usr/local/bin/lynx http://freebsdsvr.linux.bcn/drupal/cron.php

Abrir http://freebsdsvr.linux.bcn/drupal/install.php en su navegador sustituyendo su hostname y directorio, si lo ha modificado.

Introducir los datos utilizados previamente en la creación de la base de datos, nombre, nombre de usuario y contraseña. Guardar los cambios.


Seguir el asistente y al finalizar clic en su new site.


Desde fuera de nuestra red, he configurado soporte SSL para Apache::




Desde nuestra propia red:


Unix es genial!.

viernes, 29 de noviembre de 2013

Firewall ipfilterscript freebsd

Generar automáticamente reglas de firewall

Es muy importante estar protegido por un firewall y para configurarlo están las páginas de manual y la ayuda que los tutoriales ofrecen. Con el tiempo y la molestia suficiente, podrías escribir una configuración de cortafuegos para cualquier situación. Todos son razonablemente similares, aunque, es posible generar la configuración contestando unas preguntas.

Ese es el propósito de la secuencia de comandos de configuración de IPFilter script: para generar reglas de configuración de cortafuegos SOHO típicos utilizando FreeBSD y IPFilter.  Todos los beneficios de un servidor de seguridad sin tener que aprender la sintaxis. Con este script , debe ser capaz de establecer un cortafuegos típico sin conocimientos de configuración de FreeBSD en absoluto para proteger los ordenadores de la red interna (LAN).

Un gran guión para tener los pc's seguros a medida que descubre el FreeBSD server. Ahora usted puede estar tranquilo al pensar que sus máquinas están protegidas.

Servidor FreeBSD con dos internafes de red.

em1 = 192.168.1.0/24 wan
em0 = 192.168.3.0/24 lan

IP router = 192.168.1.1

nic_externa="em1" IP 192.168..250
nic_interna="em0" IP 192.168.3.1

Compilar estáticamente el soporte para IPF en el kernel:

Entrar al servidor a través de conexión segura SSH:

$ ssh -l carlos -p 2222 192.168.3.1
Password:

$ hostname
freebsdsvr.linux.bcn

Si el directorio /usr/src/sys no existe quiere decir que las fuentes del kernel no están instaladas.

Es necesario tener el código fuente completo de FreeBSD para poder compilar el kernel.

Descargar las fuentes del kernel 9.1-RELEASE:

$ cd ~/descargas
$ wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/9.1-RELEASE/src.txz

Descomprimir el archivo a /usr/src:
# tar -C / -xzvf src.txz

Ahora desde el directorio arch/conf copiar el archivo de configuración GENERIC utilizando cualquier nombre:

# cp /usr/src/sys/amd64/conf/GENERIC /usr/src/amd64/conf/NEWGENERIC

Añadir las siguientes opciones a /usr/src/sys/amd64/conf/NEWGENERIC
# ee /usr/src/sys/amd64/conf/NEWGENERIC

....
options IPFILTER
options IPFILTER_LOG
options IPFILTER_DEFAULT_BLOCK
....

# cd /usr/src
# make buildkernel KERNCONF=NEWGENERIC

# make installkernel KERNCONF=NEWGENERIC

El nuevo kernel se copiará al directorio raíz como /kernel y el viejo kernel tendrá de nombre kernel.old.

Reiniciar el sistema con el nuevo kernel

Descargar el script:
# wget http://www.bsdfreaks.nl/files/ipfilterscript.tar.gz

Instalación del script.

# cp ipfilterscript.tar.gz /tmp/ && cd /tmp
# tar -zxvf ipfilterscript.tar.gz
# ./ipfilter.pl

1: Would you like to setup PPPoE DSL connection (Choose 1)
2: Setup IP configuration, Firewalling and NAT (Choose 2) or
3: Setup a DHCP server (Choose 3 and hit enter)
4: Setup serial console support
5: Exit

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

Elegir Nic externa, em1

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

Elegir Nic interna, em0

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

Ahora, el script necesita conocer la dirección IP del dispositivo de puerta de enlace, detrás de la cual están todas mis máquinas internas (lan).

Setting Internal nic IP 192.168.1.1

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

192.168.3.1

Internal Nic netmask, Just hit enter for 255.255.255.0

255.255.255.0

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

External Nic IP, or type "DHCP" for DHCP, for connections like ADSL type "NONE" for no dhclient on external nic

192.168.1.250

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

External nic netmask, eg 255.255.255.0

255.255.255.0

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

Do you want to enter a gateway default IP address? if you ISP provided you with a default gateway choose Yes Y/N, default = no

y

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

Do you want statefull firewall or just allow everything and rely on IPNAT to protect you, I recommend firewalling :)
Choose: "y" for statefull firewall or "n" for allow everything

y

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

y

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

Do you want IP Filter to log denied packets? Y/N, default = yes
y

#### Denied packets will be logged to /var/log/firewall.log ####
#######################################################################

Do you want to install a /etc/ipfrestart script so you can easily reset
your rules? Handy if you are trying out new rulesets. Y/N, default = yes

y

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

Do you want ftp active mode supprt? when ftping out behind a basic NAT
firewall, active mode ftp wont work.
This is because normal active mode ftp actually initiates a FTP
connection from the server back to YOU! and requires more then basic nat to work. The day FTP is gone and fully replaced by something more secure like  SSH's sftp will be a day when the internet is large degree more secure.
Choose: "y" to switch on active ftp support (recommended) or "n"

y

Going to write the data to these files
/etc/rc.conf
/etc/ipf.rules
/etc/ipnat.rules
/etc/newsyslog.conf


hit ctrl+c to abort

All done, type "reboot" for changes to take effect

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

Settings for internal machines behind the firewall:

Gateway: 192.168.3.1

Netmask: 255.255.255.0

DNS: (Your ISPS DNS)

Clients IP: 192.168.3.2 or higher

Settings for external

Gateway: 192.168.1.1

IP: 192.168.1.250

Netmask: 255.255.255.0

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

Por último, el script escribe la información necesaria a los archivos de configuración necesarios. Después de reiniciar, el sistema está completamente configurado para acceder al ISP y proporcionar servicios NAT y DHCP para la LAN interna, y protege todos los paquetes a través de su Firewall.

Listar reglas de NAT activas
#  ipnat -l


Listar reglas de filtrado input output:
# ipfstat -io


Listar la tabla de estados de IP Filter


Verificar el comportamiento del NAT


El archivo rc.conf modificado por el ipfilterscript:


Si queremos permitir conexiones al servidor web desde la www:

#permitir conexiones al servidor web /etc/ipnat.rules
rdr em1 0.0.0.0/0 port 80 -> 127.0.0.1 port 80 tcp/udp


Unix es genial!.

domingo, 17 de noviembre de 2013

FreeBSD server NAT IPFW dhcp-server dnsmasq squid

 Me encanta FreeBSD. Este servidor local es una pequeña máquina con un consumo muy bajo e incluye nat, firewall, dhcp-server, dnsmasq y squid y será el intermediario entre la red local e Internet. El sistema perfecto para esta tarea es FreeBSD.

Nuestro servidor FreeBSD está dotado con dos tarjetas de red.

em0 interface LAN IP 192.168.3.1/24
em1 interface WAN (internet) 192.168.1.254/24

Compilar kernel personalizado. Habilitar NAT + FIREWALL

Todo lo que existe dentro de un directorio de una arquitectura en particular, es específico para dicha arquitectura, el resto del código es común para todas las plataformas en las que FreeBSD funciona.

Si el dirctorio /usr/src/sys no existe quiere decir que las fuentes del kernel no están instaladas.

Es necesario tener el codigo fuente completo de FreeBSD para poder compilar el kernel.

Descargar las fuentes del kernel 9.1-RELEASE:

Instalar wget
# pkg_add -r wget

$ cd ~/descargas
$ fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/9.1-RELEASE/src.txz

Descomprimir el archivo a /usr/src:
# tar -C / -xzvf src.txz

Ahora desde el directorio arch/conf copiar el archivo de configuración GENERIC utilizando cualquier nombre:

# cp /usr/src/sys/amd64/conf/GENERIC /usr/src/amd64/conf/NEWGENERIC

Añadir las siguientes opciones a /usr/src/sys/amd64/conf/NEWGENERIC
# ee /usr/src/sys/amd64/conf/NEWGENERIC
...
options IPFIREWALL
options IPDIVERT

options IPFIREWALL_VERBOSE
...

# cd /usr/src
# make buildkernel KERNCONF=NEWGENERIC

# make installkernel KERNCONF=NEWGENERIC

El nuevo kernel se copiará al directorio raíz como /kernel y el viejo kernel tendrá de nombre kernel.old.

Reiniciar el sistema con el nuevo kernel.

Archivos de configuración:

$ cat /boot/loader.conf
ipfw_load="YES"
ipdivert_load="YES"
autoboot_delay="2"

$ cat /etc/rc.conf
hostname="freebsdsvr.linux.bcn"
keymap="spanish.iso.kbd"

# interface con acceso a Internet
ifconfig_em1="DHCP"
defaultrouter="192.168.1.1"
sshd_enable="YES"

# interface LAN
ifconfig_em0="inet 192.168.3.1 netmask 255.255.255.0"
moused_enable="NO"

# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"

gateway_enable="YES"
firewall_enable="YES"
firewall_logging="YES"
natd_enable="YES"
natd_interface="em1"
natd_flags="-f /etc/natd.conf"

# reglas personalizadas
# firewall_script="/etc/ipfw.rules"

# activer reglas dinamicas protegiendo LAN
firewall_script="/etc/rc.firewall"
firewall_type="simple"

$ ee /etc/natd.conf
use_sockets yes
same_ports yes
unregistered_only yes
dynamic yes

redirect_port tcp 192.168.3.60:80 8080
redirect_port tcp 192.168.3.60:22 2222

Guardar y salir

Reiniciar el servidor para comprobar que no tenemos mensajes de error.

# shutdown -r now

Todo perfecto. Seguimos con dhcp-server dnsmasq y squid:

Intalar y configurar dhcp-server

# pkg_add -r isc-dhcp41-server
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9.1-release/Latest/isc-dhcp41-server.tbz... Done.
===> Creating users and/or groups.
Creating group 'dhcpd' with gid '136'.
Creating user 'dhcpd' with uid '136'.

Así quedará el archivo dhcpd.conf:

# sed -e '/^[ ]*#/d' -e '/^$/d' /usr/local/etc/dhcpd.conf
option domain-name "linux.bcn";
option domain-name-servers 192.168.3.1, 192.168.1.1;
option subnet-mask 255.255.255.0;
default-lease-time 3600;
max-lease-time 86400;
ddns-update-style none;
subnet 192.168.3.0 netmask 255.255.255.0 {
 range 192.168.3.40 192.168.3.50;
 option routers 192.168.3.1;

}
Para iniciar dhcp-server con el sistema

agregar al archivo rc.conf:
dhcpd_enable="YES" # dhcpd enabled?
dhcpd_flags="-q" # command option(s)
dhcpd_conf="/usr/local/etc/dhcpd.conf" # configuration file
dhcpd_ifaces="em0"    # ethernet interface(s)
dhcpd_withumask="022"   # file creation mask

Iniciar el servidor dhcp:
# /usr/local/etc/rc.d/isc-dhcpd start
Starting dhcpd.

Dnsmasq

Instalar dnsmasq
$cd /usr/ports
$ make search name=dnsmasq
$ cd /usr/ports/dns/dnsmasq/
# make install clean

cp /usr/local/etc/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

Archivo de configuración dnsmasq.conf
Filtrando dnsmasq.conf con sed para eliminar líneas que empiezan con un espacio, líneas que comienzan con almohadilla y líneas vacías.

sed -e '/^[ ]*#/d' -e '/^$/d' /etc/dnsmasq.conf
port=53
domain-needed
bogus-priv
strict-order
interface=em0
listen-address=127.0.0.1
expand-hosts
domain=linux.bcn

También podemos utilizar dnsmasq como dns  + dhcp y prescindir del servidor isc-dhcp; en cuyo caso el archivo /usr/local/etc/dnsmasq.conf quedaría más o menos como sigue: (Acto seguido se detiene el servidor dhcd # killall dhcpd, comentar las líneas que hacen referencia a dchp en el archivo /etc/rc.conf y reiniciar el servicio dnsmasq:

port=53
domain-needed
bogus-priv
strict-order
interface=em0
listen-address=127.0.0.1
expand-hosts
domain=linux.bcn
dhcp-range=192.168.3.40,192.168.3.50,12h
dhcp-host= 00:21:9b:e2:cd:44,192.168.0.60,infinite

Iniciar dnsmasq
# /usr/local/etc/rc.d/dnsmasq start
Starting dnsmasq.

Iniciar dnsmasq con el sistema
agregar esta línea al archivo /etc/rc.conf
dnsmasq_enable="YES"

Archivo resolv.conf del servidor

#permite a las maquinas locales obtener información DNS.
nameserver 127.0.0.1

#OpenDNS
nameserver 208.67.222.222
nameserver 208.67.220.220

# Otra opcion es utilizar los DNS del proveedor ISP.
# nameserver 192.168.1.1

Impedir cambios en el fichero resolv.conf
Añadir esta línea al archivo de configuración de resolv.conf (resolvconf.conf)
# ee /etc/resolvconf.conf
resolv_conf="/dev/null"

Archivo resolv.conf de las máquinas cliente: $ cat /etc/resolv.conf
# Archivo inmutable resolv.conf
search linux.bcn
nameserver 192.168.3.1

Realizar consultas desde un cliente, comprobar que dnsmasq funciona:
$ nslookup # sustituido por drill en FreeBSD 10
> freebsdsvr
Server:        192.168.3.1
Address:    192.168.3.1#53

Non-authoritative answer:
Name:    freebsdsvr.linux.bcn
Address: 67.215.65.132

Squid

Instalar squid como paquete
# pkg_add -r squid
# squid -v
Version 2.7.STABLE9

Archivo de configuración squid.conf
Copiar archivo squid.conf
# cp /usr/local/etc/squid/squid.conf.default /usr/local/etc/squid/squid.conf

Filtrando el archivo /usr/local/etc/squid/squid.conf para ver las opciones del archivo de configuración de squid.:
Utilizando las opciones por defecto squid en freebsd funcionará a la primera.

# sed -e '/^[ ]*#/d' -e '/^$/d' /usr/local/etc/squid/squid.conf
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80  # http
acl Safe_ports port 8080  # also http
acl Safe_ports port 21  # ftp
acl Safe_ports port 443  # https
acl Safe_ports port 70  # gopher
acl Safe_ports port 210  # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280  # http-mgmt
acl Safe_ports port 488  # gss-http
acl Safe_ports port 591  # filemaker
acl Safe_ports port 777  # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /var/squid/logs/access.log squid
refresh_pattern ^ftp:  1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern .  0 20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
coredump_dir /var/squid/cache
cache_log /var/squid/logs/cache.log
logfile_rotate 10
minimum_object_size 0 KB
maximum_object_size 1024 MB
request_body_max_size 0
cache_dir ufs /var/squid/cache 5000 16 256
cache_mem 32 MB
visible_hostname freebsdserver

Crear los directorios swap
# squid -z

Desactivar test DNS inicial
# squid -D

Iniciar con el sistema.
Agregar al archivo /etc/rc.conf
squid_enable="YES"

El proxy ha sido configurado como transparent de manera que no hace falta configurar el navegador de los clientes:
Comprobar puertos abiertos:
# sockstat -4
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS     
carlos   sshd       1572  3  tcp4   192.168.3.1:2222      192.168.3.60:41422
root     sshd       1569  3  tcp4   192.168.3.1:2222      192.168.3.60:41422
root     sendmail   1496  3  tcp4   127.0.0.1:25          *:*
root     sshd       1493  4  tcp4   *:2222                *:*
squid    squid      1483  6  udp4   *:14091               *:*
squid    squid      1483  13 tcp4   192.168.3.1:3128      *:*
squid    squid      1483  14 tcp4   192.168.3.1:8080      *:*
squid    squid      1483  15 udp4   *:3130                *:*
dhcpd    dhcpd      1470  7  udp4   *:67                  *:*
nobody   dnsmasq    1368  3  udp4   *:53                  *:*
nobody   dnsmasq    1368  4  tcp4   *:53                  *:*
root     syslogd    1356  7  udp4   *:514                 *:*
root     natd       1318  3  div4   *:8668                *:*

Descargar e instalar parches de seguridad:

# freebsd-update fetch
# freebsd-update install

Si al kernel se ha aplicado algún parche tendrá que reiniciar. A partir de este momento el sistema está parcheado. freebsd-update puede ejecutarse utilizando cron con una entrada en /etc/crontab:

@daily  root  freebsd-update cron

Esta línea hará que una vez al día se ejecutr freebsd-update. El argumento cron pasado a freebsd-update intentará saber si existen actualizaciones. Si hay parches disponibles automáticamente los descargará al disco local sin instalarlos. El usuario root recibirá un mail informándole que puede aplicarlos.

Si algo ha fallado freebsd-update puede dar marcha atrás (roolback) hasta el último conjunto de cambios con la siguiente orden:

# freebsd-update rollback

Instalar portaudit

# pkg_add -r portaudit
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9.1-release/Latest/portaudit.tbz... Done.

===>  To check your installed ports for known vulnerabilities now, do:

      /usr/local/sbin/portaudit -Fda

# portaudit -Fda                     auditfile.tbz                                   0% of   90 kB    0  Bpauditfile.tbz                                 100% of   90 kB  222 kBps
New database installed.
Database created: Sat Nov 16 20:10:00 CET 2013
Affected package: perl-5.14.2_2
Type of problem: perl -- denial of service via algorithmic complexity attack on hashing routines.
Reference: http://portaudit.FreeBSD.org/68c1f75b-8824-11e2-9996-c48508086173.html

Affected package: squid-2.7.9_1
Type of problem: squid -- denial of service.
Reference: http://portaudit.FreeBSD.org/c37de843-488e-11e2-a5c9-0019996bc1f7.html

2 problem(s) in your installed packages found.

You are advised to update or deinstall the affected package(s) immediately.

Para una lista de todas las reglas de funcionamiento de ipfw en secuencia:
# ipfw list




Para una lista de reglas dinámicas, además de reglas estáticas:
 


Unix es genial!.

domingo, 3 de noviembre de 2013

Mover Sistema a disco nuevo

Mover FreeBSD a disco nuevo

Moveri instalación FreeeBSD (9.1) desde un disco duro a otro utilizando las herramientas dump/restore.

Saber más: todo sobre particionado freebsd

Disco duro nuevo (ada1). Disco duro viejo (ada0)

Para cambiar un disco duro por otro nuevo:

Particionado perzonalizado del disco ada0

/dev/ada0a 10GB ufs  /
/dev/ada0b 4GB  none swap
/dev/ada0e 2GB  ufs  /var
/dev/ada0f 30GB ufs /usr

1) Particionado (manual) del nuevo disco (ada1):

/dev/ada1a 10GB ufs  /
/dev/ada1b 4GB  none swap
/dev/ada1e 2GB  ufs  /var
/dev/ada1f 80GB ufs  /usr

2) Hacer una mínima instalación de FreeBSD en el nuevo disco con las mismas particiones del disco antiguo.

3) Asegurarse de que el nuevo disco sea bootable y comprobarlo.

4) Conectar el disco antiguo en el sistema como master y el nuevo como esclavo.

5) Arrancar con el disco duro Master (desde la Bios)

6) Iniciar el sistema en modo single user.

Pulsar la barra espaciadora en la cuenta atrás de 10 segundos y luego pulsar 6 (single user)

Presionar Intro para la shell por defecto.

Desde el símbolo del sistema teclear:

# fsck -p
# mount -u /
# mount -a
# swapon -a
# adjkerntz -i

A continuación, asegúrese de que tiene los archivos de dispositivos creados para montar las particiones del disco esclavo:
# ls /dev
....
/dev/ada1a
/dev/ada1e
/dev/ada1f
.....

Ahora creamos los puntos de montaje para las particiones de la nueva unidad de disco (ada1):

Teclear:
# mkdir /backup
# mkdir /backup/root
# mkdir /backup/usr
# mkdir /backup/var

Por último:

1 - Crear nuevos sistemas de ficheros
2 - Montar las particiones
3 - Volcar los datos del disco duro antiguo (ada0), y restaurarlos en el nuevo disco (ada1)
4 - Desmontar las particiones de la nueva unidad
5 - Permitir softupdates en la nueva unidad

newfs /dev/ada1a
newfs /dev/ada1e
newfs /dev/ada1f

mount /dev/ada1a /backup/root
mount /dev/ada1e /backup/var
mount /dev/ada1f /backup/usr

( dump -0fv - / ) | ( cd /backup/root ; restore -rf - )
( dump -0fv - /var ) | ( cd /backup/var ; restore -rf - )
( dump -0fv - /usr ) | ( cd /backup/usr ; restore -rf - )

umount /backup/root
umount /backup/var
umount /backup/usr

tunefs -n enable /dev/ada1a
tunefs -n enable /dev/ada1e
tunefs -n enable /dev/ada1f

Llegados a este punto, todo lo que tiene que hacer es apagar el sistema, quitar el disco viejo, colocar la nueva unidad como master e iniciar el sistema. Su sistema iniciará ahora su vieja instalación de FreeBSD en su nuevo disco duro.

http://www.freebsd.org/doc/handbook/
http://www.geekvenue.net/chucktips/

Unix es genial!.

martes, 8 de octubre de 2013

Copia de seguridad local remota rsync

rsync es una poderosa utilidad que facilita la transferencia y sincronización de datos entre sistemas locales y remotos. En primer lugar desde la red local a un servidor FreeBSD y en segundo lugar de manera local y remota hacia un servidor Synology.

Conguración de rsync en el servidor FreeBSD:

Entramos al servidor desde la LAN via SSH:
$ ssh -l carlos -p 20243 192.168.3.1
password:
$ su
password:
# ee /usr/local/etc/rsyncd.conf

# Edit this file before running rsync daemon!!


Crear el usuario que será utlizado para realizar las copias de seguridad, y que sólo tendrá permisos de lectura sobre los datos a copiar:

# chmod 640 /usr/local/etc/rsyncd.conf
# pw useradd -n backup -G operator -m -h 0
# mkdir /backup
# chown backup:backup /backup

Falta crear el archivo rsyncd.secrets
# ee /usr/local/etc/rsyncd.secrets
backup:km+RBqGwpT2IMnF1

Guardar y salir

# rsync --daemon
# ps auwx |grep rsync
root   9087   0.0  0.1  12056  1984 ??  Is    8:05PM    0:00.00 /usr/local/bin/rsync --daemon

Solo root podrá leerlo:
# chmod 600 /usr/local/etc/rsyncd.secrets

Comprobar que puedo conectarme al demonio:


El cliente debe tener instalado rsync

--dry-run para visualizar qué se va a copiar antes crear la copia.
--dry-run realizar una prueba sin hacer cambios
--stats dar algunas estadísticas de transferencia de archivos
-z comprimir los datos del archivo durante la transferencia

La opción -a, ejecuta "-rlptgoD":

-r: recursivo
-l: copia los links simbólicos, como eso, links simbólicos
-p: conserva los permisos
-t: conserva los tiempos de modificación
-g: conserva el grupo
-o: conserva el propietario
-D: conserva los ficheros de dispositivo (–devices) así como los ficheros especiales (–specials)

$ rsync -avz --dry-run --stats -e 'ssh -p 20243' /home/carles backup@192.168.3.1:backup

$ rsync -avz --stats -e 'ssh -p 20243' /home/carles backup@192.168.3.1:backup

$ rsync -avz --stats -e 'ssh -p 20243' /mnt/freebdades backup@192.168.3.1:backup

Vamos a crear dos directorios llamados /tmp/source /tmp/destiny, generar archivos ficticios dentro del primero y crear un enlace directo.

mkdir /tmp/source /tmp/destiny
for i in `seq 1 50`; do touch /tmp/foo/file$i; done
ln -s /home/carles/rules_pfsense /tmp/source



El siguiente comando trasfiere archivos en modo "archive", lo que garantiza que los enlaces simbólicos, dispositivos, atributos, permisos, propiedad, etc. son conservados en la transferencia. Debido a que estos indicadores se utilizan con tanta frecuencia, la opción -a eqivalente a -rltpgoD actúa como un alias que los incluye a todos:

# rsync -av --stats /tmp/source/ /tmp/destiny

Hay una diferencia entre incluir una barra inclinada (/) al final de la ruta de origen, y su omisión, el primero trasladará todos los archivos dentro del directorio especificado, mientras que el segundo transferirá el propio directorio con todos los archivos dentro. El flag -v (feedback, verbose) para ver el estado de la transferencia incluido un resumen al final. --stats nos dará más datos estadísticos y -q (silencioso, quiet) suprime toda la salida; útil para los scripts cuando no se requiere retroalimentación.


Transferencia remota rscync

La sintaxis de rsync es similar a la de scp en transferencias remotas donde h = human-readable.

Otras opciones interesantes:

--exclude-from

Excluye archivos de la lista de un archivo, en líneas separadas

--exclude=".*/"

Excluye los archivos ocultos

--update

Actualiza los archivos en el destino sólo si la copia origen ha sido modificada.

Synology debe tener activado rsync, copia de seguridad remota y los puertos abiertos tanto en el router VDSL o ADSL como en el firewall que está antes de la red interna (LAN), así como un dominio DDNS configurado (si carece de una ip estática). Esto ya lo he explicado en entradas anteriores. Synology ofrece 1 dominio DDNS por equipo y para el servidor FreeBSD utilizo dnsdynamic.org:

No conectamos desde otra red para realizar la prueba. El puerto por defecto de SSH (22) no hace falta indicarlo, si es diferente sí.:

Transferir clave SSH

susi@linux-a95o:~> ssh -p 22 admin@naslinuxesgenial.synology.me

The authenticity of host 'naslinuxesgenial.synoogy.me (95.23.148.14)' can't be established.

ECDSA key fingerprint is ea:10:a6:80:97:46:63:20:45:63:3a:28:77:90:cd:19.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'naslinuxesgenial.synology.me,95.23.148.14' (ECDSA) to the list of known hosts.

admin@naslinuxesgenial.synology.me's password:

BusyBox v1.16.1 (2013-04-16 20:15:54 CST) built-in shell (ash)

Enter 'help' for a list of built-in commands.


ds112plus> exit

susi@linux-a95o:~> mkdir /tmp/source /tmp/destiny susi@linux-a95o:~> for i in `seq 1 100`;do touch /tmp/source/file$i;done susi@linux-a95o:~> rsync -av /tmp/source/ /tmp/destiny susi@linux-a95o:~> ln -s /home/susi/Documentos/wlan_13
Enviar datos al servidor remoto synology

susi@linux-a95o:~> rsync -avz --stats /tmp/destiny/ \
admin@naslinuxesgenial.synology.me:/volume1/freebsd_all/source/

admin@naslinuxesgenial.synology.me's password:

sending incremental file list

.
source/

source/file1
source/file10
.
.
source/file95
source/file96
source/file97
source/file98
source/file99
source/wlan_13 -> /home/susi/Documentos/wlan_13

Number of files: 103
Number of files transferred: 100
Total file size: 29 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 837
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 4460
Total bytes received: 1922
sent 4460 bytes  received 1922 bytes  750.82 bytes/sec
total size is 29  speedup is 0.00

susi@linux-a95o:~> rsync -avhz -e 'ssh -p 22' --stats /tmp/destiny/ admin@naslinuxesgenial.synology.me:/volume1/freebsd_all/source/

admin@naslinuxesgenial.synology.me's password:

sending incremental file list
Number of files: 103
Number of files transferred: 0
Total file size: 29 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes

File list size: 837
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 851
Total bytes received: 13

sent 851 bytes  received 13 bytes  101.65 bytes/sec
total size is 29  speedup is 0.03

susi@linux-a95o:~>

Desde un servidor remoto a local

susi@linux-a95o:~> rsync -azv admin@naslinuxesgenial.synology.me:/volume1/freebsd_all/source/ /tmp/destiny/

Si el servidor es FreeBSD el archivo /etc/rc.d/sshd_config debe incluir implicitamente al usuario backup, de lo contrario no será posible proseguir con la copia:

AllowUsers carles@192.168.3.60 backup@192.168.3.60

Desde el cliente con IP 192.168.3.60 (freebsd) y usuario backup (creado con anterioridad) ejecutamos rsync:
$ rsync -avz --stats /home/carles/datancp/* backup@freebsdsvr.linux.bcn:/backup/



Automatizar proceso mediante un script:

#############################
#!/bin/sh

# Simple rsync "driver" script.  (Uses SSH as the transport layer.)
# http://www.scrounge.org/linux/rsync.html

# Modificado y traducido al español por Crowley (http://www.mexicoextremo.com.mx)
# Debe poder trabajar con Linux y otros Unix, incluyendo Mac OS

# Sincroniza dos carpetas con sólo ejecutarlo. Sólo necesita cambiar los
# parámetros para tenerlo funcionando

# Nombre o IP de la máquina de destino
DEST="respaldos.servidor.com"

# Usuario que se conectará al servidor
# Puede ser root, pero no se recomienda
USER="root"

# Directorio de origen
BACKDIR="/carpeta/del/usuario/"

# Directorio de destino (remoto)
DESTDIR="/carpeta/de/destino/"

# Archivo de exclusiones. Contiene comodines de los archivos a excluir
# por ejemplo, *~, *.bak, etc.  Una especificación por línea.
# Se debe crear este archivo y descomentar la línea. Opcional
# EXCLUDES=/root/bin/excludes

# Opciones de prueba.  Despliega las acciones, pero no las realiza.
# OPTS="-n -vv -u -a --rsh=ssh --exclude-from=$EXCLUDES --stats --progress"
# Realiza la copia, mostrando a detalle lo que hace.
OPTS="-v -u -a --rsh=ssh --exclude-from=$EXCLUDES --stats"
# Realiza la copia, pero no manda ningún mensaje.
#OPTS="--archive --update --rsh=ssh --exclude-from=$EXCLUDES --quiet"

# Variables de ambiente, en caso de necesitarlas cron
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

# Se ejecuta sólo si el $DEST responde.
VAR=`ping -s 1 -c 1 $DEST > /dev/null; echo $?`
if [ $VAR -eq 0 ]; then

    rsync $OPTS $BACKDIR $USER@$DEST:$DESTDIR
else
    echo "No puedo conectarme a $DEST."
fi
#############################
http://www.horus.es/ss/blog/copias-de-seguridad-con-rsync/
https://rsync.samba.org/ftp/rsync/rsyncd.conf.html
http://kb.liquidweb.com/
http://www.freebsddiary.org/rsync.


Unix es genial!.