[Update 2021] Protéger les accès de son serveur par DynHost

Publié par David le

Cet article est inclus dans la série « Gérer son entreprise avec une clé USB »

Si vous utilisez des outils comme Odoo, un PIM ou un Cloud, je vous conseille de restreindre leur accès à l’aide d’un DynHost sur une clé USB.

En clair, pour avoir accès à ces site internet il faudra que vous possédiez la clé USB qui contient l’accès DNS. Il s’agit pour moi de la meilleure sécurité possible pour protéger les accès de son serveur !

Prérequis

  • Accès au DNS de son nom de domaine (OVH dans cet article)
  • Une clé USB
  • Apache 2

Télécharger BaliDNS : https://www.clubic.com/telecharger-fiche376938-bali-dyndns.html
Décompresser l’archive dans la clé USB

Configuration côté OVH

Rendez-vous dans Domaine > Votre domaine > DynHost > Gérer les accès > Créer un identifiant

  • Mot de passe : votre mot de passe

Configuration côté client

Ouvrez BaliDNS et régler le comme ci-dessous :

  • Dans l’onglet Setup > Service 1
    • Service > ovh.com
    • User/Pass > 
    • Update your IP for these hosts > 1 > 
  • Dans l’onglet Proxy
    • Choose an automatic router config > Choose your router model …
    • URL giving your public IP > http://checkip.dyndns.org/
    • The IP in the file starts after > Address:

La configuration est maintenant terminée.

Configuration côté serveur

Le script

mkdir /home/dynhost
sudo nano /home/dynhost/iptables-dns_update
#!/bin/bash
#

# DynHost table
dyndns=("user1.domain.com" "user2.domain.com")

# IP files table
ipfile=("/home/dynhost/ipfile_user1" "/home/dynhost/ipfile_user2")

# Ports table
portlist=('20:21 49152:65535 27015'		#tab_user1
        '20:21 49152:65535 27016'		#tab_user2
)

IFS=' ' # space is set as delimiter

for i in "${!dyndns[@]}"
	do

	# testing: printf "%s\t%s\n" "$i" "${dyndns[$i]}"

	# Get back current ip of user
	DYN=${dyndns[i]}
	echo "Updating user $DYN (loop $i)"

	IP=`/usr/bin/dig +short $DYN | /usr/bin/tail -n 1`
	if [ "${#IP}" = "0" ]; then
		echo "Can get back ip of user $DYN"
		exit
	fi

	OLDIP=""

	if [ -a $ipfile ]; then
		OLDIP=`cat ${ipfile[$i]}`
	fi

	# Saving new IP
	echo $IP>${ipfile[$i]}
	echo "iptables updating"

	if [ "${#OLDIP}" != "0" ]; then
		echo "Removing old ip of user $DYN ($OLDIP)"

		# str is read into an array as tokens separated by IFS to split
		read -ra ADDR <<< ${portlist[i]}     read -ra ADDR <<< ${portlist[i]}

		for j in "${ADDR[@]}"; do # access each element of array
			/sbin/iptables -D dynchain -i eth0 -s $OLDIP -p tcp --dport $j -j ACCEPT
		done
	fi

	echo "Adding rules of user $DYN ($IP)"

	for j in "${ADDR[@]}"; do # access each element of array

		echo "New rule - User: $DYN, IP: $IP, Port: $j"
		/sbin/iptables -A dynchain -i eth0 -s $IP -p tcp --dport $j -j ACCEPT
	done

	echo "----------------------------------------------------"

done

Remplacer les valeurs des lignes ci-dessous par vos valeurs

dyndns=("user1.domain.com" "user2.domain.com")
ipfile=("/home/dynhost/ipfile_user1" "/home/dynhost/ipfile_user2")
portlist=('20:21 49152:65535 27015' #tab_user1 '20:21 49152:65535 27016' #tab_user2 )

Les fichiers user

sudo nano /home/dynhost/ipfile_user1
sudo nano /home/dynhost/ipfile_user2

Rajouter l’IP actuelle de l’utilisateur dans les fichiers ipfile_login

Crontab

sudo su
crontab -e
# On ajoute la ligne
*/1 * * * * /home/dynhost/iptables-dns_update > /home/dynhost/dynhost.log 2>&1

Apache2

Je vais traiter le cas d’une utilisation d’Apache 2 mais il est tout à fait possible de réaliser ces opérations pour Nginx par exemple.

sudo nano /etc/apache2/sites-available/votredomaine.com
<VirtualHost *:80>

    ServerName votredomaine.com
    ServerAlias votredomaine.com

...

# On ajoute ces lignes
    <Location />
           Require all denied
           Require forward-dns login.mcdavidian.com
           Require forward-dns login2.mcdavidian.com
           ...
    </Location>
# Fin

...

</VirtualHost>

Firewall

# Ajouter les lignes

# DynHost
iptables -N dynchain
iptables -I INPUT 1 -j dynchain

Usage

Pour initialiser le DynHost il suffit d’ouvrir BaliDNS et de cliquer sur :

  • Dans l’onglet Setup > Update IP in database if necessary

À chaque changement d’adresse ip, il suffit de réitérer cette manipulation.

À noter que toute les machines qui ont la même adresse IP que vous auront accès à votre serveur. Une piste d’amélioration est de limiter l’accès à l’adresse IP – et – à la machine (adresse MAC). Un autre billet suivra pour discuter de ce sujet.

Catégories : HacklifeLinux

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *