2009-01-02

Servidor Linux Casero

Este documento es una guia de referencia para acordarme de todas aquellas configuraciones que voy modificando con el tiempo a mi servidor ( ahora mismo un Fedora Core 5 en un servidor Primergy P3 bastante antiguo , pero que para el caso, va de perlas ).

NO es una guia para poner un servidor en produccion ni mucho menos ya que de por si el esquema de servicios no es el adecuado. Este servidor me sirve de pruebas en diferentes campos , este escrito es una recopilación de notas mentales.



La idea es tener un servidor me sirva para :

** Recoger y enviar el correo ( sendmail + fetchmail ) :
de todas nuestras cuentas de correo , y pasarselas de manera
segura a nuestro cliente ( por si estamos en una red NO segura,
que no tengamos que enviar todas las pass, etc, en texto plano ).

La idea es que los usuarios tengan en sus portatiles una unica
cuenta de correo configurada ( que apunte a mi servidor ) y que
sea el servidor intermediario, que se encarge de recoger y repartir
el correo.

Nos comunicaremos con nuestro servidor usando pop3 + ssl.

Descarga del Sistema :

Descargar la iso del sistema en :

http://fedora.redhat.com/download/mirrors.html)
( preferiblemente la versión dvd ).

Comprobar que la iso es original y no se ha modificado verificando
la firma :

Desde Windows :

  • http://www.toast442.org/md5/
  • http://www.slavasoft.com/hashcalc/

Desde linux :

md5sum archivo
sha1sum archivo

Y comprobar que la salida corresponde con la suma SHA1 indicada en el archivo .
SHA1 que estara en el mismo sitio de donde nos bajamos la iso.

Grabamos la iso al dvd ( nero para windows, k3b par linux,etc.. )

/** Esta parte la voy a obviar ** /


Primera Instalación del sistema :

Una vez arrancamos la instalación ( Primer Enter ) se nos pedira comprobar
el dvd de instalación , yo personalmente lo evitaria si es que no somos unos
manazas y ya hemos rayado el dvd que acabamos de grabar ( a parte, se puede dar
el caso de que te diga que el dvd esta bien, y petar al fina de la instalación
por no poder leer el dvd como ya me paso ).

A grandes rasgos la instalación de Fedora core se resume en estos pasos :

Enter para nueva instalación
Elegir idioma instalación y teclado
Escoger particiones en funcion del tamaño ( separar /, /boot, /etc ,etc )
Activar tarjetas de red y configurar ip ( manual o con dhcp )
Configurar Reloj del sistema
Configurar Password de root
Seleccionar paquetes a instalar :

Una vez hemos llegado a la sección de “paquetes a instalar” , con el sistema base
tendriamos suficiente para empezar, aunque por comodidad y para ahorrarnos un par
de comandos despues , seria recomendable instalar :

Editors - Text-based Internet - Development Libraries - Development Tools - DNS Name Server,
Mail Server - MySQL Database - Server Configuration Tools - Web Server - Administration Tools,
Base - Java - System Tools

Una vez escogidos los paquetes, el instalador formateara las particiones que
le hemos indicado y empezarar a escribir las aplicaciones y el sistema al disco duro
( entre 30 y 45 minutos ).

/** Fin de Esta parte la voy a obviar ** /


Particiones recomendadas ( disco scsi 36 Gb + 512Mb Memoria RAM ) :

/ 2 GB La particion raíz , contendra los dirs :

/sbin ( ocupa aprx 25 Mb en h0mer )
/bin ( ocupa unas 8 Mb en h0mer )
/dev ( ocupa 250 Kb en h0mer )
/lib ( ocupa 1.2 Gb en h0mer )
/opt ( ocupa 85 Mb en h0mer )
/proc ( ocupa 300 Kb en h0mer )
/root ( ocupa 3 Mb en h0mer )
/sys ( ocupa 110 Mb en h0mer )

/boot 40 MB ( /boot de h0mer ( contiene 5 kernels ) 22 Mb )
/etc 150 MB ( el /etc de h0mer esta a 90 Mb con todo instalado )
/usr 7Gb ( /usr de h0mer es de : 5.7 Gb !!! con todo instalado y configurado )
/home 6 GB ( /usr de h0mer : 175 Mb , 250 Mb x numero de usuarios = tamaño /home )
/var 1 GB ( /var de h0mer está a 260 MB , con rotacion diaria de logs )
/var/lib 3 GB ( usado por MySQL, Squid , h0mer está a 60 Mb aquí ).
/tmp 600 MB ( /tmp de h0mer está a 500 KB :P )
/chroot 5 GB ( para meter programas de chroot , h0mer esta a 21 Mb ).



1000 MB La particion swap ( memoria virtual )

En primer lugar vamos a modificar un archivo que nos va a ahorrar el consumo de memoria swap, que por defecto en los kernels 2.6.XX esta a un 60%, en cualquier maquina que sea minimamente potente y con unos 512 megas de RAM física bastaría con poner el swapiness a un 10%, la RAM física es mucho mas rápida y en mi caso por ejemplo con 712 megas de RAM casi nunca me va a tocar la swap, para ver cuanta swap nos coje por defecto lanzamos este comando:

#cat /proc/sys/vm/swappiness

gedit o nano /etc/sysctl.conf

y ponemos al final vm.swappiness=10 ...
tb es interesante modificar el /etc/fstab y cambiar el valor defaults de swap a sw,pri=500

Comprobamos la prioridad con :

/sbin/swapon -s ( por defecto salia -1 , lo que es contradproducente para el sistema , ahora 500 )

Configuración del sistema :

Empezamos instalando algunas utilidades que usaremos durante la configuración :

yum install fetchmail wget bzip2 unzip zip nmap openssl lynx fileutils ncftp

a partir de aquí empieza la configuración y el tunning del sistema ...

Instalación y Configuración Servidor de Bases de Datos MySql :

Instalaremos mysql que nos servira por una lado como base de datos de todos los logs que produzca snort ( a los que accederemos con el front-end en php llamado base ).
A parte sera interesante montar algun cms con soporte con mysql .

yum install mysql mysql-devel mysql-server
chkconfig --levels 235 mysqld on
/etc/init.d/mysqld start

Una vez aquí

vi /etc/my.cnf ( gedit /etc/my.cnf como root si estamos en el entorno gráfico )

------------------------------------------------/etc/my.cnf--------------------------------------------------------
#Directorios con los datos + socket
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
skip-innodb
#No es cuchar en ningun puerto
skip-networking
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


Primera password para root ( el primer login es en blanco ):

mysql -u root mysql
mysql> UPDATE user SET Password=password('nuevapass') WHERE user='root';
Posteriores conexiones :
mysqladmin -u root password yourrootsqlpassword
mysqladmin -h localhost -u root password yourrootsqlpassword


INstalar Apache2 con soporte PHP5 :

Procederemos a instalar el servidor http asi como algunos modulos necesarios y/o interesantes
( mod_php. mod_perl, mod_security ,etc.. ) :

yum install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml
php-xmlrpc curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel

vi /etc/httpd/conf/httpd.conf ( gedit /etc/httpd/conf/httpd.conf desde entorno gráfico – root )

DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl
chkconfig --levels 235 httpd on
/etc/init.d/httpd start


Instalación de algunos modulos de perl :


yum install perl-HTML-Parser perl-DBI perl-Net-DNS perl-Digest-SHA1


Poner nombre al server ( si no lo hemos hecho ya )

echo server1.example.com > /etc/hostname
/bin/hostname -F /etc/hostname

Apt-get :

yum install apt

/etc/apt/sources.list

rpm http://ayo.freshrpms.net fedora/linux/5/i386 core updates freshrpms extras
rpm http://ayo.freshrpms.net fedora/linux/5/i386 tupdates
rpm http://ayo.freshrpms.net fedora/linux/1/i386 core updates freshrpms
rpm --import /usr/share/rhn/RPM-GPG-KEY*

yum install fetchmail wget bzip2 unzip zip nmap openssl lynx fileutils ncftp




Asunto Snort + Base :


yum –y install mysql mysql-bench mysql-server mysql-devel mysqlclient10 php-mysql
httpd gcc pcre-devel php-gd gd mod_ssl glib2-devel gcc-c++

cd /root
mkdir snortinstall
wget http://www.snort.org/dl/current/snort-2.6.0.tar.gz
tar -xvzf snort-2.6.0.tar.gz
cd snort-2.6.0
./configure --with-mysql --enable-dynamicplugin
make
make install

groupadd snort
useradd -g snort snort –s /sbin/nologin
mkdir /etc/snort
mkdir /etc/snort/rules
mkdir /var/log/snort
cd etc/ (make not this is not /etc. it is the etc dir under the snort source code)
cp * /etc/snort

wget http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/snortrules-pr-
2.4.tar.gz

Then tar –xvzf snortrules-pr-2.4.tar.gz
cd to the rules dir and do the following command
cp * /etc/snort/rules

gedit /etc/snort.conf

output database: log, mysql, user=snort password=
dbname=snort host=localhost


mysql -u root -p < ~/snortinstall/snort-2.6.0/schemas/create_mysql snort Enter password: the mysql root password mysql -p >Enter password:
mysql> SHOW DATABASES;
(You should see the following)
+------------+
| Database
+------------+
| mysql
| Snort
| test
+------------+


pear install Image_Graph-alpha Image_Canvas-alpha Image_Color
Numbers_Roman

Download ADODB
wget http://easynews.dl.sourceforge.net/sourceforge/adodb/adodb480.tgz

Download BASE

wget http://easynews.dl.sourceforge.net/sourceforge/secureideas/base-1.2.6.tar.gz

Hand configure your firewall:
cd /etc/sysconfig/
edit the iptables file
add the line “-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j
ACCEPT” (without the quotes and right below the statement for port 22)
And delete the lines:
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
Then change the line:
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
To :
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j DROP

service iptables restart

cd /var/www/
tar -xvzf /root/snortinstall/adodb480.tgz

cd /var/www/html
tar –xvzf /root/snortinstall/base-1.2.6.tar.gz
mv base-1.2.6/ base/ (this renames the base-1.2.5 directory to just “base”)

Copy the base_conf.php.dist to base_conf.php

Fiechero “base_conf.php” :

$BASE_urlpath = "/base";

$DBlib_path = "/var/www/adodb/ ";
$DBtype = "mysql";

$alert_dbname = "snort";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "snort";
$alert_password = "password_from_snort_conf";

/* Archive DB connection parameters */
$archive_exists = 0; # Set this to 1 if you have an archive DB

and answer the questions.
https://ip_address/base

( pendiente instalar y configurar las rules del proyecto bleedingedge )

Control de accesos en Apache :

mkdir /var/www/passwords
/usr/bin/htpasswd -c /var/www/passwords/passwords base
gedit /etc/httpd/conf/httpd.conf


...

Options FollowSymLinks
AllowOverride None



AuthType Basic
AuthName "Base"
AuthUserFile /var/www/passwords/passwords
Require user USUARIO

...

Comprobar configuracion de snort :

snort –c /etc/snort/snort.conf

Kernel shit :

The Kernel Headers are available through the kernel-devel RPM.

The kernel headers are necessary if you require to install a driver (for
example: Nvidia, ndiswrapper, Cisco VPN, etc.). If a driver requires
kernel sources, it may be sufficient to install only the kernel headers
Desde las versiones 4 Fedora ya no rae las fuentes del kernel por defecto, para instalar todo lo necesario para trabajar con el kernel :

# uname -rm
2.6.15-1.2054_FC5 i686 ( asi sabemos la version del kernel )
yum install kernel-devel-2.6.15-1.2054_FC5.i686.rpm

Kernel sources :
1. Download the desired kernel source
Desde YUM
Select: kernel-2.6.15-1.2054_FC5.src.rpm 14-Mar-2006 18:28 46M
yum install yum-utils
Desde Http : ( wget )
http://download.fedora.redhat.com/pub/fedora/linux/core/5/source/SRPMS/
Una vez obtenido :
rpm -ivh kernel-2.6.15-1.1955_FC5.src.rpm
Esto nos dejara las fuentes en /usr/src/redhat/BUILD/kernel-2.6.15/
Kernel Base + Parches Fedora
linux-2.6.15.ARCH/
Kernel Base “kernel.org” )





Fedota Tips :

Por si algunos programas necesitan tirar de las librerias de gcc anteiores a la 4.1 ( la que viene integrada con fedora ).

yum install compat-libstdc++-33 compat-libstdc++-296

