Comment supprimer une règle précise de iptables.

Il peut parfois être nécessaire de supprimer une règle de la liste de iptables. La commande pour ce faire est assez simple. Au moins deux options s’offrent à nous.

  1. Supprimer la règle en utilisant tous ses paramètres.
sudo iptables -D <chaine> [-s <adresse IP>] [-d <adresse IP>] [-p <protocole>] [--dport <port>] -j <action>

Par exemple :

sudo iptables -D INPUT -s 1.1.1.1 -p tcp --dport 123 -j ACCEPT
  1. Supprimer la règle en utilisant son numéro de ligne.
sudo iptables -D <chaine> <numéro de ligne>

Par exemple :

sudo iptables -D INPUT 3

D’accord, c’est bien beau tout ça, mais si nous avons des centaines de règles dans notre pare-feu, comment en récupérer facilement le numéro de ligne? Dans mon cas, j’utilise fail2ban pour protéger mon serveur contre les attaques de type bruteforce sur le service SSH. Il en résulte donc que mon pare-feu contient un nombre impressionnant de règles. En fait récupéré le numéro de ligne peut-être bien plus simple qu’il n’y parait.

Par exemple, disons que je cherche à supprimer une adresse IP en particulier (ici, l’adresse 123.123.123.123) de mon pare-feu dans la chaîne fail2ban-ssh.

sudo iptables -L fail2ban-ssh -n --line-number | grep 123.123.123.123

Le résultat de cette commande (si l’adresse 123.123.123.123 est bel et bien bannie) serait similaire à ceci :

323  REJECT     all  --  123.123.123.123         0.0.0.0/0            reject-with icmp-port-unreachable

Où le contenu de la première colonne serait le numéro de ligne, dans cet exemple 323.

Il ne nous resterait qu’à supprimer la ligne 323 avec la commande suivante.

sudo iptables -D fail2ban-ssh 323

Voilà!

Mon script de message du jour perso pour Debian.

Consulter le référentiel GitLab.

#!/bin/bash

PROCCOUNT=`ps -Afl | wc -l`
PROCCOUNT=`expr $PROCCOUNT - 5`
GROUPZ=`groups`
USER=`whoami`
ADMINS=`cat /etc/group | grep --regex "^sudo" | awk -F: '{print $4}' | tr ',' '|'`
ADMINSLIST=`grep -E $ADMINS /etc/passwd | tr ':' ' ' | tr ',' ' ' | awk {'print $5,$6,"("$1")"'} | tr '\n' ',' | sed '$s/.$//'`

