Usando Linux para muchas cosas y disfrutando de videojuegos, en dispositivos moviles, consolas y pc. Using Linux for many things and enjoying video games, mobile devices, consoles and pc

FreeIPA en tu oficina

Algo común es tener varias contraseñas para varios servicios y a la hora de cambiarlas o agregar o sacar a un usuario, es un dolor de cabeza. Por eso existe LDAP pero si vamos un poco mas allá, tenemos a Kerberos, dándole mas seguridad al proceso de autenticación. NTP y DNS aseguran que todos tengan la misma información.
Hoy veremos FreeIPA, una solución muy asequible que poco a poco a ido ganando madurez.
Debido a que es un proyecto para RedHat probado en Fedora, haremos nuestra instalación en un Fedora 16 con lo mínimo instalado y actualizado al día.

-Requerimientos:
Server con ip publica
Zona DNS que apunte al hostname del server, no funcionara con una ip privada o con localhost. Si tiene dudas de como generar la zona DNS al instalar puede usar --setup-dns para que se genere una que pueda colocar en su DNS

-Abrimos los puertos necesitados en iptables.

vi /etc/sysconfig/iptables

#http/https
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
#LDAP/LDAPS
-A INPUT -m state --state NEW -m tcp -p tcp --dport 389 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 636 -j ACCEPT
#Kerberos
-A INPUT -m state --state NEW -m tcp -p tcp --dport 88 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 88 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 464 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 464 -j ACCEPT
#DNS
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
# NTP
-A INPUT -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT
# Dogtag
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9180 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9443 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9444 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9445 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9446 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9701 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7389 -j ACCEPT

-Salimos salvando y reiniciamos el servicio

service iptables restart

-Verificamos ports
iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ldap
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ldaps
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:kerberos
ACCEPT     udp  --  anywhere             anywhere             state NEW udp dpt:kerberos
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:kpasswd
ACCEPT     udp  --  anywhere             anywhere             state NEW udp dpt:kpasswd
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             state NEW udp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             state NEW udp dpt:ntp
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:9180
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:tungsten-https
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:wso2esb-console
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:9445
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:9446
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:9701
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:7389
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere           
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

-Verificamos nuestro file hosts, ejemplo de uno bien configurado. OJO, cambiar la ip privada por la publica que usen.

cat /etc/hosts

127.0.0.1    localhost.localdomain    localhost
::1        localhost6.localdomain6    localhost6
192.168.1.1    ipatest.example.com    ipatest

-Desactivamos NetworkManager y activamos network

chkconfig NetworkManager off
service NetworkManager stop
chkconfig NetworkManagerDispatcher off
service NetworkManagerDispatcher stop
chkconfig network on
service network start

-Reiniciamos el server
reboot

-Instalamos, hora de ir por un cafe ;-)
yum install freeipa-server --enablerepo=updates-testing

-En caso de presentarse un error con libipa_hbac eliminarlo para que instale otra version

rpm -e libipa_hbac-1.8.2-10.fc16.i686 --nodeps

-Comenzamos a configurar. Para aceptar los defaults damos ENTER

ipa-server-install

Si todo marcha bien, después de un largo proceso terminara creándonos una zona de ejemplo para DNS en /tmp y diciéndonos que ports debemos abrir en el firewall.
Un motivo común de error es no tener el server en una ip publica con un domain valido en nuestros DNS y la ip con una reverse zone. Para eso agregamos el hostname a una zona que ya tengamos con nuestro domain y verificamos que tengamos una reverse zone para la ip publica que estamos usando. Si no tenemos esto, el script simplemente abortara. Lo podremos ejecutar nuevamente cuando tengamos esto listo.
Agregamos a nuestra zona DNS los parámetros que nos da en la zona de ejemplo:

ipatest            IN A            192.168.1.1
;
; ldap servers
_ldap._tcp        IN SRV 0 100 389    ipatest
;kerberos realm
_kerberos        IN TXT EXAMPLE.COM
; kerberos servers
_kerberos._tcp        IN SRV 0 100 88        ipatest
_kerberos._udp        IN SRV 0 100 88        ipatest
_kerberos-master._tcp    IN SRV 0 100 88        ipatest
_kerberos-master._udp    IN SRV 0 100 88        ipatest
_kpasswd._tcp        IN SRV 0 100 464    ipatest
_kpasswd._udp        IN SRV 0 100 464    ipatest
;ntp server
_ntp._udp        IN SRV 0 100 123    ipatest
; ldap servers
;kerberos realm
;ntp server

-Reiniciamos el servicio sshd para que lea los cambios.

service sshd restart

-Probamos la configuración. El pass es el que colocamos a Directory Manager

/usr/bin/kinit admin

-Verificamos haya creado un ticket

/usr/bin/klist

-Verificamos usuario

/usr/bin/ipa user-find admin
--------------
1 user matched
--------------
  User login: admin
  Last name: Administrator
  Home directory: /home/admin
  Login shell: /bin/bash
  UID: 878200000
  GID: 878200000
  Account disabled: False
  Keytab: True
  Password: True
----------------------------
Number of entries returned 1
----------------------------

-Hacemos un backup de ca-agent.p12 y cacert.p12

mkdir ca-backup
cp ca-agent.p12 cacert.p12 ca-backup

Con esto ya tenemos instalado y configurado un server Fedora con FreeIPA, en proximos articulos les mostrare como configurar una replica y conectar clientes.
Disfrútenlo
Share/Bookmark