Modificar modprobe.conf ( este tip acelera transferencias y navegacion , en algunos casos a base de decremetar el tiempo de acceso a dns)

editar fichero /etc/modprobe.conf y añadir :

alias net-pf-10 off
alias ipv6 off



Mostrar que servicio/proceso/puerto/user esta en uso ( conexiones ) :

/usr/bin/lsof -i ( netstat -pa tambien sirve , pero mas cutre )


Compresion y Descompresion :

tar -cvf archivoNUEVO.tar /este /aquel archivo_seleccionado ( Crea Tar )

tar tvf nombre_fichero.tar ( Ver contenido fichero )

tar xvf nombre_fichero.tar ( Extraer contenido )

tar czvf fichero.tar.gz nombre_ficheros_seleccionados ( Crea .tar.gz )

tar tzvf fichero.tar.gz ( Muestra contenido tar.gz )

tar xzvf fichero.tar.gz ( Extrae contenido tar.gz )

bzip2 nombre_fichero ( Comprime .bz2 )

bunzip2 nombre_fichero.bz2 ( Extrae contenido )

tar cvfj nombre_fichero.tbz2 ( crear un fichero tbz2 )

tar xvfj nombre_fichero.tbz2 ( descomprimir un fichero tbz2 )

tar tvfj nombre_fichero.tbz2 ( ver contenido de ficheros tbz2 )

Si tar ( algunas versiones/sistemas ) no soporta gzip u bzip :

para gzip: gzip -d -c fichero.tgz |tar xvf -
para bzip2: bzip2 -d -c fichero.tbz2 | tar xvf -



Configuración Servidor HTTPS Apache :

Para el servidor apache , haremos un balance entre seguridad y funcionalidad ,ya que es imposible asegurarlo al máximo sin perder algo de funcionalidad ( véase el caso del php , sus restricciones y depende que aplicaciones php ).


Instalación Servidor de Mail Dovecot :

Este servicio será el encargado de entregarnos el correo recogido anteriormente con fetchmail , lo configuraremos de tal manera que use pop3 con ssl y que escuche en 127.0.0.1 ( nos conectaremos mediante el tunel ssh ).

Fichero /etc/dovecot.conf


## Dovecot configuration file

protocols = pop3s
listen = 127.0.0.1
ssl_listen = 127.0.0.1
ssl_disable = no
ssl_cert_file = /etc/pki/dovecot/certs/dovecot.crt
ssl_key_file = /etc/pki/dovecot/private/dovecot.key
disable_plaintext_auth = yes
default_mail_env = /var/spool/mail/USUARIO



Instalación Servidor de Recogida de Mail Fetchmail :

Fetchmail será el encargado de recoger el correo de las cuentas que le configuremos y entregarlos al destinatario local ( nuestro usuario en el servidor ). Bastará instalarlo con :

yum install fetchmail


Crearemos con nuestro usuario el fichero .fetchmailrc ( touch .fetchmailrc ) en el home del luser :


poll nombre_cuenta_1
proto pop3
via pop.servicor.correo
user "cuenta@usuario.com"
pass "el_pass_texto_del_server_pop_en_texto_plano"
is usuario_sistema_local
fetchall
poll nombre_cuenta_2
proto pop3
via pop.otro_servicor.correo
user "cuenta@usuario.com"
pass "el_pass_texto_del_server_pop_en_texto_plano"
is usuario_sistema_local
fetchall

y asi por cada cuenta que queramos que fetchmail gestione. La acción fetchall al final de cada cuenta es para que fetchmail recoja todos los correos del servidor indicado. Lo malo de fetchmail es que guarda las contraseñas de cada cuenta en el fichero .fetcmailrc en texto plano.



Instalación Servidor VNC :

Procederemos ala instalación con el comando :

yum install vncserver

editamos el fichero /etc/sysconfig/vncservers :

-------
# The VNCSERVERS variable is a list of display:user pairs.
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted! For a secure way of using VNC, see
# ...

VNCSERVERS="1:nombre_usuario_local"
VNCSERVERARGS[1]="-geometry 1024x768 -depth 16 -nolisten tcp -nohttpd -localhost"
----

El parametro --nolisten tcp impedira la conexión mediante tcp, mientras que nohttpd prohibira la entrada a clientes basados en web.

0 comentarios:

Publicar un comentario