Blogs intéressants
Blog d'Omid Ameri : Dédié à la virtualisation et au système.
Sponsor

PostHeaderIcon vim: Impossible de copier coller dans Debian Stretch

Article publié le 17 Avril 2018

 

Certains l'auront remarqué, depuis debian 9 (stretch), il est par défaut impossible de faire un copier coller depuis un terminal en utilisant vim.

Afin de résoudre ce petit désagrément, il suffit d'éditer le fichier /usr/share/vim/vim80/defaults.vim et de modifier la ligne suivante:

if has ('mouse')

set mouse=a

endif

 

par:

if has ('mouse')

set mouse=r

endif

 

 

 

PostHeaderIcon Monitorer en temps réél vos machine Linux avec Netdata

Article publié le 9 Avril 2018

Netdata est un outil de monitoring très puissant. Il vous permet d'avoir un dashboard complet et en temps réel de l'état de votre machine. L'interface graphique est très belle et très pratique.

1) Installation

Cette méthode d'installation est adaptée pour toutes les distributions récentes:

- Lancez la commande suivante:

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

Le script va vérifier les prérequis et les installer pour vous:

Le script d'installation compilera et installera tous les modules nécessaires au fonctionnement de Netdata.

Une fois l'installation terminée, vous devriez avoir ceci:

2) Utilisation

Connectez vous à l'interface via l'adresse <ip ou dns de votre machine>:19999

Quelques screenshot pour vous montrer à quoi ressemble le dashboard de monitoring:

Enfin, Netdata est capable de faire le monitoring de la plupart des services installés sur votre machine (MySQL, Apache2, etc...):

- Pour monitorer un service il vous suffit de paramétrer les fichiers de configuration situé dans le répertoire /etc/netdata/python.d:

Enjoy 😉

PostHeaderIcon Analysez les logs de vos serveurs web en temps réel avec GoAccess

Article publiée le 6 Avril 2018

J'ai découvert par hasard un petit outil fort sympathique nommé GoAccess. GoAccess vous permet d'analyser en temps réel les logs de votre serveur Web (Apache, Nginx ou autre) et d'avoir des statistiques détaillées (via votre terminal ou export au format HTML, CSV).

1) Installation

Sous Debian/Ubuntu:

- Ajoutez les dépôts officiels GoAccess:

echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list

- Ajoutez la clé GPG:

wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -

- Installez le package

sudo apt-get update && sudo apt-get install goaccess

 

Sous RedHat/Centos:

- Installez directement GOAcess depuis les dépots de la distribution

yum install goaccess

 

2) Utilisation

Pour générer un rapport:

goaccess -f <la log access de votre serveur web>   #A adapter selon votre serveur Web

 

Exemple de rapport:

Vous pouvez également générer un rapport sous forme de page HTML

Éditez le fichier /etc/goaccess est décommentez les lignes "date-format" et "time-format" en fonction du serveur web dont vous voulez analyser les logs. Dans mon exemple, c'est un serveur apache:

 

- Lancez la commande suivante:

goaccess -f <la log access de votre serveur web> -a  > /tmp/rapport.html  #A adapter selon votre serveur Web

- Un rapport de ce type vous sera généré:

Si vous voulez des graphs en temps réel (ou presque), il vous suffira d'exécuter la commande de génération du rapport en format HTML via un CRON et de le publier via un serveur web.

PostHeaderIcon Tutoriel | Installation d’un cluster ElasticSearch

Article publié le 28 Mars 2018

Un petit tutoriel qui pourra être utile à ceux qui, comme moi, ont souffert de la prise en main d'ElasticSearch ;-).

Ce tutoriel expliquera la marche à suivre pour monter un cluster ElasticSearch.

Dans l'exemple ci-dessous, je vais monter un cluster ElasticSearch composé de trois nœuds.

 

1) Installation

Installez ElasticSearch sur chaque machine (au moment où ce tutoriel a été rédigé, la version courante d'ElasticSearch est la 6.2)

Installation sous Debian:

Téléchargez et installez la clé GPG:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Ajoutez le répo elasticsearch (à adapter en fonction de la version courante du moment):

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

Enfin, Installez ElasticSearch

sudo apt-get update && sudo apt-get install elasticsearch

 

Installation sous RedHat:

Téléchargez et installez la clé GPG:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Ajoutez le répo (à adapter en fonction de la version courante du moment):

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Enfin, installez ElasticSearch

sudo yum install elasticsearch

 

2) Configuration

Chaque machine doit être joignable via le hostname (enregistrement DNS ou fichier host impératif)

- Une fois les noeuds ElasticSearch installés, éditez le fichier /etc/elasticsearch/elasticsearch.yml et écrasez la conf par celle ci-dessous sur chaque nœuds de votre cluster elasticsearch:

cluster.name: moncluster
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

#A sécuriser si nécessaire

network.host: 0.0.0.0
http.port: 9200

# Nombre de noeuds sans compter cette machine
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: [ "<nom dns du noeud 1>", "<nom dns du noeud 2>", "<nom dns du noeud 3>" ]

# Nombre total de nœuds composant votre cluster

gateway.expected_nodes: 3

#Nombre de nœuds sans compter cette machine

gateway.recover_after_nodes: 2
node.name: <nom du noeud>

action.destructive_requires_name: true
bootstrap.memory_lock: true

-  Éditez le fichier de configuration systemd /usr/lib/systemd/system/elasticsearch.service et rajoutez à la fin de ce fichier la ligne suivante:

LimitMEMLOCK=infinity

- Éditez le fichier /etc/security/limits.conf et rajoutez à la fin du fichier les lignes suivantes:

elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch - nofile 65536
elasticsearch - nproc 2048

- Désactivez le Swap

swapoff -a

- Les paramètres java sont configurable directement via le ficher de configuration /etc/elasticsearch/jvm.options (notamment les paramètres mémoires)

 

Une fois les nœuds paramétrés, redémarrez le service elasticsearch sur chacune de vos machines

service elasticsearch restart

 

3) Vérification du cluster

Avant toute chose, vous pouvez vérifier dans les logs elasticsearch si vos machines communiquent bien entre elles (/var/log/elasticsearch.log) et avoir quelque chose de similaire à la log ci-dessous:

 

[2018-03-28T13:17:54,213][INFO ][o.e.n.Node ] [els02] starting ...
[2018-03-28T13:17:54,379][INFO ][o.e.t.TransportService ] [els02] publish_address {192.168.2.91:9300}, bound_addresses {[::]:9300}
[2018-03-28T13:17:54,390][INFO ][o.e.b.BootstrapChecks ] [els02] bound or publishing to a non-loopback address, enforcing bootstrap checks
[2018-03-28T13:17:57,508][INFO ][o.e.c.s.MasterService ] [els02] zen-disco-elected-as-master ([1] nodes joined)[{els01}{swDhGGuVTfCeRVp79KFpzQ}{NZvRF3JyT72OyoshFARfMw}{192.168.2.29}{192.168.2.29:9300}], reason: new_master {els02}{h-Q4N-ytQ_6G8JWolSklMg}{axcVvf6BTqOfCPM4CPg3-g}{192.168.2.91}{192.168.2.91:9300}, added {{els01}{swDhGGuVTfCeRVp79KFpzQ}{NZvRF3JyT72OyoshFARfMw}{192.168.2.29}{192.168.2.29:9300},}
[2018-03-28T13:17:57,594][INFO ][o.e.c.s.ClusterApplierService] [els02] new_master {els02}{h-Q4N-ytQ_6G8JWolSklMg}{axcVvf6BTqOfCPM4CPg3-g}{192.168.2.91}{192.168.2.91:9300}, added {{els01}{swDhGGuVTfCeRVp79KFpzQ}{NZvRF3JyT72OyoshFARfMw}{192.168.2.29}{192.168.2.29:9300},}, reason: apply cluster state (from master [master {els02}{h-Q4N-ytQ_6G8JWolSklMg}{axcVvf6BTqOfCPM4CPg3-g}{192.168.2.91}{192.168.2.91:9300} committed version [1] source [zen-disco-elected-as-master ([1] nodes joined)[{els01}{swDhGGuVTfCeRVp79KFpzQ}{NZvRF3JyT72OyoshFARfMw}{192.168.2.29}{192.168.2.29:9300}]]])
[2018-03-28T13:17:57,601][INFO ][o.e.g.GatewayService ] [els02] delaying initial state recovery for [5m]. expecting [3] nodes, but only have [2]
[2018-03-28T13:17:57,632][INFO ][o.e.h.n.Netty4HttpServerTransport] [els02] publish_address {192.168.2.91:9200}, bound_addresses {[::]:9200}
[2018-03-28T13:17:57,632][INFO ][o.e.n.Node ] [els02] started
[2018-03-28T13:18:21,135][INFO ][o.e.c.s.MasterService ] [els02] zen-disco-node-join[{els03}{I9Kd4QJ1SZGuHPppMwdS0A}{NSdfQfdfRhCD4_YfhQ18vA}{192.168.2.76}{192.168.2.76:9300}], reason: added {{els03}{I9Kd4QJ1SZGuHPppMwdS0A}{NSdfQfdfRhCD4_YfhQ18vA}{192.168.2.76}{192.168.2.76:9300},}
[2018-03-28T13:18:21,279][INFO ][o.e.c.s.ClusterApplierService] [els02] added {{els03}{I9Kd4QJ1SZGuHPppMwdS0A}{NSdfQfdfRhCD4_YfhQ18vA}{192.168.2.76}{192.168.2.76:9300},}, reason: apply cluster state (from master [master {els02}{h-Q4N-ytQ_6G8JWolSklMg}{axcVvf6BTqOfCPM4CPg3-g}{192.168.2.91}{192.168.2.91:9300} committed version [2] source [zen-disco-node-join[{els03}{I9Kd4QJ1SZGuHPppMwdS0A}{NSdfQfdfRhCD4_YfhQ18vA}{192.168.2.76}{192.168.2.76:9300}]]])
[2018-03-28T13:18:21,372][INFO ][o.e.g.GatewayService ] [els02] recovered [0] indices into cluster_state

Enfin, il existe un plugin Chrome très utiles permettant d'avoir un statut en temps réel de votre cluster elasticsearch: ElasticSearch Head:

 

enjoy !

PostHeaderIcon Faites un audit de votre système avec Lynis

Article publié le 19 Février 2018

Je suis tombé par hasard sur un petit outil fort sympathique nommé Lynis. Lynis vous permet de faire un audit complet de votre système Linux/Unix. J'ai été très impressionné par sa précision,  Lynis va auditer jusqu'au moindre recoin de votre machine et vous faire un gros résumé de toutes les préconisations pour améliorer la sécurité et les performances de celle-ci. De plus Lynis détecte automatiquement les services installés et en fait l'audit  (Apache2, Squid, etc).

 

