Blog

Bienvenue...

...sur mon blog, j'utilise ce site pour noter les petites choses qui me sont utiles, que ça soit informatique ou autre :)

Il y a 5 années 2 mois

J'ai mis en place LogStash + ElasticSearch + Kibana au boulot pour une console de centralisation des logs.

Ça marche plutôt pas mal, par contre une fois le POC en place, il est nécessaire de le sécuriser, en effet, par défaut ES est accessible via HTTP et du coup n'importe qui peut "tout péter"...

Donc la première chose à faire, c'est de "proxifier" l'accès à ES afin de contrôler les verbes accessibles, ce que fait la conf Apache ci-dessous.

<VirtualHost *:9201>
    ProxyPassMatch / http://127.0.0.1:9200
    ProxyPassReverse / http://127.0.0.1:9200
    <LocationMatch "^(/.*)$">
        <Limit DELETE PUT>
            Order deny,allow
            Deny from all
        </Limit>
    </LocationMatch>
    <LocationMatch "^(/_aliases|.*/_search|.*/_mapping)$">
        <Limit DELETE PUT>
            Order deny,allow
            Deny from all
        </Limit>
    </LocationMatch>
    <LocationMatch "^(/_cluster.*|/_plugin.*|/_status.*|/_nodes)$">
        <Limit GET POST PUT DELETE CONNECT OPTIONS PATCH PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
            Order deny,allow
            Deny from all
        </Limit>
    </LocationMatch>
    <LocationMatch "^(/kibana-int/dashboard/|/kibana-int/temp).*$">
        <Limit DELETE PUT>
            Order deny,allow
            Deny from all
        </Limit>
    </LocationMatch>
</VirtualHost>

En parallèle j'ai aussi bloqué les ports ES (9200/9300) via le firewall linux (iptables) afin que ces derniers ne soient accessibles qu'a partir des machines autorisées (appartenant au cluster ES).

Ca n'est pas parfait mais c'est un début !

Next step : activer l'authentification via LDAP en HTTPS et du coup autoriser certains verbes en fonction des groupes LDAP de l'utilisateur.

MAJ 26/10/2016 : modif pour ne pas autoriser l'accès aux URI de fonctionnement interne.

Il y a 5 années 4 mois
dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
Il y a 5 années 5 mois

Impossible de démarrer apache2 sur un port spécifique (sous centos) ?

Vérifier que le port en question est autorisé :

semanage port -l | grep -w http_port_t

Le cas échéant, il faut ajouter le port dans la liste des ports autorisés :

semanage port -a -t http_port_t -p tcp <PORT>

Si semanage n'est pas installé :

yum -y install policycoreutils-python

cf. : ici

Il y a 5 années 5 mois

CentOS 6.5 utilise SELinux, du coup lorsqu'on modifie la conf Apache pour qu'il écoute sur un port particulier et qu'on relance le service httpd, ben ça démarre pas...

Il suffit en fait de passer la commande :

semanage port -a -t http_port_t -p tcp <NUMERO DE PORT>

Si semanage n'est pas une commande connue, il faut l'installer :

yum -y install policycoreutils-python
Il y a 5 années 5 mois

Préparer une VM et l'installer a minima avec un CentOS.

Copier le script ci-dessous dans un repertoire (ex. : home de root)

Arrêter la VM template.

Créer un répertoire dans la LUN ayant le nom de la VM.

Cloner le disque (en mode shell sous VMWare) :

vmkfstools -i \
  /vmfs/volumes/LUN-OT1/TPL-CENTOS-6.5-x86_64/TPL-CENTOS-6.5-x86_64.vmdk \
  /vmfs/volumes/<Nom de la LUN>/<Nom du repertoire cible>/<Nom de la VM>.vmdk -d thin

Créer une nouvelle VM et lui affecter le disque créé.

Démarrer la VM avec le disque cloné.

Lancer la VM et se logger en root.

Lancer le script :

[root@host ~]# update-tpl.sh <Nom de la VM>

Si tout s’exécute correctement, la carte réseau eth0 sera reconfigurée avec la nouvelle adresse MAC, le hostname ainsi que le VolumeGroup (LVM) auront été renommé correctement.

update-tpl.sh source :

#/bin/sh
. /etc/init.d/functions
 
UPD="-UPD"
BFR="-BFR"
 
NTWCFG="/etc/sysconfig/network"
ETHCFG="/etc/sysconfig/network-scripts/ifcfg-eth0"
UDVNET="/etc/udev/rules.d/70-persistent-net.rules"
GRBCFG="/boot/grub/grub.conf"
FSTCFG="/etc/fstab"
HSTCFG="/etc/hosts"
INITRD="/boot/`cat ${GRBCFG} | grep -v grep | grep -v '#' | grep initrd | awk -F " /" '{ print $2 }'`"
NEWHOST="$1"
OLDHOST="`hostname`"
 
