Archives par étiquette : linux

Récupération de photos avec photorec

Photorec est un utilitaire fonctionnant sous Linux et Windows qui est capable (entre autres) de scanner des cartes flash illisibles et de restaurer les fichiers qui y sont enregistrés.

Voici un bref tutoriel basé sur un cas réél : la batterie était vide et l’appareil photo s’est probablement éteint durant l’écriture sur la carte, la table des fichiers étant ainsi corrompue. La récupération a été effectuée sous Linux, pour plus de souplesse.

Windows ne veut plus de la carte (« Vous devez formater le disque avant de l’utiliser »)
Parfois linux accepte la carte sans broncher, ce n’est pas le cas cette fois-ci.

Sur une Debian ou Archlinux, il faut installer le paquet testdisk, qui comprend photorec.

Pour avoir l’erreur détaillée, il suffit de lancer la commande dmesg dans un terminal.

$ dmesg
sd 2:0:0:3: [sde] 512000 512-byte hardware sectors (262 MB)
sd 2:0:0:3: [sde] Write Protect is off
sd 2:0:0:3: [sde] Mode Sense: 43 00 00 08
sd 2:0:0:3: [sde] Assuming drive cache: write through
sd 2:0:0:3: [sde] 512000 512-byte hardware sectors (262 MB)
sd 2:0:0:3: [sde] Write Protect is off
sd 2:0:0:3: [sde] Mode Sense: 43 00 00 08
sd 2:0:0:3: [sde] Assuming drive cache: write through
sde: sde1
FAT: invalid media value (0x78)
VFS: Can't find a valid FAT filesystem on dev sde1.
FAT: invalid media value (0x78)
VFS: Can't find a valid FAT filesystem on dev sde1.

Premièrement, il est préférable de travailler sur une copie de la carte, que nous allons créer dans le répertoire « photorec »

$ mkdir photorec
$ cd photorec
$ cat /dev/sde > sde.img

On obtient donc un fichier sde.img de la taille de la carte flash.
On peut vérifier qu’il s’agit bien d’une image de disque :

$ file sde.img
sde.img: x86 boot sector

Il suffit ensuite de lancer photorec en lui indiquant le fichier image

$ photorec sde.img

  • Sélectionner le fichier sde.img
  • Choisir le type de partition intel
  • Sélectionner la partition
  • Choisir le système de fichiers Other (FAT)
  • Choisir « Free »
  • Taper Y pour enregistrer les images trouvées dans le répertoire en cours, dans le répertoire recup_dir.1

S’il manque des images, relancer l’opération en modifiant les options

  • Brute force: Yes
  • Whole disk

Une fois les images récupérées, le fichier .img peut être supprimé, et la carte formatée.

Astuce : Si des images jpeg semblent endommagées avec certains logiciels (comme Photoshop), essayer de les ouvrir avec Gimp.

Site officiel de photorec

Enabling Wake on Lan on DLink DFE-538TX

I’ve installed a D-Link DFE 538 TX network card (via rhine chipset) in my computer but wake on lan didn’t seem to work.
I discovered that I could (and I had) to enable it at each reboot, using ethtool

root@ale:~# ethtool eth1
Settings for eth1:
       Supported ports: [ TP MII ]
       Supported link modes:   10baseT/Half 10baseT/Full 
                               100baseT/Half 100baseT/Full 
       Supports auto-negotiation: Yes
       Advertised link modes:  10baseT/Half 10baseT/Full 
                               100baseT/Half 100baseT/Full 
       Advertised auto-negotiation: Yes
       Speed: 100Mb/s
       Duplex: Full
       Port: MII
       PHYAD: 8
       Transceiver: internal
       Auto-negotiation: on
       Supports Wake-on: pumbg
       Wake-on: d
       Current message level: 0x00000001 (1)
       Link detected: yes

According to ethtool’s man page :

      wol p|u|m|b|a|g|s|d...
             Set  Wake-on-LAN  options.  Not all devices support this.  
             The argument to this option is a string of characters specifying
             which options to enable.
             p  Wake on phy activity
             u  Wake on unicast messages
             m  Wake on multicast messages
             b  Wake on broadcast messages
             a  Wake on ARP
             g  Wake on MagicPacket(tm)
             s  Enable SecureOn(tm) password for MagicPacket(tm)
             d  Disable (wake on nothing).  This option clears all previous options.

So wake on lan is disabled each time I turn on my computer.
To enable all wake-on-lan options:

ethtool -s eth1 wol pumbg

And to enable them at each system startup :

echo "/usr/sbin/ethtool -s eth1 wol pumbg" | tee -a /etc/rc.local 

I can now use wakeonlan to wake up my computer… And it’s written in dmesg :

via-rhine: Woke system up. Reason: Magic packet.

Copie de disque via un fifo