1) Installation

Sous Debian/Ubuntu:

- Installez la clé:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C80E383C3DE9F082E01391A0366C67DE91CA5D5F

- Ajoutez le repo:

echo "deb https://packages.cisofy.com/community/lynis/deb/ <votre distrib> main" | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list

- Installez le paquet:

apt-get update && apt-get install lynis

 

Sous Centos/RedHat:

- Ajoutez le repo créez un fichier /etc/yum.repos.d/cisofy-lynis.repo:

[lynis]
name=CISOfy Software - Lynis package
baseurl=https://packages.cisofy.com/community/lynis/rpm/
enabled=1
gpgkey=https://packages.cisofy.com/keys/cisofy-software-rpms-public.key
gpgcheck=1

- Installez le package:

yum install lynis

 

2) Utilisation

Pour lancez un audit, il suffit de taper la commande suivante (avec le user roor ou en sudo):

lynis audit system

Pour l'exemple voici le résultat de l'audit d'une petite VM Vagrant:

 

ubuntu@ubuntu-xenial:~$ sudo lynis audit system

[ Lynis 2.6.2 ]

################################################################################
Lynis comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
welcome to redistribute it under the terms of the GNU General Public License.
See the LICENSE file for details about using this software.

2007-2018, CISOfy - https://cisofy.com/lynis/
Enterprise support available (compliance, plugins, interface and tools)
################################################################################

[+] Initializing program
------------------------------------
- Detecting OS... [ DONE ]
- Checking profiles... [ DONE ]

---------------------------------------------------
Program version: 2.6.2
Operating system: Linux
Operating system name: Ubuntu Linux
Operating system version: 16.04
Kernel version: 4.4.0
Hardware platform: x86_64
Hostname: ubuntu-xenial
---------------------------------------------------
Profiles: /etc/lynis/default.prf
Log file: /var/log/lynis.log
Report file: /var/log/lynis-report.dat
Report version: 1.0
Plugin directory: /usr/share/lynis/plugins
---------------------------------------------------
Auditor: [Not Specified]
Language: en
Test category: all
Test group: all
---------------------------------------------------
- Program update status... [ NO UPDATE ]

[+] System Tools
------------------------------------
- Scanning available tools...
- Checking system binaries...

[+] Plugins (phase 1)
------------------------------------
Note: plugins have more extensive tests and may take several minutes to complete

- Plugins enabled [ NONE ]

[+] Boot and services
------------------------------------
- Service Manager [ systemd ]
- Checking UEFI boot [ DISABLED ]
- Checking presence GRUB [ OK ]
- Checking presence GRUB2 [ FOUND ]
- Checking for password protection [ WARNING ]
- Check running services (systemctl) [ DONE ]
Result: found 22 running services
- Check enabled services at boot (systemctl) [ DONE ]
Result: found 32 enabled services
- Check startup files (permissions) [ OK ]

[+] Kernel
------------------------------------
- Checking default run level [ RUNLEVEL 5 ]
- Checking CPU support (NX/PAE)
CPU support: PAE and/or NoeXecute supported [ FOUND ]
- Checking kernel version and release [ DONE ]
- Checking kernel type [ DONE ]
- Checking loaded kernel modules [ DONE ]
Found 56 active modules
- Checking Linux kernel configuration file [ FOUND ]
- Checking default I/O kernel scheduler [ FOUND ]
- Checking for available kernel update [ OK ]
- Checking core dumps configuration [ DISABLED ]
- Checking setuid core dumps configuration [ PROTECTED ]
- Check if reboot is needed [ YES ]

[+] Memory and Processes
------------------------------------
- Checking /proc/meminfo [ FOUND ]
- Searching for dead/zombie processes [ OK ]
- Searching for IO waiting processes [ OK ]

[+] Users, Groups and Authentication
------------------------------------
- Administrator accounts [ OK ]
- Unique UIDs [ OK ]
- Consistency of group files (grpck) [ OK ]
- Unique group IDs [ OK ]
- Unique group names [ OK ]
- Password file consistency [ OK ]
- Query system users (non daemons) [ DONE ]
- NIS+ authentication support [ NOT ENABLED ]
- NIS authentication support [ NOT ENABLED ]
- sudoers file [ FOUND ]
- Check sudoers file permissions [ OK ]
- PAM password strength tools [ SUGGESTION ]
- PAM configuration files (pam.conf) [ FOUND ]
- PAM configuration files (pam.d) [ FOUND ]
- PAM modules [ FOUND ]
- LDAP module in PAM [ NOT FOUND ]
- Accounts without expire date [ OK ]
- Accounts without password [ OK ]
- Checking user password aging (minimum) [ DISABLED ]
- User password aging (maximum) [ DISABLED ]
- Checking expired passwords [ OK ]
- Checking Linux single user mode authentication [ OK ]
- Determining default umask
- umask (/etc/profile) [ NOT FOUND ]
- umask (/etc/login.defs) [ SUGGESTION ]
- umask (/etc/init.d/rc) [ SUGGESTION ]
- LDAP authentication support [ NOT ENABLED ]
- Logging failed login attempts [ ENABLED ]

[+] Shells
------------------------------------
- Checking shells from /etc/shells
Result: found 6 shells (valid shells: 6).
- Session timeout settings/tools [ NONE ]
- Checking default umask values
- Checking default umask in /etc/bash.bashrc [ NONE ]
- Checking default umask in /etc/profile [ NONE ]

[+] File systems
------------------------------------
- Checking mount points
- Checking /home mount point [ SUGGESTION ]
- Checking /tmp mount point [ SUGGESTION ]
- Checking /var mount point [ SUGGESTION ]
- Query swap partitions (fstab) [ NONE ]
- Testing swap partitions [ OK ]
- Testing /proc mount (hidepid) [ SUGGESTION ]
- Checking for old files in /tmp [ OK ]
- Checking /tmp sticky bit [ OK ]
- Checking /var/tmp sticky bit [ OK ]
- ACL support root file system [ ENABLED ]
- Mount options of / [ OK ]
- Checking Locate database [ FOUND ]
- Disable kernel support of some filesystems
- Discovered kernel modules: udf

[+] USB Devices
------------------------------------
- Checking usb-storage driver (modprobe config) [ NOT DISABLED ]
- Checking USB devices authorization [ DISABLED ]
- Checking USBGuard [ NOT FOUND ]

[+] Storage
------------------------------------
- Checking firewire ohci driver (modprobe config) [ DISABLED ]

[+] NFS
------------------------------------
- Check running NFS daemon [ NOT FOUND ]

[+] Name services
------------------------------------
- Checking search domains [ FOUND ]
- Searching DNS domain name [ UNKNOWN ]
- Checking /etc/hosts
- Checking /etc/hosts (duplicates) [ OK ]
- Checking /etc/hosts (hostname) [ OK ]
- Checking /etc/hosts (localhost) [ OK ]
- Checking /etc/hosts (localhost to IP) [ OK ]

[+] Ports and packages
------------------------------------
- Searching package managers
- Searching dpkg package manager [ FOUND ]
- Querying package manager
- Query unpurged packages [ NONE ]
- Checking security repository in sources.list file [ OK ]
- Checking APT package database [ OK ]
- Checking vulnerable packages [ WARNING ]
- Checking upgradeable packages [ SKIPPED ]
- Checking package audit tool [ INSTALLED ]
Found: apt-check

[+] Networking
------------------------------------
- Checking IPv6 configuration [ ENABLED ]
Configuration method [ AUTO ]
IPv6 only [ NO ]
- Checking configured nameservers
- Testing nameservers
Nameserver: 10.0.2.3 [ OK ]
- Minimal of 2 responsive nameservers [ WARNING ]
- Checking default gateway [ DONE ]
- Getting listening ports (TCP/UDP) [ DONE ]
* Found 3 ports
- Checking promiscuous interfaces [ OK ]
- Checking waiting connections [ OK ]
- Checking status DHCP client [ RUNNING ]
- Checking for ARP monitoring software [ NOT FOUND ]

[+] Printers and Spools
------------------------------------
- Checking cups daemon [ NOT FOUND ]
- Checking lp daemon [ NOT RUNNING ]

[+] Software: e-mail and messaging
------------------------------------

[+] Software: firewalls
------------------------------------
- Checking iptables kernel module [ NOT FOUND ]
- Checking host based firewall [ NOT ACTIVE ]

[+] Software: webserver
------------------------------------
- Checking Apache [ NOT FOUND ]
- Checking nginx [ NOT FOUND ]

[+] SSH Support
------------------------------------
- Checking running SSH daemon [ FOUND ]
- Searching SSH configuration [ FOUND ]
- SSH option: AllowTcpForwarding [ SUGGESTION ]
- SSH option: ClientAliveCountMax [ SUGGESTION ]
- SSH option: ClientAliveInterval [ OK ]
- SSH option: Compression [ SUGGESTION ]
- SSH option: FingerprintHash [ OK ]
- SSH option: GatewayPorts [ OK ]
- SSH option: IgnoreRhosts [ OK ]
- SSH option: LoginGraceTime [ OK ]
- SSH option: LogLevel [ SUGGESTION ]
- SSH option: MaxAuthTries [ SUGGESTION ]
- SSH option: MaxSessions [ SUGGESTION ]
- SSH option: PermitRootLogin [ SUGGESTION ]
- SSH option: PermitUserEnvironment [ OK ]
- SSH option: PermitTunnel [ OK ]
- SSH option: Port [ SUGGESTION ]
- SSH option: PrintLastLog [ OK ]
- SSH option: Protocol [ OK ]
- SSH option: StrictModes [ OK ]
- SSH option: TCPKeepAlive [ SUGGESTION ]
- SSH option: UseDNS [ OK ]
- SSH option: UsePrivilegeSeparation [ SUGGESTION ]
- SSH option: VerifyReverseMapping [ NOT FOUND ]
- SSH option: X11Forwarding [ SUGGESTION ]
- SSH option: AllowAgentForwarding [ SUGGESTION ]
- SSH option: AllowUsers [ NOT FOUND ]
- SSH option: AllowGroups [ NOT FOUND ]

[+] SNMP Support
------------------------------------
- Checking running SNMP daemon [ NOT FOUND ]

[+] Databases
------------------------------------
No database engines found

[+] LDAP Services
------------------------------------
- Checking OpenLDAP instance [ NOT FOUND ]

[+] PHP
------------------------------------
- Checking PHP [ NOT FOUND ]

[+] Squid Support
------------------------------------
- Checking running Squid daemon [ NOT FOUND ]