function moveBackup() {
    mv "${1}" "${1}${BFR}"
    checkExec $? "Moving ${1} to ${1}${BFR}"
}
 
function moveReal() {
    mv "${1}${UPD}" "${1}"
    checkExec $? "Moving ${1}${UPD} to ${1}"
}
 
function checkExec() {
    echo
    echo -n ">> $2"
    if [ $1 -eq 0 ] ; then
        success
        return
    fi
    if [ "$3" == "" ] ; then
        MSG="ERROR $2, procedure aborted..."
    else
        MSG="$3"
    fi
    failure
    echo $MSG
    exit 1
}
 
function checkAnswer() {
    echo
    if [ "$1" == "" ] ; then
        echo -n "* Is it ok [y/N] ?"
    else
        echo -n "* $1"
    fi
    read answer
    case "${answer}" in
        "y")
        ;;
        *)
        echo -n "Aborting..."
        failure
        echo
        exit 1
        ;;
esac
}
 
if [ "${NEWHOST}" == "`hostname`" ] || [ "${1}" == "" ] ; then
    echo "* Same hostname, nothing to do... showing operations but no actions !"
    DEBUG="-DEBUG"
    NEWHOST="newhostname"
    set -x
elif [ "$2" != "" ] ; then
    echo "* Debug mode... showing operations but no actions !"
    DEBUG="-DEBUG"
    set -x
fi
 
echo -n "New hostname: ${NEWHOST}"
 
########### HOST
sed "s/${OLDHOST}/${NEWHOST}${DEBUG}/g" ${NTWCFG} > "${NTWCFG}${UPD}"
sed "s/${OLDHOST}/${NEWHOST}${DEBUG}/g" ${HSTCFG} > "${HSTCFG}${UPD}"
checkExec $? "Renaming hostname '${OLDHOST}' to '${NEWHOST}'"
 
########### ETHERNET
HWADDR=`cat ${UDVNET} | grep -v eth0 | grep "NAME=\"eth" | awk -F "ATTR{address}==\"" '{ print \$2}' |  awk -F "\"," '{ print \$1}' | egrep '([0-9a-f]{2}[:-]){5}([0-9a-f]{2})' | awk '{gsub(/^ +| +$/,"")} {print $0}'`
if [ "${HWADDR}" != "" ] ; then
    sed "s/eth1/eth0/g" ${UDVNET} > "${UDVNET}${UPD}"
    checkExec $? "Updating udev informations"
    echo "DEVICE=eth0
HWADDR=${HWADDR^^}
BOOTPROTO=dhcp
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
#IPADDR=192.168.1.
#NETMASK=255.255.255.0
#BROADCAST=192.168.1.255
#NETWORK=192.168.1.0" > "${ETHCFG}${UPD}"
    checkExec $? "Updating NIC informations"
fi
########### LVM / FSTAB / GRUB
OLD_VGNAME=`vgdisplay | grep -v grep | grep "VG Name" | awk -F "VG Name" '{print \$2}' | awk '{gsub(/^ +| +$/,"")} {print $0}'`
VGNAME="vg_`echo "${NEWHOST}" | sed 's/[-_.]//g'`${DEBUG}"
checkAnswer "Rename '${OLD_VGNAME}' to '${VGNAME}' [y/N] ?"
sed "s/${OLD_VGNAME}/${VGNAME}/g" ${GRBCFG} > "${GRBCFG}${UPD}"
sed "s/${OLD_VGNAME}/${VGNAME}/g" ${FSTCFG} > "${FSTCFG}${UPD}"
 
########### MODIFICATIONS
echo "Point of no return :)"
checkAnswer "Do you want me to modify things [y/N] ?"
vgrename ${OLD_VGNAME} ${VGNAME}
checkExec $? "Renaming ${OLD_VGNAME} to ${VGNAME}" "ERROR executing vgrename ! (you should do something if you want the system to boot correctly... o_O')"
moveBackup ${HSTCFG}
moveReal ${HSTCFG}
moveBackup ${NTWCFG}
moveReal ${NTWCFG}
moveBackup ${UDVNET}
moveReal ${UDVNET}
moveBackup ${ETHCFG}
moveReal ${ETHCFG}
moveBackup ${GRBCFG}
moveReal ${GRBCFG}
moveBackup ${FSTCFG}
moveReal ${FSTCFG}
cp "${INITRD}" "${INITRD}${BFR}"
checkExec $? "Copying ${INITRD} to ${INITRD}${BFR}"
mkinitrd -f ${INITRD}  `uname -r`
checkExec $? "Creating initrd ${INITRD}"
echo

Pages