sábado, 24 de julio de 2010

FreeBSD 8: Apache Jail

Ahora vamos a meter un servidor apache en una jail, asi dejamos nuestro src.conf:

WITHOUT_ACCT="yes"
WITHOUT_ACPI="yes"
WITHOUT_AMD="yes"
WITHOUT_APM="yes"
WITHOUT_ASSERT_DEBUG="yes"
WITHOUT_ATM="yes"
WITHOUT_AUDIT="yes"
WITHOUT_AUTHPF="yes"
WITHOUT_BIND="yes"
WITHOUT_BLUETOOTH="yes"
WITHOUT_BOOT="yes"
WITHOUT_CALENDAR="yes"
WITHOUT_CDDL="yes"
WITHOUT_CTM="yes"
WITHOUT_CVS="yes"
WITHOUT_DICT="yes"
WITHOUT_EXAMPLES="yes"
WITHOUT_FLOPPY="yes"
WITHOUT_FORTH="yes"
WITHOUT_FREEBSD_UPDATE="yes"
WITHOUT_GAMES="yes"
WITHOUT_GPIB="yes"
WITHOUT_GROFF="yes"
WITHOUT_HTML="yes"
WITHOUT_INET6="yes"
WITHOUT_INFO="yes"
WITHOUT_IPFILTER="yes"
WITHOUT_IPFW="yes"
WITHOUT_IPX="yes"
WITHOUT_JAIL="yes"
WITHOUT_KVM="yes"
WITHOUT_LEGACY_CONSOLE="yes"
WITHOUT_LPR="yes"
WITHOUT_MAIL="yes"
WITHOUT_MAN="yes"
WITHOUT_NCP="yes"
WITHOUT_NETGRAPH="yes"
WITHOUT_NLS="yes"
WITHOUT_NLS_CATALOGS="yes"
WITHOUT_NC_CACHING="yes"
WITHOUT_NTP="yes"
WITHOUT_PF="yes"
WITHOUT_PMC="yes"
WITHOUT_PPP="yes"
WITHOUT_PROFILE="yes"
WITHOUT_QUOTAS="yes"
WITHOUT_RCMDS="yes"
WITHOUT_RCS="yes"
WITHOUT_RESCUE="yes"
WITHOUT_ROUTED="yes"
WITHOUT_SHAREDOCS="yes"
WITHOUT_SSP="yes"
WITHOUT_SYSCONS="yes"
WITHOUT_SYSINSTALL="yes"
WITHOUT_USB="yes"
WITHOUT_WIRELESS="yes"
WITHOUT_WPA_SUPPLICANT_EAPOL="yes"

Algo que me gustaria marcar es que estamos dejando a esta jail NIS y KERBEROS por que vamos a controlar todo los usuarios via LDAP, de lo contrario para puro apache los dejaria dentro del archivo:

WITHOUT_NIS
WITHOUT_KERBEROS

Bien ya seguimos todos los pasos para configurar mi jail, vamos arrancandola, para ello vamos configurando rc.conf del host de jails, quedaria asi:

jail_enable="YES" # Set to NO to disable starting of any jails
jail_list="apache" # Space separated list of names of jails
jail_set_hostname_allow="NO" # Allow root user in a jail to change its hostname
jail_socket_unixiproute_only="YES" # Route only TCP/IP within a jail
jail_sysvipc_allow="NO" # Allow SystemV IPC use from within a jail

Ahora vamos a la seccion de la jail de nombre apache:

##############################################################
###################### apache ##############################
jail_apache_rootdir="/jails/apache" # Jail's root directory
jail_apache_hostname="apache. mi. dominio. mx" # Jail's hostname
jail_apache_interface="xl0" # Jail's interface variable to create IP ali
jail_apache_ip="192.168.40.6" # Jail's primary IPv4 and IPv6 address
jail_apache_exec_start="/bin/sh /etc/rc" # command to execute in jail for starting
jail_apache_exec_stop="/bin/sh /etc/rc.shutdown" # command to execute in jail for stopping
jail_apache_devfs_enable="YES" # mount devfs in the jail

Arrancamos las jail:

/etc/rc.d/jail/ start apache

