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 ;-)
-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