Voici la copie d’un message que j’ai posté sur gentoo-user-fr il y a quelques années :

>J ai deux serveurs avec le meme materiel (exactement)
>sur l un il y a gentoo sur l autre rien
>
>comment puis-je au mieux repliquer, l installation, de l un vers l autre
>
>Merci d avance
>
>bernhard@... 
>
>--
>gentoo-user-fr@g.o mailing list
>
Salut,
La procédure que j'utilise est la suivante :
Je mets les deux disques durs dans le même PC.
Soit hda le disque avec la gentoo et hdb le disque vide.
Je monte le disque vide dans /mnt/vide
Je créée un fifo :
mkfifo /tmp/fifo
Je lance un en arrière plan "tar" de la gentoo existante vers le fifo, 
en lui disant de conserver les permissions et d'omettre /mnt/vide :
tar cvp / -X /mnt/vide > /tmp/fifo&
Je vais dans /mnt/vide :
cd /mnt/vide
Je détarre le contenu de fifo :
tar xvp < /tmp/fifo
A la fin, je supprime /tmp/fifo
Ainsi j'ai exactement la même chose sur les deux disques.
L'option -X de tar permet d'exclure des répertoires, comme /tmp , 
/var/log, /var/tmp
Comme il est préférable qu'il n'y ait pas de fichiers ouverts, il est 
possible d'effectuer cette opération en bootant sur un livecd (celui de 
la gentoo ou une knoppix).
Il faut ensuite penser à changer au moins le hostname sur la seconde  
machine.

Rediriger un port avec iptables et ssh

Une petite démonstration de la puissance et de la souplesse de Linux :

Le contexte

Suite à un déménagement, ma connexion ADSL tardait à revenir, et mes mails commençaient à s’entasser sur un MX secondaire herbegé par un ami. Ne voulant pas attendre, je me décidais à utiliser une connexion internet RTC pour rapatrier mon courrier, mais je ne voulais pas modifier la configuration du serveur mail distant. De plus, l’adresse IP de la connexion RTC n’étant pas fixe, cela m’aurait obligé à modifier cette configuration à chaque connexion.

La solution

mxsecondaire essayait de se connecter à mxprincipal (dont l’ancienne IP fixe était A.A.A.A) de façon régulière.
Il fallait donc arriver à détourner de trafic de mxsecondaire à destination de mxprincipal:25 pour l’amener à bon port.

La solution consistait donc à:

  • Connecter mxprincipal à internet via un windows XP qui possédait un modem RTC
  • Ouvrir une session ssh de mxprincipal sur mxsecondaire, en activant le forward de ports de mxsecondaire:65000 vers mxprimaire:25
  • Sur mxsecondaire, détourner le trafic sortant vers A.A.A.A:25 et le renvoyer vers 127.0.0.1:65000
  • Attendre une saisie de l’utilisateur pour remettre tout correctement en place et se déconnecter

LA ligne de commande

Evidemment, en bon linuxien, il fallait que tout cela se fasse en une seule ligne de commande, lancée depuis mxprimaire

ssh mxsecondaire -R 65000:localhost:25 "iptables -A OUTPUT -t nat -p tcp -d A.A.A.A 
--dport 25 -j DNAT --to 127.0.0.1:65000 &&  echo "Appuyer sur entrée pour quitter" && 
read && iptables -D OUTPUT -t nat -p tcp -d A.A.A.A --dport 25 -j DNAT --to 127.0.0.1:65000"

Petite explication de texte:

ssh mxsecondaire -R 65000:localhost:25

On se connecte en ssh de mxprimaire vers mxsecondaire, en activant le forward du port 65000 distant vers le port 25 local, et en executant la commande indiquée après. Une fois l’éxécution de celle-ci terminée, la connexion ssh est fermée.

iptables -A OUTPUT -t nat -p tcp -d A.A.A.A --dport 25 -j DNAT --to 127.0.0.1:65000 

On dit au noyau de rediriger tout le traffic sortant à destination de A.A.A.A:25 vers le port 65000

echo "Appuyer sur entrée pour quitter" && read 

On attend l’appui sur entrée pour continuer (le temps que les emails soient rapatriés)

iptables -D OUTPUT -t nat -p tcp -d A.A.A.A --dport 25 -j DNAT --to 127.0.0.1:65000

On annule ce qui a été fait auparavant

Et voilà… En espérant que ça en inspirera d’autres.

OpenWRT to Zywall VPN

Here is how I configured my Linksys WRT54G routeur/AP to connect to my office’s Zywall 70

              --------                  --------
      Home --| WRT54G |--- Internet ---| Zywall |--- Office
              --------                  --------                
192.168.3.X         W.W.W.W          Z.Z.Z.Z          192.168.2.x

Linksys WRT54G

Backup your access point, go to http://openwrt.org, read carefully the wiki, and install the latest OpenWRT release. WhiteRussian RC6 worked for me.