Bien aqui ya tenemos nuestra jail en operacion si es que no tuvieron problemas. Ahora viene la parte de la administracion, tenemos que 1ro que nada configurar esto dentro de la jail:
  • rc.conf
  • resolv.conf
  • ssh
  • ports
Para ello la unica manera de conectarse a la jail es atraves del mismo host, para ello tenemos que saber que # de jail es, para ello ejecutamos el comando jls y nos da:

# jls
JID IP Address Hostname Path
15 192.168.40.6 apache-mi-dominio-com-mx /jails/apache

Vamos accesando:

# jexec 15 csh
csh: Cannot open /etc/termcap.
csh: using dumb terminal settings.
apache#

Como podran ver nos marca un error, revisamos ese archivo podremos ver que esta vacio, pero tenemos la ventaja que lo podemos jalar del host de las jails, para ello nos salimos de la jail para regresarnos y hacer la copia:

Algo que tenemos que notar es que /etc/termcap es un enlace a /usr/share/misc/termcap, asi que vamos haciendo lo siguiente dentro del host:

cp /usr/share/misc/termcap /jails/apache/usr/share/misc/

nos retornamos a el jail:

jexec 15 csh

y van a ver que ya no marca el error, correcto?

Ahora ya entramos a nuestra jail, asi es hora de seguir la operacion.

rc.conf

Este archivo no existe asi que tenemos que crearlo y queda asi el mio:

##############################################################
### Important initial Boot-time options ####################
##############################################################
root_rw_mount="YES" # Set to NO to inhibit remounting root read-write.
fsck_y_enable="YES" # Set to YES to do fsck -y if the initial preen fails.
fsck_y_flags="" # Additional flags for fsck -y
background_fsck="NO" # Attempt to run fsck in the background where possible.
##############################################################
### Network configuration sub-section ######################
##############################################################
### Basic network and firewall/security options: ###
log_in_vain="0" # >=1 to log connects to ports w/o listeners.
tcp_keepalive="YES" # Enable stale TCP connection timeout (or NO).
tcp_drop_synfin="YES" # Set to YES to drop TCP packets with SYN+FIN
# NOTE: this violates the TCP specification
icmp_drop_redirect="YES" # Set to YES to ignore ICMP REDIRECT packets
icmp_log_redirect="NO" # Set to YES to log ICMP REDIRECT packets
network_interfaces="xl0" # List of network interfaces (or "auto").
### Network daemon (miscellaneous) ###
syslogd_enable="YES" # Run syslog daemon (or NO).
syslogd_program="/usr/sbin/syslogd" # path to syslogd, if you want a different o
syslogd_flags="-ss" # Flags to syslogd (if enabled).

sshd_enable="YES" # Enable sshd
sshd_program="/usr/sbin/sshd" # path to sshd, if you want a different one.
sshd_flags="" # Additional flags for sshd.

### Network routing options: ###
defaultrouter="192.168.40.1" # Set to default gateway (or NO).

### IPv6 options: ###
ipv6_enable="NO" # Set to YES to set up for IPv6.

##############################################################
### System console options #################################
##############################################################
keyboard="" # keyboard device to use (default /dev/kbd0).
keyrate="fast" # keyboard rate to: slow, normal, fast (or NO).
cursor="blink" # cursor type {normal|blink|destructive} (or NO).
scrnmap="NO" # screen map in /usr/share/syscons/scrnmaps/* (or NO).
blanktime="NO" # blank time (in seconds) or "NO" to turn it off.
saver="NO" # screen saver: Uses /boot/kernel/${saver}_saver.ko
moused_nondefault_enable="NO" # Treat non-default mice as enabled unless
moused_enable="NO" # Run the mouse daemon.
mousechar_start="NO" # if 0xd0-0xd3 default range is occupied in your

##############################################################
### Mail Transfer Agent (MTA) options ######################
##############################################################
# Settings for /etc/rc.sendmail and /etc/rc.d/sendmail:
sendmail_enable="NONE" # Run the sendmail inbound daemon (YES/NO).