[+] Logging and files
------------------------------------
- Checking for a running log daemon [ OK ]
- Checking Syslog-NG status [ NOT FOUND ]
- Checking systemd journal status [ FOUND ]
- Checking Metalog status [ NOT FOUND ]
- Checking RSyslog status [ FOUND ]
- Checking RFC 3195 daemon status [ NOT FOUND ]
- Checking minilogd instances [ NOT FOUND ]
- Checking logrotate presence [ OK ]
- Checking log directories (static list) [ DONE ]
- Checking open log files [ DONE ]
- Checking deleted files in use [ FILES FOUND ]

[+] Insecure services
------------------------------------
- Checking inetd status [ NOT ACTIVE ]

[+] Banners and identification
------------------------------------
- /etc/issue [ FOUND ]
- /etc/issue contents [ WEAK ]
- /etc/issue.net [ FOUND ]
- /etc/issue.net contents [ WEAK ]

[+] Scheduled tasks
------------------------------------
- Checking crontab/cronjob [ DONE ]
- Checking atd status [ RUNNING ]
- Checking at users [ DONE ]
- Checking at jobs [ NONE ]

[+] Accounting
------------------------------------
- Checking accounting information [ NOT FOUND ]
- Checking sysstat accounting data [ NOT FOUND ]
- Checking auditd [ NOT FOUND ]

[+] Time and Synchronization
------------------------------------

[+] Cryptography
------------------------------------
- Checking for expired SSL certificates [0/1] [ NONE ]

[+] Virtualization
------------------------------------

[+] Containers
------------------------------------

[+] Security frameworks
------------------------------------
- Checking presence AppArmor [ FOUND ]
- Checking AppArmor status [ ENABLED ]
- Checking presence SELinux [ NOT FOUND ]
- Checking presence grsecurity [ NOT FOUND ]
- Checking for implemented MAC framework [ OK ]

[+] Software: file integrity
------------------------------------
- Checking file integrity tools
- Checking presence integrity tool [ NOT FOUND ]

[+] Software: System tooling
------------------------------------
- Checking automation tooling
- Automation tooling [ NOT FOUND ]
- Checking for IDS/IPS tooling [ NONE ]

[+] Software: Malware
------------------------------------

[+] File Permissions
------------------------------------
- Starting file permissions check
/root/.ssh [ OK ]

[+] Home directories
------------------------------------
- Checking shell history files [ OK ]

[+] Kernel Hardening
------------------------------------
- Comparing sysctl key pairs with scan profile
- fs.protected_hardlinks (exp: 1) [ OK ]
- fs.protected_symlinks (exp: 1) [ OK ]
- fs.suid_dumpable (exp: 0) [ DIFFERENT ]
- kernel.core_uses_pid (exp: 1) [ DIFFERENT ]
- kernel.ctrl-alt-del (exp: 0) [ OK ]
- kernel.dmesg_restrict (exp: 1) [ DIFFERENT ]
- kernel.kptr_restrict (exp: 2) [ DIFFERENT ]
- kernel.randomize_va_space (exp: 2) [ OK ]
- kernel.sysrq (exp: 0) [ DIFFERENT ]
- kernel.yama.ptrace_scope (exp: 1 2 3) [ OK ]
- net.ipv4.conf.all.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.all.accept_source_route (exp: 0) [ OK ]
- net.ipv4.conf.all.bootp_relay (exp: 0) [ OK ]
- net.ipv4.conf.all.forwarding (exp: 0) [ OK ]
- net.ipv4.conf.all.log_martians (exp: 1) [ DIFFERENT ]
- net.ipv4.conf.all.mc_forwarding (exp: 0) [ OK ]
- net.ipv4.conf.all.proxy_arp (exp: 0) [ OK ]
- net.ipv4.conf.all.rp_filter (exp: 1) [ OK ]
- net.ipv4.conf.all.send_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.default.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.default.accept_source_route (exp: 0) [ DIFFERENT ]
- net.ipv4.conf.default.log_martians (exp: 1) [ DIFFERENT ]
- net.ipv4.icmp_echo_ignore_broadcasts (exp: 1) [ OK ]
- net.ipv4.icmp_ignore_bogus_error_responses (exp: 1) [ OK ]
- net.ipv4.tcp_syncookies (exp: 1) [ OK ]
- net.ipv4.tcp_timestamps (exp: 0 1) [ OK ]
- net.ipv6.conf.all.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv6.conf.all.accept_source_route (exp: 0) [ OK ]
- net.ipv6.conf.default.accept_redirects (exp: 0) [ DIFFERENT ]
- net.ipv6.conf.default.accept_source_route (exp: 0) [ OK ]

[+] Hardening
------------------------------------
- Installed compiler(s) [ NOT FOUND ]
- Installed malware scanner [ NOT FOUND ]

[+] Custom Tests
------------------------------------
- Running custom tests... [ NONE ]

[+] Plugins (phase 2)
------------------------------------

================================================================================

-[ Lynis 2.6.2 Results ]-

Warnings (3):
----------------------------
! Reboot of system is most likely needed [KRNL-5830]
- Solution : reboot
https://cisofy.com/controls/KRNL-5830/

! Found one or more vulnerable packages. [PKGS-7392]
https://cisofy.com/controls/PKGS-7392/

! Couldn't find 2 responsive nameservers [NETW-2705]
https://cisofy.com/controls/NETW-2705/

Suggestions (39):
----------------------------
* Set a password on GRUB bootloader to prevent altering boot configuration (e.g. boot in single user mode without password) [BOOT-5122]
https://cisofy.com/controls/BOOT-5122/

* Install a PAM module for password strength testing like pam_cracklib or pam_passwdqc [AUTH-9262]
https://cisofy.com/controls/AUTH-9262/

* Configure minimum password age in /etc/login.defs [AUTH-9286]
https://cisofy.com/controls/AUTH-9286/

* Configure maximum password age in /etc/login.defs [AUTH-9286]
https://cisofy.com/controls/AUTH-9286/

* Default umask in /etc/login.defs could be more strict like 027 [AUTH-9328]
https://cisofy.com/controls/AUTH-9328/

* Default umask in /etc/init.d/rc could be more strict like 027 [AUTH-9328]
https://cisofy.com/controls/AUTH-9328/

* To decrease the impact of a full /home file system, place /home on a separated partition [FILE-6310]
https://cisofy.com/controls/FILE-6310/

* To decrease the impact of a full /tmp file system, place /tmp on a separated partition [FILE-6310]
https://cisofy.com/controls/FILE-6310/

* To decrease the impact of a full /var file system, place /var on a separated partition [FILE-6310]
https://cisofy.com/controls/FILE-6310/

* Disable drivers like USB storage when not used, to prevent unauthorized storage or data theft [STRG-1840]
https://cisofy.com/controls/STRG-1840/

* Check DNS configuration for the dns domain name [NAME-4028]
https://cisofy.com/controls/NAME-4028/

* Install debsums utility for the verification of packages with known good database. [PKGS-7370]
https://cisofy.com/controls/PKGS-7370/

* Update your system with apt-get update, apt-get upgrade, apt-get dist-upgrade and/or unattended-upgrades [PKGS-7392]
https://cisofy.com/controls/PKGS-7392/

* Install package apt-show-versions for patch management purposes [PKGS-7394]
https://cisofy.com/controls/PKGS-7394/

* Check your resolv.conf file and fill in a backup nameserver if possible [NETW-2705]
https://cisofy.com/controls/NETW-2705/

* Consider running ARP monitoring software (arpwatch,arpon) [NETW-3032]
https://cisofy.com/controls/NETW-3032/

* Configure a firewall/packet filter to filter incoming and outgoing traffic [FIRE-4590]
https://cisofy.com/controls/FIRE-4590/

* Consider hardening SSH configuration [SSH-7408]
- Details : AllowTcpForwarding (YES --> NO)
https://cisofy.com/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : ClientAliveCountMax (3 --> 2)
https://cisofy.com/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : Compression (YES --> (DELAYED|NO))
https://cisofy.com/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : LogLevel (INFO --> VERBOSE)
https://cisofy.com/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : MaxAuthTries (6 --> 2)
https://cisofy.com/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : MaxSessions (10 --> 2)
https://cisofy.com/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : PermitRootLogin (WITHOUT-PASSWORD --> NO)
https://cisofy.com/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : Port (22 --> )
https://cisofy.com/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : TCPKeepAlive (YES --> NO)
https://cisofy.com/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : UsePrivilegeSeparation (YES --> SANDBOX)
https://cisofy.com/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : X11Forwarding (YES --> NO)
https://cisofy.com/controls/SSH-7408/

* Consider hardening SSH configuration [SSH-7408]
- Details : AllowAgentForwarding (YES --> NO)
https://cisofy.com/controls/SSH-7408/

* Check what deleted files are still in use and why. [LOGG-2190]
https://cisofy.com/controls/LOGG-2190/

* Add a legal banner to /etc/issue, to warn unauthorized users [BANN-7126]
https://cisofy.com/controls/BANN-7126/

* Add legal banner to /etc/issue.net, to warn unauthorized users [BANN-7130]
https://cisofy.com/controls/BANN-7130/

* Enable process accounting [ACCT-9622]
https://cisofy.com/controls/ACCT-9622/

* Enable sysstat to collect accounting (no results) [ACCT-9626]
https://cisofy.com/controls/ACCT-9626/

* Enable auditd to collect audit information [ACCT-9628]
https://cisofy.com/controls/ACCT-9628/

* Install a file integrity tool to monitor changes to critical and sensitive files [FINT-4350]
https://cisofy.com/controls/FINT-4350/

* Determine if automation tools are present for system management [TOOL-5002]
https://cisofy.com/controls/TOOL-5002/

* One or more sysctl values differ from the scan profile and could be tweaked [KRNL-6000]
- Solution : Change sysctl value or disable test (skip-test=KRNL-6000:<sysctl-key>)
https://cisofy.com/controls/KRNL-6000/

* Harden the system by installing at least one malware scanner, to perform periodic file system scans [HRDN-7230]
- Solution : Install a tool like rkhunter, chkrootkit, OSSEC
https://cisofy.com/controls/HRDN-7230/