I upgraded from an old Alchemy release, and all my settings were kept.

Install openswan

#ipkg update
#ipkg install openswan

Create /etc/ipsec.d/private/zywall

conn zywall
       right=%defaultroute
       rightsubnet=192.168.3.0/24
       rightid=@someid
       left=Z.Z.Z.Z
       leftsubnet=192.168.2.0/24
       leftid=@someid
       authby=secret
       pfs=no
       ike=aes128-sha1-modp1024
       esp=3des-md5-96
       keylife=9600s
       keyingtries=0
       auto=add
       dpddelay=30

Modify /etc/ipsec.conf to include your new config

# Add connections here
include /etc/ipsec.d/private/zywall

Add you preshared key in /etc/ipsec.secrets

@someid @someid: PSK "mysecret"

Zywall 70

Open « VPN Rule (IKE) » tab and add a new gateway policy

  • Remote Gateway Address : W.W.W.W
  • Pre-Shared Key : mysecret
  • Negotiation Mode : Main
  • Encryption Algorithm: AES
  • Authentication Algorithm : SHA1
  • SA Life Time (Seconds): 9600
  • Key Group : DH2

Add a new network policy

  • Active: Yes
  • Local Network
    • Address Type: Subnet address
    • Starting IP Address: 192.168.2.0
    • Subnet Mask: 255.255.255.0
  • Remote Network
    • Address Type: Subnet address
    • Starting IP Address: 192.168.3.0
    • Subnet Mask: 255.255.255.0
  • Encapsulation Mode: Tunnel
  • Active Protocol: ESP
  • Encryption Algorithm : 3DES
  • Authentication Algorithm: MD5
  • SA Life Time (Seconds): 28800
  • Prefect Forward Secrecy: None
  • Enable Replay Detection: Yes

It should now work. Try to connect the VPN from the WRT54G:

# ipsec auto --up zywall
104 "zywall" #26: STATE_MAIN_I1: initiate
003 "zywall" #26: ignoring unknown Vendor ID payload [afcad71368a1f1c96b8696fc7757]
003 "zywall" #26: ignoring unknown Vendor ID payload [625027749d5ab97f5616c1602765cf480a3b7d0b]
106 "zywall" #26: STATE_MAIN_I2: sent MI2, expecting MR2
108 "zywall" #26: STATE_MAIN_I3: sent MI3, expecting MR3
004 "zywall" #26: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_PRESHARED_KEY cipher=aes_128 prf=oakley_sha group=modp1024}
117 "zywall" #27: STATE_QUICK_I1: initiate
004 "zywall" #27: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0x595ef372 <0xb540297d xfrm=3DES_0-HMAC_MD5 NATD=none DPD=none}

Hiding the personnal network

It works, but my colleagues can now browse my home network. I want to « masquerade » the 192.168.3 subnet, so all connections seems to come from 192.168.203.1 :

                  ---------                  --------
      Home -- (NAT) WRT54G |--- Internet ---| Zywall |--- Office
                  ---------                  --------                
192.168.3.x  192.168.203.x  W.W.W.W   Z.Z.Z.Z          192.168.2.x

Edit /etc/firewall.user :

iptables -t nat -A postrouting_rule -d 192.168.2.0/255.255.255.0 -j SNAT --to 192.168.203.1
iptables -A forwarding_rule -d 192.168.2.0/24 -j ACCEPT

Run /etc/firewall.user to apply theses rules
Modify the ipsec rules to use 192.168.203.x instead of 192.168.3.x

Notes

  • The local and remote ID must be the same
  • 3DES/MD5 is not the most secure cypher for phase 2, but other cyphers does not seem to work
  • See openwrt wiki for encryption and speed
  • This should work with any zywall model and with ipsec-capable Prestige models (652, 662). Some buggy firmwares (Zywall 10) use local and/or remote id instead of « secure gateway address ».

Choisir un serveur ntp

Pour être sûr que son ordinateur reste à l’heure, la méthode universelle consiste à le synchroniser à un serveur de temps en utilisant le protocole ntp.
De nombreux serveurs ntp publics existent, une liste est disponible ici, mais les règles d’utilisation sont assez strictes.

La solution, car elle existe, est apportée par le projet pool.ntp.org : elle consiste à utiliser le nom dns pool.ntp.org, qui est un enregistrement renvoyant sur un des serveurs ntp enregistrés auprès du projet. Il est possible d’utiliser d’autres enregistrements dns qui ne renverront que des serveurs présents dans une zone géographique donnée, par exemple europe.pool.ntp.org ou fr.pool.ntp.org.

Quand on monte son propre serveur ntp, il est conseillé d’utiliser 3 serveurs différents, il suffit donc de choisir par exemple 0.pool.ntp.org, 1.pool.ntp.org et 2.pool.ntp.org. Facile !