##############################################################
### Miscellaneous administrative options ###################
##############################################################
cron_enable="YES" # Run the periodic job daemon.
cron_program="/usr/sbin/cron" # Which cron executable to run (if enabled).
cron_dst="YES" # Handle DST transitions intelligently (YES/NO)
cron_flags="" # Which options to pass to the cron daemon.
clear_tmp_enable="YES" # Clear /tmp at startup.
kern_securelevel_enable="NO" # kernel security level (see security(7))
kern_securelevel="-1" # range: -1..3 ; `-1' is the most insecure
update_motd="NO" # update version info in /etc/motd (or NO)
dmesg_enable="NO" # Save dmesg(8) to /var/run/dmesg.boot
newsyslog_enable="YES" # Run newsyslog at startup.
newsyslog_flags="-CN" # Newsyslog flags to create marked files
mixer_enable="NO" # Run the sound mixer.


Ahora seguimos con resolv.conf.

resolv.conf

Como tenemos un dns operando los damos de alta y queda asi:

domain mi-dominio-com-mx
nameserver 192.168.40.2

ssh
Parte importante de la operacion, asi no dependeremos del host para administrar nuestra jail, vamos configurando ssh con llave.

Para empezar vamos configurando a sshd_config quedando asi:

# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $
# $FreeBSD: src/crypto/openssh/sshd_config,v 1.49.2.1.2.1 2009/10/25 01:10:29 kensmith Exp $

# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.

# Note that some of FreeBSD's defaults differ from OpenBSD's, and
# FreeBSD has a few additional options.

#VersionAddendum FreeBSD-20090522

Port 22
#Protocol 2
#AddressFamily any
#ListenAddress 0.0.0.0
ListenAddress 192.168.40.6

# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#LogLevel INFO
# Authentication:

#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# Change to yes to enable built-in password authentication.
PasswordAuthentication no
PermitEmptyPasswords no

# Change to no to disable PAM authentication
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

# Set this to 'no' to disable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM no

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10
#PermitTunnel no
#ChrootDirectory none

# no default banner path
#Banner none

# override default of no subsystems
Subsystem sftp /usr/libexec/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand cvs server

AllowUsers root

Ahora antes de seguir vamos dandole password a root. Bien como ssh solo permite accesar via "key" o llave publica y yo ya tengo la mia, para esto tenemos que hacer lo siguiente, crear las llaves del jail por si llegaramos a usarlo, para ello vamos ejecutando el siguiente comando:

# ssh-keygen
Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
b8:54:2e:7c:2f:90:b0:54:0f:a5:5d:73:5b:58:4c:e8 root@apache.assiin.com.mx
The key's randomart image is:
+--[ RSA 2048]----+
| o.. o .*+ |
| . = . ooo. |
| o . + .. |
| . + = E |
| . B S |
| . = . |
| . . . |
| . |
| |
+-----------------+

Dar enter hasta que regresemos a el shell, nos vamos a el nuevo folder /root/.ssh/
y dentro creamos el archivo de nombre "authorized_keys" ahi dentro es donde vamos a grabar las llaves publicas que van a poder accesar a este jail.

Una vez hecho esto ya podemos arrancar nuestro ssh y probar de alguna de las llaves.

Bien ya logramos entrar a nuestra jail via ssh.

Ports

Ahora viene la parte donde tenemos que de alguna manera jalar de otro sistema los ports, ya que nuestra jail esta configurada para no hacer uso de sysinstall, lo bueno que los ports es un solo directorio que lo podemos comprimir de otro host o jail y jalarlo a este jail.

Es lo que vamos hacer, tengo otro jail, ya di de alta su llave para accesar via ssh. Comprimo el directorio ports y se lo mando a mi jail:

#cd /usr
#tar -czf ports.tar.gz ports/
#scp ports.tar.gz root@IP-DE-MI-JAIL:/usr

Dentro del jail descomprimo el archivo y tengo listo mis ports para ser usandos.

#cd /usr
#tar -xzf ports.tar.gz

Ahora si ya puedo empezar a instalar los ports que necesito, e 1ro es:

cvsup-without-gui

#cd /usr/ports/net/cvsup-wtihout-gui
#maks install clean

make: no system rules (sys.mk).

1er error, lo mismo que paso con termcap, debemos jalar los archivos que nos van a empezar marcar errores por no tenerlos disponibles. Vamos empezando por este "sys.mk". Buscando en otros jails encontramos este archivo en /usr/share/mk/ y dentro de mi jail esta vacio, asi que jalamos mejor todo ese folder, asi como le hicimos con los ports.