if [[ $GROUPZ == "$USER sudo" ]]; then
USERGROUP="Administrator"
elif [[ $USER = "root" ]]; then
USERGROUP="Root"
elif [[ $USER = "$USER" ]]; then
USERGROUP="Regular User"
else
USERGROUP="$GROUPZ"
fi
echo -e "
\033[1;31m                                      ╔═════════════════════════[\033[1;37mSystem Data\033[1;31m]═════════════════════════════════════
\033[1;31m                                      ║\033[1;37m       Hostname\033[1;31m: \033[1;37m`hostname`
\033[1;31m          _,met\$\$\$\$\$gg.               ║\033[1;37m   IPv4 Address\033[1;31m: \033[1;37m`ip addr show eth0 | grep "inet\ " | awk {'print $2'}`
\033[1;31m       ,g\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$P.            ║\033[1;37m   IPv6 Address\033[1;31m: \033[1;37m`ip addr show eth0 | grep -m 1 "inet6\ " | awk {'print $2'}`
\033[1;31m     ,g\$\$P\"\"       \"\"\"Y\$\$.\".          ║\033[1;37m         Kernel\033[1;31m: \033[1;37m`uname -r`
\033[1;31m    ,\$\$P'              \\`\$\$\$.          ║\033[1;37m         Distro\033[1;31m: \033[1;37m`cat /etc/*release | grep \"PRETTY_NAME\" | cut -d "=" -f 2- | sed 's/\"//g'`
\033[1;31m  ',\$\$P       ,ggs.     \\`\$\$b:         ║\033[1;37m         Uptime\033[1;31m: \033[1;37m`uptime | sed 's/.*up ([^,]*), .*/1/'`
\033[1;31m  \\`d\$\$'     ,\$P\"'   .    \$\$\$          ║\033[1;37m           Time\033[1;31m: \033[1;37m`date`
\033[1;31m   \$\$P      d\$'     ,    \$\$P          ║\033[1;37m            CPU\033[1;31m: \033[1;37m`cat /proc/cpuinfo | grep "model name" | cut -d ' ' -f3- | awk {'print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10'} | head -1`
\033[1;31m   \$\$:      \$\$.   -    ,d\$\$'          ║\033[1;37m         Memory\033[1;31m: \033[1;37m`free -t -m | grep "Mem" | awk {'print $4'}`MB Available, `free -t -m | grep "Mem" | awk {'print $3'}`MB Used, `free -t -m | grep "Mem" | awk {'print $2'}`MB Total
\033[1;31m   \$\$;      Y\$b._   _,d\$P'            ║\033[1;37m      HDD Usage\033[1;31m: \033[1;37m`df -T $HOME | awk '{ SUM += $3} END { printf("%.2f\n", SUM/1024/1024) }'`GB Available, `df -T $HOME | awk '{ SUM += $4} END { printf("%.2f\n", SUM/1024/1024) }'`GB Used, `df -T $HOME | awk '{ SUM += $5} END { printf("%.2f\n", SUM/1024/1024) }'`GB Total
\033[1;31m   Y\$\$.    \\`.\\`\"Y\$\$\$\$P\"'               ╠═════════════════════════[\033[1;37mUser Data\033[1;31m]═══════════════════════════════════════
\033[1;31m   \\`\$\$b      \"-.__                    ║\033[1;37m       Username\033[1;31m: \033[1;37m`whoami`
\033[1;31m    \\`Y\$\$b                             ║\033[1;37m      Usergroup\033[1;31m: \033[1;37m$USERGROUP
\033[1;31m     \\`Y\$\$.                            ║\033[1;37m     Last Login\033[1;31m: \033[1;37m`last -a $USER | head -2 | awk 'NR==2{print $3,$4,$5,$6}'` from `last -a $USER | head -2 | awk 'NR==2{print $10}'`
\033[1;31m       \\`\$\$b.                          ║\033[1;37m       Sessions\033[1;31m: \033[1;37m`who | grep $USER | wc -l`
\033[1;31m         \\`Y\$\$b.                       ║\033[1;37m      Processes\033[1;31m: \033[1;37m$PROCCOUNT of `ulimit -u` max
\033[1;31m           \\`\"Y\$b._                    ║\033[1;37m        Screens\033[1;31m: \033[1;37m`screen -ls | sed ':a;N;$!ba;s/\\n/ /g'`
\033[1;31m               \\`\"\"\"\"                  ╠═════════════════════════[\033[1;37mHelpful info\033[1;31m]════════════════════════════════════
\033[1;31m                                      ║\033[1;37m Administrators\033[1;31m: \033[1;37m$ADMINSLIST
\033[1;31m                                      ╚═══════════════════════════════════════════════════════════════════════════\e[0m
"

Configuration de mon serveur web de développement PHP7 sous Debian 8

Voici la configuration de mon serveur web de développement PHP7, Apache2, MySQL, phpMyAdmin sous Debian 8 Jessie. Vu la difficulté à installer PHP7 et phpMyAdmin, j’ai cru bon de créer un tutoriel sur la configuration de mon environnement étape par étape.

Ceci se base sur le fait que ma machine était une machine Debian de base avec comme seul paquet supplémentaire sudo. Mon utilisateur étant membre du groupe sudo.

Étape 1 : Mettre à jour les sources du gestionnaire de paquets apt.

Nous ajoutons d’abord le référentiel Dotdeb qui fournit des paquets à jour pour PHP7 (entre autres), puisque celui-ci n’est pas offert (à ce jour) dans les référentiels officiels de Debian.

Note : Ce référentiel est également valide pour Debian 7 Wheezy, il faudrait toutefois changer le nom de la version dans les commandes suivantes.

sudo bash -c "echo 'deb http://packages.dotdeb.org jessie all' >> /etc/apt/sources.list"
sudo bash -c "echo 'deb-src http://packages.dotdeb.org jessie all' >> /etc/apt/sources.list"

Étape 2 : Installer la clef GnuPG pour le référentiel de Dotdeb.

wget https://www.dotdeb.org/dotdeb.gpg
sudo apt-key add dotdeb.gpg
rm dotdeb.gpg

Étape 3 : Mettre le gestionnaire de paquets apt à jour.

sudo apt-get update

Étape 4 : Installer les paquets nécessaires.

sudo apt-get install apache2 php7.0 php7.0-fpm php7.0-gd php7.0-mysql php7.0-mbstring mysql-server

Pendant l’installation de mysql-server, vous devriez avoir à entrer un mot de passe pour l’utilisateur d’administration; ce mot de passe sera nécessaire pour tester phpMyAdmin à l’étape 9.

Étape 5 : Configurer Apache pour l’utilisation de PHP7.

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm

Puis, nous redémarrons le service web.

sudo service apache2 reload

Étape 6 : Tester l’installation d’Apache et de PHP7.

Nous créons d’abord un fichier test.php pour y afficher les informations relatives à php dans le DocumentRoot de notre serveur web. Par défaut, sous Debian 8 avec Apache2, le DocumentRoot devrait être /var/www/html/.

sudo bash -c "cat >> /var/www/html/test.php" << EOL
<?php
phpinfo();
?>
EOL

Nous devrions être capables de naviguer vers le serveur de développement sur la page test.php et obtenir quelque chose de similaire à ceci.


Étape 7 : Tester l’installation de MySQL server.

Pour tester l’installation de mysql-server, il suffit d’entrer une commande comme celle-ci :

mysql -u root -p -e "show databases"

Cette commande devrait afficher le nom des bases de données présentes sur votre serveur.

Étape 8 : Installer phpMyAdmin.

Dans ce tutoriel, j’installerai phpMyAdmin dans le répertoire /var/www/phpmyadmin et je créerai un VirtualHost pour ce répertoire.

L’archive de phpMyAdmin que nous utiliserons est au format zip, tapper la commande suivante pour installer l’utilitaire unzip si vous ne l’avez pas par défaut.

sudo apt-get install unzip

D’abord, téléchargeons l’archive de phpMyAdmin et installons-la dans le répertoire voulu.

sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.5.3.1/phpMyAdmin-4.5.3.1-all-languages.zip -P /var/www/
sudo unzip /var/www/phpMyAdmin-4.5.3.1-all-languages.zip
sudo mv /var/www/phpMyAdmin-4.5.3.1-all-languages/ /var/www/phpmyadmin
sudo rm /var/www/phpMyAdmin-4.5.3.1-all-languages.zip

Puis, nous allons créer un fichier de configuration de phpMyAdmin en nous basant sur l’exemple fourni.

sudo cp /var/www/phpmyadmin/config.sample.inc.php /var/www/phpmyadmin/config.inc.php

Et nous y modifions une ligne pour ajouter une clef Blowfish secrète à la configuration de phpMyAdmin.

k=$(openssl rand -base64 32 | sed 's,\/,\\/,g')
o="\$cfg\['blowfish_secret'\] = '';"
n="\$cfg\['blowfish_secret'\] = '$k';"
sudo perl -p -i -e "s/$o/$n/g" /var/www/phpmyadmin/config.inc.php

Maintenant, vérifions que la clef a bel et bien été ajoutée.

cat /var/www/phpmyadmin/config.inc.php | grep blowfish

La sortie devrait être similaire à ceci (avec une clef différente).

$cfg['blowfish_secret'] = 'GdU9dq0/miodjA1DtIqqqZGvHEO/k2brFzpnOec5m2o='; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

Finalement, nous créons un VirtualHost pour phpMyAdmin.

D’abord, nous créons un fichier de configuration pour le site phpMyAdmin.

sudo bash -c "cat >> /etc/apache2/sites-available/phpmyadmin.conf" << EOL
Alias /phpmyadmin /var/www/phpmyadmin

<Directory /var/www/phpmyadmin>
 Options FollowSymLinks
 DirectoryIndex index.php
</Directory>
EOL

Puis nous activons le site et nous redémarrons Apache2.

sudo a2ensite phpmyadmin.conf
sudo service apache2 restart

Étape 9 : Tester l’installation de phpMyAdmin.

Nous devrions être capables de naviguer vers le site phpMyAdmin de notre serveur de développement.

Il ne nous reste qu’à nous connecter à phpMyAdmin avec l’utilisateur root et le mot de passe choisi à l’étape 4.

Voilà!

Notre serveur web de développement est fonctionnel avec PHP7 et phpMyAdmin.

Comment récupérer l’espace disparu d’une clef USB (flash drive)

Il arrive parfois qu’après le formatage d’une clef USB, celle-ci n’affiche pas tout l’espace disponible. Par exemple, si vous avez fait un disque d’installation de Linux sur la clef, Windows n’arrivera pas facilement à récupérer l’espace, du moins, via l’interface graphique.

Gestion des disques - espace non alloué

Voici comment récupérer tout l’espace d’une clef USB.

ATTENTION : Ceci effacera tout le contenu de la clef USB, si vous avez plusieurs partitions, assurez-vous d’avoir une sauvegarde de tous fichiers importants.

Ouvrez une fenêtre de commandes :

  1. Appuyez sur les touches Win+R
  2. Tapez « cmd » dans la fenêtre
  3. Appuyez sur la touche Entrée

Dans la fenêtre de commande, veuillez procéder comme ceci :

:: Lancez diskpart.
diskpart

:: Une fois l'utilitaire de partitions lancé, tapez « list disk » pour avoir une liste des disques présents sur l'ordinateur.
DISKPART> list disk

:: Identifiez le disque à formater, dans cet exemple nous utiliserons le disque 1.
DISKPART> select disk 1

:: Vous pouvez maintenant effacer le disque, toutes données présentes sur le disque seront perdues après cette commande.
DISKPART> clean

:: Maintenant, créez une partition principale utilisant tout le disque.
DISKPART> create partition primary

:: Vous pouvez maintenant quitter l'utilitaire « diskpart ».
DISKPART> exit

Vous pouvez maintenant formater ou partitionner le disque comme bon vous semble depuis l’utilitaire de gestion des disques.

 

 

Dukesay, ah la vache!

Vous connaissez peut-être les applications cowsay et fortune qui sont disponibles dans plusieurs distributions de Linux depuis longtemps, eh bien voici dukesay. Ce projet utilise les deux applications citées et y met le célèbre Duke accompagné de quelques une de ses citations les plus « savoureuses ».

Nom du projet : Dukesay
Version actuel : 0.0.2a
Date de publication : 2014-01-08
Plateforme : Linux
Langage : bash
Auteurs : Julien Bonnier, Steven Beaupré

Versions :

0.0.2a

  • Ajout du paramètres d’entré -c.

0.0.1a

  • Ajout des paramètres d’entrés -h -l -q -s -f.

0.0.0a