Follow-up:
----------------------------
- Show details of a test (lynis show details TEST-ID)
- Check the logfile for all details (less /var/log/lynis.log)
- Read security controls texts (https://cisofy.com)
- Use --upload to upload data to central system (Lynis Enterprise users)

================================================================================

Lynis security scan details:

Hardening index : 56 [########### ]
Tests performed : 206
Plugins enabled : 0

Components:
- Firewall [X]
- Malware scanner [X]

Lynis Modules:
- Compliance Status [?]
- Security Audit [V]
- Vulnerability Scan [V]

Files:
- Test and debug information : /var/log/lynis.log
- Report data : /var/log/lynis-report.dat

================================================================================

Lynis 2.6.2

Auditing, system hardening, and compliance for UNIX-based systems
(Linux, macOS, BSD, and others)

2007-2018, CISOfy - https://cisofy.com/lynis/
Enterprise support available (compliance, plugins, interface and tools)

================================================================================

[TIP]: Enhance Lynis audits by adding your settings to custom.prf (see /etc/lynis/default.prf for all settings)

 

Pour plus d'information n'hésitez pas à visiter la page officielle du projet:

https://packages.cisofy.com/

PostHeaderIcon Migrer vos fichier docker compose vers kubernetes avec Kompose

Article publié le 24 Janvier 2018

Mini article rapide pour vous parler de Kompose, un outil fort bien pratique pour convertir vos fichiers docker-compose.yml en yaml Kubernetes. Ceci est fortement appréciable notamment pour ceux qui débutent avec l'écosystème Kubernetes.

Installation

Lancez la commande suivante (n'oubliez pas de checker le numéro de version dans le lien qui peut évoluer dans le temps depuis l'écriture de cet article):

curl -L https://github.com/kubernetes/kompose/releases/download/v1.7.0/kompose-linux-amd64 -o kompose && mv kompose /usr/local/bin && chmod 755 /usr/local/bin/kompose

Utilisation

Dans l'exemple ci-dessous, je vais convertir le docker-compose de jenkins.

Contenu du docker-compose.yml:

version: "2"
volumes:
data-jenkins:
driver: "local"
services:
jenkins:
image: "jenkins:2.60.3"
ports:
- "8080:8080"
restart: "always"
volumes:
- "/srv/jenkins:/var/jenkins"

 

Convertissez votre fichier docker-compose avec la commande suivante:

kompose convert -f docker-compose.yml

Dans mon exemple cela donne ceci:

Kompose a créé les fichiers Kubernetes.

Nous allons ensuite tester les fichiers yaml généré en créant un pod Kubernetes avec le service associé:

Nous allons vérifier que tout est déployé correctement:

enjoy 😉

PostHeaderIcon Script | Purger les logs d’exécution Rundeck

Article publié le 16 Janvier 2018

Avec le temps, les performances de Rundeck peuvent fortement diminuer suite à l'accumulation de logs d’exécution stockée en base et générant en parallèle d'innombrables petits fichiers.

Il vous faudra donc mettre rapidement en place une solution afin de purger les logs d’exécution de Rundeck.

J'ai trouvé et modifié un petit script faisant très bien le boulot (utilisable si votre Rundeck utilise MySQL):

#!/bin/bash

#Nombre de jours de rétention des logs

KEEP=90

# A modifier si votre instance MySQL est hébergé sur une autre machine

HOST=localhost
PORT=3306
USERNAME=<user de votre base de donnée MySQL>
PASSWORD="<le mot de passe du user de votre base MySQL"
DB=<nom de la base de donnée MySQL Rundeck>

cd /var/lib/rundeck/logs/rundeck

JOBS=`find . -maxdepth 3 -path "*/job/*" -type d`

for j in $JOBS ; do
echo "Processing job $j"
ids=`find $j -iname "*.rdlog" | sed -e "s/.*\/\([0-9]*\)\.rdlog/\1/" | sort -n -r`
declare -a JOBIDS=($ids)

if [ ${#JOBIDS[@]} -gt $KEEP ]; then
for job in ${JOBIDS[@]:$KEEP};do
echo " * Deleting job: $job"
echo " rm -rf $j/logs/$job.*"
rm -rf $j/logs/$job.*
workflowid=`mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -s -N -e "select workflow_id from execution where id=$job" $DB`
workflowstepids=`mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -s -N -e "select workflow_step_id from workflow_workflow_step where workflow_commands_id=$workflowid" $DB`
declare -a WSIDS=($workflowstepids)
for workflowstepid in $WSIDS ; do
echo " mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e 'delete from workflow_workflow_step where workflow_step_id=$workflowstepid' $DB"
mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e "delete from workflow_workflow_step where workflow_step_id=$workflowstepid" $DB
echo " mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e 'delete from workflow_step where id=$workflowstepid' $DB"
mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e "delete from workflow_step where id=$workflowstepid" $DB
done
echo " mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e 'delete from execution where id=$job' $DB"
mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e "delete from execution where id=$job" $DB
echo " mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e 'delete from base_report where jc_exec_id=$job' $DB"
mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e "delete from base_report where jc_exec_id=$job" $DB
echo " mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e 'delete from workflow where id=$workflowid' $DB"
mysql -h $HOST -P $PORT -u$USERNAME -p$PASSWORD -e "delete from workflow where id=$workflowid" $DB
done
fi
done

 

PostHeaderIcon Tutoriel | Déployez facilement un cluster Kubernetes avec Rancher

Article publiée le 13 Janvier 2018

Kubernetes est un orchestrateur de container docker extrêmement puissant mais également très fastidieux à déployer. Il existe pourtant un moyen très simple pour déployer Kubernetes en utilisant Rancher.

Rancher est un outil permettant de gérer vos environnements Docker de manière intuitive via une interface graphique  (site de Rancher: https://rancher.com/)

Pour ce tuto je vais utiliser trois machines sous Debian 9 avec docker installé. Pour ceux qui ne connaissent pas Docker, je leurs suggère de lire le tutoriel ci-dessous:

Tuto Docker | Démarrer avec Docker

 

1) Installation de Rancher

Installer Rancher est très facile, il suffit de déployer le container fournit par l'éditeur:

Au moment de la rédaction de cet article, la version stable de Rancher est la version 1.6. La version 2.0 est une version Alpha en cours de développement (très instable).

Nous allons installer Rancher sur notre première machine:

docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:stable

Une fois le container installé, connectez vous à l'interface Web: <ip de votre machine>:8080

Rancher est installé et opérationnel!

Petite parenthèse, si vous allez dans l'onglet "CATALOG" vous verrez que Rancher peut déployer un large panel d'outils:

 

2) Kubernetes

Revenons en à nos moutons, nous allons maintenant déployer Kubernetes via Rancher.

Dans un premier temps cliquez sur l'onglet "infrastructure" puis "Hosts"

Puis cliquez sur le bouton "Add Host":

Contentez vous de copier la ligne de commande au paragraphe 5 et de la coller sur toutes les machines Linux qui serviront de nœud à votre infra kubernetes (dans mon cas les 3 machines sous Debian que j'ai créées).

Cette commande va déployer un container contenant un agent Rancher qui va gérer chacune de vos machines!

Retournez dans l'onglet "infrastructure"/"Hosts" pour vérifier que vos machines sont bien remontées:

Cliquez ensuite sur "Catalog" puis cherchez "Kubernetes" et cliquez sur "View details":

Laissez tout par défaut et validez en cliquant sur le bouton tout en bas de la page.

Un nouvel onglet  "Kubernetes devrait apparaître. En cliquant dessous, vous pourrez suivre l'avancement de l'installation:

Vous pouvez suivre avec plus de détails l'installation de chaque composant Kubernetes en cliquant sur l'onglet "Kubernetes" puis "Infrastructure Stacks":

Une fois que tous les statuts seront à "Active", les composants Kubernetes seront installés:

 

Vous pouvez maintenant vous connectez à l'interface Kubernetes en cliquant sur l'onglet "Kubernetes" puis "Dashboard":

Cliquez sur "Kubernetes UI":

Vous voila connecté à l'interface Kubernetes.

Pour les personnes ayant plus de connaissances, une interface en ligne de commande est également disponible depuis l'interface de Rancher via l'onglet "Kubernetes"/"_Cli":

 

3) Déploiement d'un container

Pour vous prouver que je ne me moque pas de vous et que tout fonctionne, je vais déployer un container apache répliqué sur 2 deux nœuds:

Cliquez sur le bouton "CREATE" en haut à droite et remplissez les champs requis:

Deux container apache ont été déployés sur deux différents nœuds (très pratique pour la tolérance de panne ;-)):

En me connectant sur l'un des nœuds au hasard, mon apache répond bien!

Enjoy!

 

PostHeaderIcon AWX l’alternative gratuite à Ansible Tower

Article publiée le 03 octobre 2017

Tous les utilisateurs connaissent Ansible Tower, l'interface graphique pour gérer Ansible créé par RedHat qui est une solution très onéreuse! Hors une variante opensource existe également sponsorisé depuis peu par RedHat :AWX

Ci-dessous une petite doc d'installation dédiée adaptée aux distributions RedHat/CentOS:

  • Installez Ansible: yum install ansible
  • Créer le fichier install_aws.yml qui contiendra le playbook d'installation AWX:

- name: Deploy AWX
hosts: all
become: true
become_user: root

tasks:

- name: sort out the yum repos
yum:
name: "{{ item }}"
state: "latest"
with_items:
- "epel-release"
- "yum-utils"

- name: add the docker ce yum repo
yum_repository:
name: "docker-ce"
description: "Docker CE YUM repo"
gpgcheck: "yes"
enabled: "yes"
baseurl: "https://download.docker.com/linux/centos/7/$basearch/stable"
gpgkey: "https://download.docker.com/linux/centos/gpg"

- name: install the prerequisites using yum
yum:
name: "{{ item }}"
state: "latest"
with_items:
- "epel-release"
- "libselinux-python"
- "python-wheel"
- "python-pip"
- "git"
- "docker-ce"

- name: start and enable docker
systemd:
name: "docker"
enabled: "yes"
state: "started"

- name: install the python packages using pip
pip:
name: "{{ item }}"
state: "latest"
with_items:
- "pip"
- "ansible"
- "boto"
- "boto3"
- "docker"

- name: check out the awx repo
git:
repo: "https://github.com/ansible/awx.git"
dest: "~/awx"
clone: "yes"
update: "yes"

- name: install awx
command: "ansible-playbook -i inventory install.yml"
args:
chdir: "~/awx/installer"

 

  • Exécutez le playbook (pensez à rajouter votre machine dans le fichier /etc/ansible/hosts):

ansible-playbook -i hosts install_aws.yml

  • Une fois le playbook exécuté vous devriez avoir des container docker monté:

 

  • Connectez vous sur l'interface Web via l'url suivante: http://<ipoudnsdevotremachine>
  • Attendez que l'installation de AWX se finalise:

  • Une fois l'installation terminée authentifiez vous avec les identifiants par défaut (login : admin, mot de passe: password):

 

  • Une fois authentifié le dashboard AWX sera affiché :

Comme vous pouvez le constater l'interface AWX est identique à celle de Tower!

 

PostHeaderIcon Tutoriel | Gérez vos container docker avec Portainer

Article publié le 2 Octobre 2017

Un petit tutoriel afin de vous présenter un outil peu connu mais extrêmement puissant vous permettant de gérer vos environnements Docker avec une simplicité sans égale: Portainer.

Si vous cherchez une interface graphique pour gérer votre environnement docker, portainer est fait pour vous!

Afin de suivre ce tuto, Docker doit-être installé sur votre machine. Un tuto sur l'installation et la configuration de  docker est disponible :

https://journaldunadminlinux.fr/tuto-docker-demarrer-avec-docker/

1) Installation de Portainer

Portainer est livré nativement dans un container docker. Pour le déployer :

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /opt/portainer:/data portainer/portainer

Une fois le container déployé connectez vous à l'interface web via l'adresse suivante: http://ipdevotremachine:9000

 

2) Configuration

Lors de la première connexion, il vous sera demandé de créer le mot de passe du user admin:

Il vous sera demandé ensuite de "brancher" votre instance portainer à votre machine Docker.

Dans mon cas mon instance portainer est installée au même endroit que mon instance Docker.

Vous voilà connecté au dashboard:

2.1) Déployer un container

Nous allons tout d'abord faire un pull d'une image, pour cela cliquer sur "images" dans le menu de gauche:

Tapez le nom de l'image Docker que vous voulez utiliser puis cliquez sur "pull" (dans notre cas, nous allons faire un pull de l'image httpd).

Une fois le pull terminé, notre image sera présente dans la liste:

Nous allons maintenant déployer un container docker apache. Pour cela cliquez sur "container"

Puis sur le bouton "Add container".

Procédez au paramétrage de votre container docker grâce à cette superbe interface intuitive puis cliquez sur le bouton "start container"

 

Votre container est à présent démarré!

En cliquant sur le nom de votre container, vous aurez accès à toute la supervision nécessaire:

 

 

En cliquant sur "Stats":

2.2) Rajouter une machine docker ou un cluster docker Swarm

Comme vous avez pu le constater dans le chapitre précédent l'interface est extrêmement simple et intuitive. Cet outil vous simplifiera grandement la vie pour gérer vos environnements docker.

Pour rajouter une machine ou un cluster swarm, cliquez sur le bouton "Endpoints" situé dans le menu en bas à gauche

Comme vous l'avez compris grâce à cette fonctionnalité, vous pouvez ajouter et gérer tout vos environnement dockers!

 

Pour plus d'info le github du projet: https://github.com/portainer/portainer et un grand bravo aux développeurs!!

PostHeaderIcon Présentation de Zentyal 5

Article publié le 1er Octobre 2017

Deux après la rédaction de mon article sur la solution IPCOP (https://journaldunadminlinux.fr/tutoriel-securiser-son-reseau-avec-ipcop/), je vais partager aujourd'hui ma nouvelle découverte: Zentyal.

Zentyal est une solution de sécurité (mais pas seulement) Opensource vous offrant pleins de fonctionnalités:

  • Mise en réseau (Networking)
    • Pare-feu (informatique) et routage
      • Filtrage
      • NAT (Network address translation) et redirections de port
      • VLAN 802.1Q (Réseau local virtuel)
      • Support de passerelles IP multiples (PPPoE and DHCP)
      • Règles de passerelle multiple, équilibrage de charge et basculement automatique
      • Lissage du trafic (à l'aide d'une couche d'application)
      • Suivi graphique de la vitesse du trafic
      • Système de détection d'intrusions dans le système
      • Client DNS dynamique
    • Infrastructure réseau
      • Serveur DHCP (Dynamic Host Configuration Protocol)
      • Serveur NTP (Network Time Protocol)
      • Serveur DNS
        • Mises à jour dynamiques via DHCP (Dynamic Host Configuration Protocol)
      • Serveur RADIUS (Remote Authentication Dial-In User Service)
    • Prise en charge VPN
      • Autoconfiguration de routes dynamiques
    • Proxy HTTP
      • Cache Internet
      • Authentification de(s) utilisateur(s)
      • Filtrage de contenu (avec des listes par catégorie)
      • Antivirus transparent
    • Système de détection d'intrusions
    • Serveur mail
      • Domaines virtuels
      • Quotas
      • Soutien pour Sieve
      • Récupération de compte externe
      • POP3 et IMAP avec SSL/TLS
      • Filtre antispam et antivirus
        • Listes grises, noires et blanches
      • Filtre proxy transparent POP3
      • Compte "catch-all" (fourre-tout)
  • Messagerie internet (webmail)
  • Serveur internet (web server)
    • Hôtes virtuels
  • Autorité de certification
  • Travail de groupe (workgroup)
    • Gestion centralisée des utilisateurs et des groupes
      • Soutien maître/esclave
      • Synchronisation avec un contrôleur de domaine Windows Active Directory
    • Windows PDC
      • Système de mot de passe
      • Assistance pour les clients Windows 7
    • Partage des ressources en réseau
      • Serveur de fichiers
        • Antivirus
        • Corbeille
      • Serveur d'impression
    • Groupware: partage de calendriers, agendas, repertoire, boîte mail, wiki, etc.
    • Serveur VoIP
      • Messagerie vocale
      • Salles de conférence
      • Appels via un fournisseur externe
      • Transferts d'appels
      • Parking d'appel
      • Musique d'attente
      • Files d'attente (mise en attente)
      • Journaux d'appels
  • Serveur Jabber et (XMPP)
  • Coin des utilisateurs eBox
  • Suivi et rapports
  • Mises à jour du logiciel
  • Sauvegardes (configuration et sauvegarde de données à distance)

Pour moi, le principal avantage de Zentyal est sa simplicité d'implémentation et toutes les fonctionnalités dont elle dispose. Zentyal est la solution parfaite pour une petite entreprise/startup qui désire monter une infra sans dépenser une fortune.

 

1) Installation/Configuration

Téléchargez directement l'ISO sur le site de Zentyal: http://www.zentyal.org/server/ (Development édition).

Bootez ensuite sur l'ISO:

Sélectionnez la langue d'installation

Sélectionnez "Install Zentyal 5.0.1-development (delete all disk)".

L'installation se fera ensuite de la même manière que l'installation d'une distribution de Linux classique. D'ailleurs, Zentyal est basé sur une Ubuntu 16.04!

 

2) Présentation des fonctionnalités de Zentyal

Une fois l'installation terminée, connectez vous à l'interface Web de Zentyal via l'adresse:https://ipdevotremchine:8443.

Saisissez les identifiants que vous avez paramétrés durant l'installation:

L'assistant de configuration va démarrer:

 

Sélectionnez les composants qui vous intéressent.

Confirmez l'installation:

L'assistant d'installation va installer tout les paquets demandés:

Procédez aux paramétrages de vos cartes réseaux:

 

Une fois la configuration terminée cliquez sur le bouton "Go to the dashboard"

3) Présentation

Voici l'interface de Zentyal:

Comme vous pouvez le constater, Zentyal est une véritable boite à clic vous permettant d'installer et d'administrer de manière simple le service dont vous avez besoin (Firewall, Routeur, etc...).

Network

Zentyal n'a absolument rien à envier de ses concurrents payant (sophos, sonicwall, etc...):

On appréciera également les fonctionnalités "Balance Traffic" et "Wan Failover" vous permettant respectivement de dispatcher le trafic sortant sur plusieurs sorties internet  (si vous avez deux lignes ) ou de mettre en place une bascule automatique vers une autre ligne internet en cas de perte d'une connexion:

Firewall

L'interface de configuration du Firewall est très bien conçue:

Bref comme vous l'aurez compris Zentyal possède énormément de fonctionnalités à tel point que vous pourriez gérer l'intégralité de l'infra de votre entreprise uniquement avec cette solution.

Il faudrait une bonne centaine de page pour vous présenter l'intégralité des fonctionnalités de Zentyal, c'est pourquoi je vous laisse découvrir par vous-même cette solution absolument géniale!

Enjoy!

 

 

PostHeaderIcon Tutoriel | Répartition de charge en fonction des ressources disponibles sur vos machines avec HAPROXY

Article publiée le 23 Septembre 2017

Il y a quelque temps, je suis tombé sur la problématique suivante: comment faire en sorte que mon LoadBalancer HAProxy répartisse les connexions sur les machines ayant le moins de charge CPU?

Un collègue m'a alors fait suivre une doc qui m'a apporté la solution.

Ci-dessous un petit tuto vous expliquant comment procéder en prenant comme exemple la répartition d'un flux SSH sur 2 machines. Rien ne vous empêche d'adapter ce tuto  pour rediriger d'autres type de connexion (HTTP, etc...)

1) Configuration de votre serveur HAPROXY

  • Installez HAPROXY:

Sous Debian/Ubuntu:

apt-get install haproxy

Sous RedHat/Centos

yum install haproxy

Éditez le fichier /etc/haproxy/haproxy.cfg (pensez à faire une sauvegarde avant) et écrasez le contenu avec la configuration ci-dessous:

global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon

 

# turn on stats unix socket

stats socket /var/lib/haproxy/stats

 

defaults
mode tcp
log global
option dontlognull
option http-server-close
#option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000

 

 

listen haproxy_servers

#bind correspond au port d'écoute de votre HAPROXY

bind *:2222
mode tcp
option tcplog
timeout client 10800s
timeout server 10800s
#balance leastconn
default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 200 maxqueue 250 weight 100 error-limit 10 on-error mark-down on-marked-down shutdown-sessions agent-port 9707 agent-inter 30s
server monserveur1.mondomaine.net monserveur1.mondomaine.net:22 check agent-check observe layer4
server monserveur2.mondomaine.net monserveur2.mondomaine.net:22 check agent-check observe layer4
server localhost 127.0.0.1:22 maxconn 500 backup weight 1

 

backend servers

mode tcp
option tcplog
#balance roundrobin
server monserveur1.mondomaine.net monserveur1.mondomaine.net:22
server monserveur2.mondomaine.net monserveur2.mondomaine.net:22

2) Installation de l'agent sur les machines hôtes

Déployez l'agent en suivant les instructions ci-dessous sur chacune des machines qui recevra la charge.

  • Créez le fichier /usr/local/bin/haproxy-agent-check et insérez le script ci-dessous

#!/bin/bash
LMAX=90

load=$(uptime | grep -E -o 'load average[s:][: ].*' | sed 's/,//g' | cut -d' ' -f3-5)
cpus=$(grep processor /proc/cpuinfo | wc -l)

while read -r l1 l5 l15; do {
l5util=$(echo "$l5/$cpus*100" | bc -l | cut -d"." -f1);
[[ $l5util -lt $LMAX ]] && echo "up 100%" && exit 0;
[[ $l5util -gt $LMAX ]] && [[ $l5util -lt 100 ]] && echo "up 50%" && exit 0;
echo "down#CPU overload";
}; done < <(echo $load)

exit 0

  • Ajustez les droits pour que le script soit exécutable:

chmod +x /usr/local/bin/haproxy-agent-check

  • Installez xinetd (apt-get install xinetd ou yum install xinetd en fonction de votre distribution)
  • Éditez le fichier /etc/services et ajoutez y la ligne suivante:

haproxy-agent-check 9707/tcp                # haproxy-agent-check

  • Créez le fichier xinetd /etc/xinetd.d/haproxy-agent-check avec le contenu suivant:

# default: on
# description: haproxy-agent-check
service haproxy-agent-check
{
disable         = no
flags           = REUSE
socket_type     = stream
port            = 9707
wait            = no
user            = nobody
server          = /usr/local/bin/haproxy-agent-check
log_on_failure  += USERID
per_source      = UNLIMITED

}

  • Ajustez les droits:

chmod +x /etc/xinetd.d/haproxy-agent-check

  • Redémarrez le service xinetd

service xinetd restart

  • Une fois cette manipulation effectuée sur chacune de vos machine testez la connectivité entre votre serveur HAProxy et vos hôtes via le port 9707

telnet <DNS ou IP de votre machine> 9707

  • Redémarrez ensuite le service HaProxy sur la machine prévue à cet effet:

service haproxy restart

  • Enfin, depuis votre machine HAproxy, vérifiez que vos agents répondent correctement grâce à la commande suivante:

echo "show stat" | socat stdio unix-connect:/var/lib/haproxy/stats  | cut -d ',' -f1,2,18,19 | grep haproxy

Vous devriez avoir un retour de ce type:

haproxy_servers,FRONTEND,OPEN,
haproxy_servers,<monserveur1>,UP,100
haproxy_servers,<monserveur2>,UP,100
haproxy_servers,localhost,no check,1
haproxy_servers,BACKEND,UP,200

Voila il ne vous reste plus qu'à vous connecter sur votre machines HAPROXY (via la port 2222 dans notre cas) et vous constaterez que votre LoadBalancer répartira la charge sur la machine ayant la charge CPU la plus faible!

Enjoy 😉

 

PostHeaderIcon Monitoring | Superviser vos jobs rundeck

Article publiée le 6 Septembre 2017

I) Configuration de Rundeck

Suites aux précédents tutos sur rundeck: https://journaldunadminlinux.fr/tuto-installez-et-configurez-rundeck-ordonnanceur-opensource/ et https://journaldunadminlinux.fr/tuto-sauvegardez-vos-instances-rundeck/, je continue dans ma lancée en vous fournissant un petit script (très simpliste) vous permettant de monitorer vos jobs via un outil de supervision (zabbix, nagios, etc...)

Dans un premier temps, il est nécessaire de désactiver le délai d'expiration du token permettant de taper sur l'API de rundeck:

  • Éditez le fichier /etc/rundeck/rundeck-config.properties et ajoutez la ligne suivante:

rundeck.api.tokens.duration.max=0

  • Redémarrez Rundeck

service rundeckd restart

Authentifiez vous  avec un compte admin et cliquez sur le bouton "profil" en haut à droite de la page:

 

Créez ensuite un nouveau token en laissant à 0 le champs "Expiration in".

II) Script

Ci-dessous le script qui vous permettra de renvoyer un code erreur de votre job à votre outil de supervision en fonction de son statuts:

#!/bin/bash
URL="<URL de votre instance RUNDECK"
TOKEN="<le token généré>"
FLUX=$2
PROJECT=$1

 

function getLastStatus {
curl -s -H "Accept: application/json" -X GET "$URL/api/20/project/$PROJECT/executions?authtoken=$TOKEN"|jq '.|[ .executions[]|select(.job.name != null)|select(.job.name|contains("'"$FLUX"'"))]|sort_by(.id)|reverse |.[0]|.status'|sed 's/"//g'
}

 

# get the token for quering rundeck
# get the last status of $1
STATUS=$(getLastStatus)

case "$STATUS" in
'aborted')
echo -1
;;
'failed')
echo -1
;;
'succeeded')
echo 0
;;
*) echo 0
esac
exit 0

Pour tester il vous suffit de lancer ce script avec de bons arguments:

./checkJobRundeck.sh <nom du projet rundeck> <nom du job>

 

Il ne vous reste plus qu'à paramétrer votre outil de supervision.

PostHeaderIcon tuto | sauvegardez vos instances rundeck

Article publiée le 15 Août 2017

Suite à la rédaction du précédent article concernant l'installation et la configuration d'une instance rundeck (https://journaldunadminlinux.fr/tuto-installez-et-configurer-rundeck-ordonnanceur-opensource/), vous trouverez ci-dessous un outil permettant de sauvegarder entièrement votre instance rundeck.

 

1) Installation des prérequis

Les scripts de backups/restore que j'ai écrit utilisent le client en ligne de commande rundeck: "rd"

Installation sous Debian/Ubuntu

echo "deb https://dl.bintray.com/rundeck/rundeck-deb /" | sudo tee -a /etc/apt/sources.list
curl "https://bintray.com/user/downloadSubjectPublicKey?username=bintray" > /tmp/bintray.gpg.key
apt-key add - < /tmp/bintray.gpg.key
apt-get -y install apt-transport-https
apt-get -y update
apt-get -y install rundeck-cli

Installation sous RedHat/Centos

wget https://bintray.com/rundeck/rundeck-rpm/rpm -O bintray.repo
sudo mv bintray.repo /etc/yum.repos.d/
yum install rundeck-cli

Une fois l'installation terminée, éditez le fichier .profile du compte qui fera le backup et rajoutez y les lignes suivantes:

export RD_URL=http://<ip ou dns de votre machine rundeck>/api/20
export RD_USER=<login rundeck>
export RD_PASSWORD=<password rundeck>

2) Script de sauvegarde

Le user qui lance ce script doit avoir les privilèges root (sudo)

Ci-dessous un script de sauvegarde:

#!/bin/bash
# Variables utiles
DATE=`date +%Y%m%d`

# répertoire où les sauvegardes seront déposées
BACKUPDIRECTORY=""

# Repertoire home du user qui fera les backups
HOMEBACKUPDIRECTORY="/"
mkdir backup_tmp

echo "Création d'un DUMP de base"
mysqldump rundeck >> $HOMEBACKUPDIRECTORY/backup_tmp/rundeck.sql

echo "Récupération de la liste des projets en cours..."
rm -f list_projet.tmp
rd projects list | grep -v "#" >> list_projet.tmp

lineone=`head -1 list_projet.tmp | cut -c5-100 >> list_projet.tmp`
sed -i 1s/.*/$lineone/ list_projet.tmp

echo "Sauvegarde des projets en cours..."
while read PROJET
do
rd jobs list -f $HOMEBACKUPDIRECTORY/backup_tmp/jobs_$PROJET.xml -p $PROJET 2> /dev/null
done < list_projet.tmp
rm -f list_projet.tmp

echo "Arret de Rundeck en cours..."
sudo service rundeckd stop

echo "Copie des répertoires logs et data"
sudo cp -r /var/lib/rundeck/data $HOMEBACKUPDIRECTORY/backup_tmp
sudo cp -r /var/lib/rundeck/logs $HOMEBACKUPDIRECTORY/backup_tmp
sudo cp -r /var/rundeck $HOMEBACKUPDIRECTORY/backup_tmp

echo "Démarrage de Rundeck en cours..."
sudo service rundeckd start
sudo tar -czvf backuprundeck$DATE.tar.gz backup_tmp/*

echo "Déplacement du backup vers le serveur NFS"
sudo mv backuprundeck$DATE.tar.gz $BACKUPDIRECTORY

echo "Suppression du répertoire temporaire"
sudo rm -Rf backup_tmp

 

 

3) Script de restauration

#!/bin/bash

# répertoire où les sauvegardes sont déposées
BACKUPDIRECTORY=""

echo "Arret de rundeck"
sudo service rundeckd stop

echo "Récupération du dernier backup"
FILETORESTORE=`ls -1t /srv/rundeckconfbackup | head -1`
cp -R $BACKUPDIRECTORY/$FILETORESTORE .
sudo tar -xf $FILETORESTORE

echo "Importation du DUMP de base"
mysql rundeck < ~/backup_tmp/rundeck.sql

echo "Démarrage de rundeck"
sudo service rundeckd start

# Rundeck est long à démarrer...
sleep 90

# Purge de tout les projets avant une resto propre
echo "Purge de la conf rundeck en cours..."
rd projects list | grep -v "#" >> list_projet.tmp

lineone=`head -1 list_projet.tmp | cut -c5-100 >> list_projet.tmp`
sed -i 1s/.*/$lineone/ list_projet.tmp
while read file
do
PROJET=`echo $file | cut -d "_" -f2 | cut -d "." -f1` 2>/dev/null
rd projects delete -p $PROJET -y 2>/dev/null
done < list_projet.tmp
rm -f list_projet.tmp

 

# On récupère le nom du projet via le nom du fichier XML et pour on importe le ou les jobs
cd ~/backup_tmp
for file in `ls *.xml`
do
PROJET=`echo $file | cut -d "_" -f2 | cut -d "." -f1`
echo "Restauration du projet $PROJET"
rd projects create -p $PROJET 2>/dev/null
rd jobs load -f $file -p $PROJET 2>/dev/null
done
# On recopies le répertoire /var/lib/rundeck ainsi que les logs des JOBS
echo "Copie des logs en cours"
sudo cp -R ~/backup_tmp/logs /var/lib/rundeck
echo "Copie des datas en cours"
sudo cp -R ~/backup_tmp/data /var/lib/rundeck && sudo chown -R rundeck:rundeck /var/lib/rundeck
sudo cp -R ~/backup_tmp/rundeck /var/ && sudo chown -R rundeck:rundeck /var/rundeck

echo "Restauration terminée"
cd ..

sudo rm -Rf ~/backup_tmp
if [ -f $FILETORESTORE ]; then
sudo rm -f $FILETORESTORE
fi

 

 

PostHeaderIcon tuto | Installez et configurez rundeck (ordonnanceur opensource)

Article publié le 14 Août 2017

Article mis à jour le 17 Janvier 2018

J'ai eu l'occasion de tester pas mal d'ordonnanceur et j’ai remarqué que la plupart du temps les solutions du marché sont onéreuses, difficile à mettre en place et dur à maîtriser.

C'est pour ces raisons que j'ai été impressionné par la solution Rundeck.

Cet ordonnanceur open-source est extrêmement simple à mettre en place et à administrer. De plus énormément de plugins sont disponible ce qui permet de bénéficier d'un paquet de fonctionnalités supplémentaire (intégration d'Ansible, etc...)

 

1) Installation

Sous Debian/Ubuntu:

Installez Java:

apt-get install openjdk-8-jdk

Télécharger le paquet DEB sur le site officiel de Rundeck et installez le.

dpkg -i <nom du paquet>

 

Sous RedHat/Centos:

Installez Java:

yum install java-1.8.0-openjdk

Installez Rundeck

rpm -Uvh http://repo.rundeck.org/latest.rpm
yum install rundeck

 

Une fois l'installation terminée, démarrez le service rundeck:

service rundeckd start

Pour accéder à l'interface d'administration, connectez vous àl'URL suivante: <IP ou nom de la machine>:4440

Login et mot de passe par défaut: admin/admin

Si vous avez des difficultés à vous authentifiez (erreur 404 après avoir saisi les identifiants), lisez la suite de ce tutoriel.

 

2) Configuration

2.1) Paramétrage de la base de donnée

Par défaut, Rundeck utilise une base de donnée SqlLite. Il est préférable d'utiliser une base de donnée MySQL afin d'éviter de futures problèmes de performances:

# Sous Debian/Ubuntu

apt-get install mysql-server*

# Sous RedHat/Centos

yum install mysql

 

Authentifiez vous sur votre base mysql en root

mysql -uroot -p<votre password>

Créons ensuite la base de données rundeck:

CREATE database rundeck;

CREATE USER 'rundeck'@'localhost' IDENTIFIED BY 'rundeck';

GRANT ALL PRIVILEGES ON rundeck.* TO 'rundeck'@'localhost';

FLUSH PRIVILEGES;

Utilisez un mot plus sécurisé bien évidemment 😉

Éditez ensuite le fichier /etc/rundeck/rundeck-config.properties et modifiez les lignes suivantes:

grails.serverURL=http://<IP ou DNS de votre machine>:4440

dataSource.dbCreate = update
dataSource.url = jdbc:mysql://localhost/rundeck?autoReconnect=true
dataSource.username = rundeck
dataSource.password = rundeck
dataSource.driverClassName=com.mysql.jdbc.Driver

 

Redémarrez ensuite rundeck:

service rundeckd restart

 

2.2) Génération clés SSH

Afin de lancer un job sur une machine spécifique rundeck le protocole SSH.

Il est donc nécessaire de générer une clé privée via la commande "ssh-keygen" et de la coller dans le répertoire /var/lib/rundeck/.ssh

ssh-keygen

mkdir /var/lib/rundeck/.ssh

cp id_rsa /var/lib/rundeck/.ssh

chown -R rundeck:rundeck /var/lib/rundeck/.ssh

La clé publique (le fichier avec l'extension ".pub" généré par la commande ssh-keygen) sera a coller sur chaque machine cible dans le fichier authorized_keys du user système qui exécutera le job.

 

2.3 Création de votre premier job

Connectez-vous sur l'interface WEB de rundeck (<IP ou nom de la machine>:4440) et authentifiez vous (admin/admin par défaut).

 

Cliquez sur le bouton new projet afin de créer votre premier projet.

Renseignez le nom de votre projet et cliquez sur le bouton "create" en laissant tous les autres paramètres par défaut:

 

Cliquez ensuite sur le bouton "create a new job":

 

Indiquez tout en haut de la page le nom de votre job et positionnez vous ensuite sur l'encadré "add a step".

C'est à ce niveau que tout se joue!

Vous pouvez lancer une commande ou exécutez un script sur une machine distante comme l'exemple ci-dessous.

La partie matched nodes correspond aux machines sur lequelles vous voulez exécutez  vos jobs/workflow. Par défaut seul localhost est paramétré. Pour rajouter une machine vous devez éditer le fichier

/var/rundeck/projects/<nom de votre projet>/etc/resources.xml et ajoutez vos machines en respectant la synthaxe XML suivante:

<project>
<node name="nom de votre machine 1" description="votre description" tags="" hostname="<adresse ou ip de votre machine" osArch="amd64" osFamily="unix" osName="Linux" osVersion="votre distrib" username="user qui execute votre job sur votre machine"/>
<node name="nom de votre machine 2" description="votre description" tags="" hostname="<adresse ou ip de votre deuxième machine" osArch="amd64" osFamily="unix" osName="Linux" osVersion="votre distrib" username="user qui execute votre job sur votre machine"/>
</project>

Enregistrez vos modifications et normalement de nouveaux nodes devraient apparaître (Si ce n'est pas le cas rafraîchissez la page).

Vous avez désormais les bases pour vous lancer. Rundeck est un ordonnanceur très complet et il me serait impossible de vous expliquer chaque fonctionnalité. L'interface étant très intuitive, il vous sera très facile de trouver les fonctions dont vous avez besoin.

3) Sauvegardes/restaurations

 

tuto | sauvegardez vos instances rundeck

 

 

4) Supervisez vos jobs Rundeck

Monitoring | Superviser vos jobs rundeck

 

5) Purger les logs d’exécutions Rundeck

Script | Purger les logs d’exécution Rundeck

 

 

PostHeaderIcon Mettre à jour Debian 8 Jessie vers Debian 9 Stretch

Article publiée le 19 Juin 2017

Pour ceux qui l'ignore encore, une nouvelle version de debian est disponible en version final depuis le 17 Juin 2017.

Ci-dessous la liste des nouveautés (Sources : https://www.debian.org):

 

  • Apache 2.4.25
  • Asterisk 13.14.1
  • Chromium 59.0.3071.86
  • Firefox 45.9 (in the firefox-esr package)
  • GIMP 2.8.18
  • an updated version of the GNOME desktop environment 3.22
  • GNU Compiler Collection 6.3
  • GnuPG 2.1
  • Golang 1.7
  • KDE Frameworks 5.28, KDE Plasma 5.8, and KDE Applications 16.08 and 16.04 for PIM components
  • LibreOffice 5.2
  • Linux 4.9
  • MariaDB 10.1
  • MATE 1.16
  • OpenJDK 8
  • Perl 5.24
  • PHP 7.0
  • PostgreSQL 9.6
  • Python 2.7.13 and 3.5.3
  • Ruby 2.3
  • Samba 4.5
  • systemd 232
  • Thunderbird 45.8
  • Tomcat 8.5
  • Xen Hypervisor
  • the Xfce 4.12 desktop environment

 

Ci-dessous la procédure pour mettre à jour votre Debian Jessie:

  • Vérifiez que votre OS est à jour

apt-get update && apt-get upgrade

  • On remplace les dépôts Jessie par les dépôts Stretch

sed -i 's|jessie|stretch|' /etc/apt/sources.list && apt-get update

  • Si vous avez message d'avertissement concernant une clé:

  • Installez le paquet suivant:

apt install debian-archive-keyring

  • Enfin  vous pouvez lancez la mise à niveau

apt-get dist-upgrade

  • Une fois la mise à niveau terminée, redémarrez votre machine puis vérifiez que tout c'est bien passé:

Enjoy!

 

 

PostHeaderIcon Tuto | Installer et configurer un serveur WildFly

Article publiée le 7 Juin 2017

WildFly est un fork opensource de Jboss. Ce serveur d'application Java EE représente une alternative à crédible par rapport aux autres serveurs d'application JAVA type weblogic, websphère (tutoriel d'installation disponible ici), Jboss, etc...

Ce tutoriel explique comment installer et configurer rapidement un serveur WildFly afin qu'il soit opérationnel. Nous ne rentrerons pas dans les fonctionnalités avancées du produit.

1) Installation

Avant toute chose, Wildfly doit être exécuté via un user système dédié (surtout pas en root!).

Le choix de la distribution importera peu (Debian/Ubuntu ou Centos/RedHat feront très bien l'affaire). Assurez que JAVA soit installé sur votre serveur.

  • Authentifiez vous ensuite en tant que user wildfly (ou celui que vous avez créé)

su - wildfly

  • Téléchargez ensuite la dernière version de WildFly sur le site officiel (au moment ou ce tutoriel a été rédigé, la version 10.1.0 été en version stable.): http://wildfly.org/downloads/
  • Éditez le fichier .bashrc afin de mettre à jour les variables d'environnement $JAVA_HOME et $PATH.

export JAVA_HOME=<chemin d'installation de JAVA>
export PATH=$JAVA_HOME/bin:$PATH

  • Sans oublier de sourcer votre .bashrc

source .bash_rc

 

Décompressez ensuite l'archive précédemment téléchargée. Vous devriez avoir le contenu suivant:

 

2) Configuration

Le fichier de configuration qui va nous intéresser se situe dans le répertoire <votre répertoire d'installation>/wildfly/standalone/configuration/standalone.xml.

Les élément qui nous intéresse se situe à la fin du fichier:

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
<socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
<socket-binding name="http" port="${jboss.http.port:8080}"/>
<socket-binding name="https" port="${jboss.https.port:8443}"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
</socket-binding-group>

Les lignes ci-dessus permette de paramétrer les ports d'écoutes (port d'écoute HTTP par défaut: 8080).

 

3) Démarrage/Arrêt

Vous trouverez ci-dessous le contenu d'un shell permettant de gérer l'arret/démarrage de votre serveur WildFly

#!/usr/bin/env bash

# LANG must be explicitly set in startup script (it is not set by monit)
export LANG="en_US.utf8"

 

# Adapt  JBOSS_HOME with your current installation wildfly PATH
export JAVA_HOME="${JAVA_HOME}"
export JBOSS_HOME=/srv/wildfly/apps/wildfly
export JBOSS_PIDFILE=$JBOSS_HOME/standalone/tmp/wildfly.pid
export JBOSS_SCRIPT=$JBOSS_HOME/bin/standalone.sh
export JBOSS_CONFIG=standalone.xml
export JBOSS_CONSOLE_LOG=/srv/wildfly/logs/wilfly/console-$(date +%Y%m%d-%H%M%S).log

export SHUTDOWN_WAIT=30

export prog=wildfly
export JBOSS_BIND_ADDRESS=0.0.0.0

JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman"

#Adapt the memory tunning as you want
JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.policy-permissions=true"
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=$JBOSS_BIND_ADDRESS"
export JAVA_OPTS

EXEC_PATH=${JBOSS_HOME}/bin
cd ${EXEC_PATH}

start() {
# TODO verifier le contenu du fichier de pid
if [ -f $JBOSS_PIDFILE ]; then
read ppid < $JBOSS_PIDFILE
if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then
echo -n "$prog is already running"
echo
return 1
else
rm -f $JBOSS_PIDFILE
fi
fi

mkdir -p $(dirname $JBOSS_CONSOLE_LOG)
cat /dev/null > $JBOSS_CONSOLE_LOG

mkdir -p $(dirname $JBOSS_PIDFILE)

export LAUNCH_JBOSS_IN_BACKGROUND=1
$JBOSS_SCRIPT -c $JBOSS_CONFIG > $JBOSS_CONSOLE_LOG 2>&1 &
return 0
}

stop() {
# TODO verifier le contenu du fichier de pid
count=0;

if [ -f $JBOSS_PIDFILE ]; then
read kpid < $JBOSS_PIDFILE
let kwait=$SHUTDOWN_WAIT

# Try issuing SIGTERM

kill -15 $kpid
until [ `ps --pid $kpid 2> /dev/null | grep -c $kpid 2> /dev/null` -eq '0' ] || [ $count -gt $kwait ]
do
sleep 1
let count=$count+1;
done

if [ $count -gt $kwait ]; then
kill -9 $kpid
fi
fi
rm -f $JBOSS_PIDFILE
}

status() {
# TODO verifier le contenu du fichier de pid
if [ -f $JBOSS_PIDFILE ]; then
read ppid < $JBOSS_PIDFILE
if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then
echo "$prog is running (pid $ppid)"
return 0
else
echo "$prog dead but pid file exists"
return 1
fi
fi
echo "$prog is not running"
return 3
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
$0 stop
$0 start
;;
status)
status
;;
*)
## If no parameters are given, print which are avaiable.
echo "Usage: $0 {start|stop|status|restart|reload}"
esac

 

4) Déploiement

Pour déployer votre application JAVA (sous forme de fichier ear), il vous suffit de le placer dans le répertoire <votre répertoire d'installation>/wildfly/standalone/. Une fois la copie terminée créer un fichier vide ayant le même nom que votre fichier ear suivi de .dodeploy.

Exemple: monapplicationjava.ear.dodeploy.

Wildfly commencera à déployer votre application. Si le déploiement se passe correctement le fichier sera renommé en <nom de votre fichier ear>.deployed

Le contenu de votre application sera disponible depuis votre navigateur via le port 8080 (port HTTP par défaut).

Il est vivement conseillé de toujours utiliser un reverse proxy HTTP (apache2) devant votre serveur d'application (un tutoriel est disponible à ce sujet: https://journaldunadminlinux.fr/tutoriel-mettre-en-place-un-reverse-proxy-sur-apache-via-mod_proxy/)

PostHeaderIcon Tuto | Installer et configurer OpenNebula sous Debian

Article publié le 6 Juin 2017

Article mis à jour le 13 Janvier 2018

 

Cela fait un petit moment que je m'intéresse aux technologies Cloud (AWS, OpenStack, etc...) et OpenNebula a particulièrement attiré mon attention par sa simplicité d'installation.

C'est pourquoi, je vous propose un petit tutoriel d'installation sur OpenNebula sous Debian.

Pour suivre ce tutoriel, vous aurez besoin d'au minimum deux VMs: Une VM pour l'interface de gestion et d'une ou plusieurs VMs pour les hôtes (hyperviseurs).

 

1) Installation de l'interface de gestion

1.1) Installation des paquets

On installe les dépôts:

wget -q -O- http://downloads.opennebula.org/repo/Debian/repo.key | apt-key add -

echo "deb http://downloads.opennebula.org/repo/5.2/Debian/8 stable opennebula" > /etc/apt/sources.list.d/opennebula.list

On installe les paquets:

apt-get update & apt-get install opennebula*

A adapter selon la version de votre Debian (à l'heure ou cet article a été écrit, la 9 n'est pas encore sortie en version stable). De plus la version de opennebula (dernière version en date de cet article: 5.4) est à adapter dans le lien (deb http://downloads.opennebula.org/repo/<version opennebula>/Debian/8 stable opennebula)

 

On installe des bibliothèques Gem supplémentaires

/usr/share/one/install_gems

Activation d'openNebula:

systemctl enable opennebula
systemctl enable opennebula-sunstone

1.2) Installation du stockage partagé

On installe le serveur NFS:

apt-get install nfs-common nfs-kernel-server

Dans le fichier /etc/exports ajoutez la ligne suivante:

/var/lib/one/ *(rw,sync,no_subtree_check,root_squash)

Activez  nfs:

systemctl enable nfs-kernel-server

Démarrez nfs:

systemctl start nfs-kernel-server

1.3 Installation de la base de données

La base de données par défaut est SQLITE. Inutile de vous préciser que rester sur ce type de base de données n'est pas une solution pérenne. Nous allons donc partir sur une installation de MySQL.

Installez les paquets:

apt-get install mariadb-server

Activez Mysql:

systemctl enable mysql

Démarrez Mysql:

systemctl start mysql

Créons maintenant la base ainsi que le user MySQL:

# mysql
> CREATE DATABASE opennebula;
> GRANT ALL ON opennebula.* TO oneadmin@localhost IDENTIFIED BY 'onepassword';

Le mot de passe est à changer bien entendu 😉

Procédez à la configuration d'openNebula pour que celui-ci se connecte à votre base de données MySQL. Pour cela éditez le fichier /etc/one/oned.conf et commencer par commenter la ligne suivante :

DB = [ backend = "sqlite" ]

Ensuite, rajoutez les lignes suivantes :

DB = [ backend = "mysql",
server  = "localhost",
port    = 0,
user    = "oneadmin",
passwd  = "onepassword",
db_name = "opennebula" ]

Démarrez les services :

systemctl start opennebula
systemctl start opennebula-sunstone

2) Installation de l'hyperviseur

Sur votre deuxième VM, installez les dépôts:

wget -q -O- http://downloads.opennebula.org/repo/Debian/repo.key | apt-key add -

echo "deb http://downloads.opennebula.org/repo/5.2/Debian/8 stable opennebula" > /etc/apt/sources.list.d/opennebula.list

On installe ensuite le paquet:

apt-get update & apt-get install opennebula-node

On active libvirtd et on le démarre:

systemctl enable libvirtd
systemctl start libvirtd

Rajoutez dans votre fichier /etc/fstab la ligne suivante :

<ip de votre serveur de gestion>:/var/lib/one/ /var/lib/one/ nfs soft,intr,rsize=8192,wsize=8192 0 0

Montez le volume NFS:

mount -a

 

Maintenant que votre hyperviseur est installé nous allons le rajoutez dans le cluster opennebula depuis l'interface de gestion.

Pour cela connectez vous à l'interface Web via l'URL: http://<ip ou nom de votre machine>:9869.

Une page ressemblante à la capture d'écran ci-dessous devrait s'afficher:

Récupérez vos identifiants en affichant le contenu du fichier  /var/lib/one/.one/one_auth et identifiez-vous.

Une fois connecté, le dashboard général d'openNebula s'affiche:

 

Cliquez sur le menu "infrastructure" puis sur "Hosts":

Cliquez sur le bouton ajoutez:

Puis renseignez le hostname ou l'ip de votre hyperviseur:

Votre installation d'OpenNebula est maintenant terminée!

Vous pouvez commencer à créer des templates et provisionner des Vms

Merci à Séb pour sa contribution pour la rédaction de cet article 😉

 

PostHeaderIcon Vérifiez la sécurité de votre site wordpress avec WPSeku

Article publiée le 02/06/2017

Plus de 74 millions de sites tournent sous WordPress dans le monde. Malheureusement ce CMS est très facilement piratable ce qui fait qu'il y a énormément de site wordpress piraté dans le monde. WordPress représente à lui tout seul une faille de sécurité si celui ci n'est pas géré correctement (mise à jour régulière de wordpress et des plugins installés, vérification de la provenance des plugins, etc...) et ceux, même si vous sécurisez convenablement votre serveur (apache, OS etc...)

Après quelques recherches, j'ai trouvé un super outil développé en PYTHON permettant de faire un audit de sécurité complet d'un site wordpress: WPSEku.

Comme vous pouvez le voir sur la capture d'écran ci-dessus, ce petit script est riche en fonctionnalités.

Un grand merci au développeur pour son travail !

Ci-dessous le lien git

https://github.com/m4ll0k/WPSeku

En cas de message d'erreur lors de l’exécution de ce script, vérifiez l'installation des librairies Python nécessaire pour la bonne exécution de ce script comme python-request.

Inutile de tester cet outil sur mon site, vous risqueriez d'avoir votre IP blacklisté et de ce fait ne plus pouvoir accéder à mon blog ;-))

PostHeaderIcon PyDash | Outil de monitoring Web pour Linux

Article publiée le 11 Avril 2017

J'ai découvert par hasard un petit outil de monitoring Web en temps réel nommé PyDASH. Cet outil développé en Python vous permet d'avoir un aperçu global de votre machine:

 

1) Installation

1.1) Prérequis

Installez les prérequis:

Sous Debian/Ubuntu:

apt-get install git python-pip apache2 libapache2-mod-wsgi

Sous Redhat/Centos

Installez les dépots EPEL:

yum install epel-release

Puis installez les prérequis:

yum install git python-pip httpd mod-wsgi

 

1.2) Installation de PyDASH

On installe ensuite PyDASH:

Positionnez-vous dans le répertoire apache censé contenir le contenu (par défaut /var/www)

Rapatriez les sources depuis le dépôt GIT officiel

git clone https://github.com/k3oni/pydash

Positionnez-vous dans le répertoire pydash/pydash et changez la valeur SECRET_KEY contenue dans le fichier setting.py

Installez-le framework python Django (framework Web Python):

pip install -r requirement.txt

On initialise la base de donnée interne:

./manage.py syncdb

Ensuite attribuez les bons droits au répertoire racine pydash:

chown -R apache:apache pydash    - Pour les distribution Redhat/Centos

chown -R www-data-:www-data  - Pour les distributions Debian/Ubuntu

1.3) Configuration du serveur Apache

Sous Centos/RedHat

Créez le fichier /etc/httpd/conf.d/pyfash.conf et ajoutez y les lignes suivantes:

 

 WSGISocketPrefix run/wsgi
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
ServerName dummy-host.example.com

WSGIDaemonProcess pydash display-name=%{GROUP} python-path=/var/www/pydash
WSGIProcessGroup pydash
WSGIScriptAlias / /var/www/pydash/pydash/wsgi.py
service apache2 reload
Alias /static /var/www/pydash/static/
Alias /media /var/www/pydash/media/

<Directory /var/www/pydash/pydash>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

#CustomLog logs/pydash-access_log common
#ErrorLog logs/pydash-error_log
</VirtualHost>

Sous Debian/Ubuntu

Créez le fichier /etc/apache2/sites-available/pydash.conf et ajoutez y les lignes suivantes (sans oublier de tapez la commande "a2ensite pydash.conf" pour activer votre VirtualHost) :

 WSGISocketPrefix /var/run/apache2/wsgi
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
ServerName dummy-host.example.com

WSGIDaemonProcess pydash display-name=%{GROUP} python-path=/var/www/pydash
WSGIProcessGroup pydash
WSGIScriptAlias / /var/www/pydash/pydash/wsgi.py

Alias /static /var/www/pydash/static/
Alias /media /var/www/pydash/media/

<Directory /var/www/pydash/pydash>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

#CustomLog logs/pydash-access_log common
#ErrorLog logs/pydash-error_log
</VirtualHost>

 

 

Recharger ensuite la configuration de votre serveur apache:

service apache2 reload

 

 

 

 

 

image_print