Nos vamos a un sistema donde tengamos este folder con todo su contenido y hacemos el mismo proceso.

#cd /usr/share/
#tar -czf mk.tar.gz
#scp mk.tar.gz root@IP-DE-MI-JAIL:/usr/share

Dentro de la jail:

#cd /usr/share
#tar -xzf mk.tar.gz

Listo ahora si podemos instalar el port, solo poner atencion por si falla algo, lo mas seguro que sea por algunos programitas que no esten, pero recordar que los podemos jalar de otros sistemas.

Aqui va otro:

===> Building for libtool-2.2.6b
/bin/sh /usr/ports/devel/libtool22/work/libtool-2.2.6b/libltdl/config/install-sh -d . libltdl/
cp ./libltdl/argz_.h libltdl/argz.h-t
mv libltdl/argz.h-t libltdl/argz.h
make all-recursive
test -f doc/.dirstamp || make doc/.dirstamp
restore=: && backupdir=".am$$" && am__cwd=`pwd` && CDPATH="${ZSH_VERSION+.}:" && cd . && rm -rf $backupdir && mkdir $backupdir && if (makeinfo --no-split --version) >/dev/null 2>&1; then for f in ./doc/libtool.info ./doc/libtool.info-[0-9] ./doc/libtool.info-[0-9][0-9] ./doc/libtool.i[0-9] ./doc/libtool.i[0-9][0-9]; do if test -f $f; then mv $f $backupdir; restore=mv; else :; fi; done; else :; fi && cd "$am__cwd"; if makeinfo --no-split -I doc -I ./doc -o ./doc/libtool.info ./doc/libtool.texi; then rc=0; CDPATH="${ZSH_VERSION+.}:" && cd .; else rc=$?; CDPATH="${ZSH_VERSION+.}:" && cd . && $restore $backupdir/* `echo "././doc/libtool.info" | sed 's|[^/]*$||'`; fi; rm -rf $backupdir; exit $rc
makeinfo: not found
*** Error code 127

Vamos a jalarlo de otro:

#scp /usr/bin/makeinfo root@192.168.40.6:/usr/bin/
makeinfo 100% 176KB 176.1KB/s 00:00

Regresamos a ver que mas nos falta.

Otro:

install-info --quiet /usr/local/info/libtool.info /usr/local/info/dir
install-info:No such file or directory
*** Error code 1

#scp /usr/bin/install-info root@192.168.40.6:/usr/bin/
install-info 100% 19KB 18.7KB/s 00:00

Aqui aparecio este otro:

R%/usr/local/lib%' -e 's%LIBEXECDIR%/usr/local/libexec%' -e 's%MODULEDIR%/usr/local/libexec/openldap%' -e 's%RELEASEDATE%2010/06/30%' ./$page | (cd .; soelim -) > $page.tmp; done
soelim: not found

# scp /usr/bin/soelim root@192.168.40.6:/usr/bin/
soelim 100% 20KB 19.5KB/s 00:00

Otro mas, estos van apareciendo conforme vamos instalando paquetes:

gmake[1]: Leaving directory `/usr/ports/security/pam_ldap/work/pam_ldap-185'
/usr/bin/fmt: not found
*** Error code 127

Lo copeamos de otro y seguimos.

Al parecer eran todas las pequenas utilerias que necesitabamos, nuestros ports se han instalado sin problemas.

Apache

Sseguimos con el programa principal, vamos a usar la version ./www/apache22, tiene muchos modulos por default ya configurados para trabajar, no hay problema conforme vayamos avazando vamos investigando cada uno de los modulos y podremos ir apagando uno a uno.

apache va a requerir de perl, python, apr. Despues vamos a meter php ya que vamos a tener una paginas dinamicas en el servidor.

Ademas de ellos vamos a alojar squirrelmail ya que tambien vamos a tener un servidor de correo pero este estara en otro jail.

Y todo via ldap, que el servidor ldap estara alojado en el servidor de correo asi vamos armando nuestro rompecabezas.

Bien solo como nota, si vamos a trabajar con LDAP, debemos recordar que cuando aparezca las opciones para apr seleccionar LDAP de lo contrario apache falla en la instalacion por este pequeno programa.


No hay comentarios: