Créer un CD pour booter sur une clé usb

Rebijour …
Encore un truc super inutile (j’essaie de battre mon record ;)), le boot but étant de booter sur un CD (sur une vieille bouse qui ne sait pas démarrer sur USB par exemple (c’est d’ailleurs le seul cas où ça me semble utile ;))). Sinon, pour que la chose soit utile, je vous montrerais la manip à faire pour créer un CD de boot pour un BT4 sur clé USB.

Tout d’abord (à exécuter sous linux bien entendu) :

mkdir -p isobootusb/boot/grub && cp /usr/lib/grub/i386-pc/stage2_eltorito isobootusb/boot/grub

ensuite, il faut créer un fichier nommé menu.lst dans le dossier isobootusb/boot/grub qui contient :

default 0
timeout 5
title BT4 CD Boot
root (cd)
kernel /boot/vmlinuz ramdisk_size=6666 root=/dev/ram0 initrd=initrd.gz rw verbose quiet
initrd /boot/initrd.gz

Puis on copie les fichiers initrd.gz et vmlinuz du dossier boot de l’iso (ou de l’usb de BT4) dans le dossier isobootusb/boot
et on execute la sympatique commande qui créera l’iso tant convoité :

cd isobootusb && mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o grub.iso ./

Et un superbe fichier iso de 7 à 50 mo apparaitra (c’est petit :p) reste plus qu’a tester avec virtualbox, ou à graver (sur un disque RW ^^).
Pour les débutants, le mieux est de tester tout de suite l’iso avec virtualbox (plus rapide, et si y’a un bug, il suffit de regen l’iso et de relancer la machine virtuelle) :
Tout d’abord, on choisit le périphérique usb surlequel on veut booter :

usb-boot1

Ensuite, on charge le bon iso :

usb-boot2

Et on démarre la machine virtuelle, si tout marche bien on tombe la-dessus :

usb-boot-final

A noter, que si l’on connait les codes à utiliser pour charger direct les bonnes locales, on pourrait réussir à se connecter direct en Fr avec le clavier en AZERTY, mais comme je les connait pas …

Synchroniser le calendrier Evolution et Google Agenda

Bijour à vous … voici l’astuce inutile du jour 😉

« Dernièrement » (depuis quelque temps déjà, mais c’est que maintenant que j’ai testé ^^), Évolution a apporté la possibilité de synchroniser son calendrier avec le calendrier en ligne de google … mais c’était seulement un accès en lecture via un fichier xml (iCalc), grâce à la version actuellement  sur intrepid (2.24), il est possible d’avoir un accès en écriture sur le calendrier de google !!
Comment on fait ??
1. On ouvre evolution
2. Fichier -> nouveau -> calendrier
3. Ensuite : (une fois le login entré, il faut cliquer sur « récupération de la liste » pour avoir accès aux différents calendriers).
creer-calendrier

(A part si vous utilisez google pour gérer votre domaine, il vous faudra mettre votre adresse gmail …)

Et voilà … vous n’aurez plus qu’à créer de nouvelles tâches depuis Evolution pour qu’elles soient synchronisées avec Google Calendar.

Comme ça plus besoin de passer par gcaldaemon ou scheduleworld, pour synchroniser tout ça.

Administration de serveurs apache : modsecurity2

Bijour

Bé voilà vé parler du modsecurity2 … pourquoi ?? Ben on trouve pas mal de tut’s sur le net, mais c’est que pour le mod_security (sans le 2 ^^), et la syntaxe à malheureusement changée depuis.

Donc voilà …

Il faut tout d’abord rajouter un dépôt (le mien ^^) au fichier /etc/apt/sources.list :

deb http://ppa.launchpad.net/cipher.16/ppa/ubuntu intrepid main

et rajouter la clé associée au dépôt :

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

Ensuite faire un apt-get install modsecurity2 && a2enmode mod-security2.

Pourquoi préférer cette version à celle de inittab (proposé par la doc de modsecurity) ?? … parce que c’est la dernière version stable (2.5.7, qui permet des trucs sympa … cf. la fin de l’article ;))

Par défaut, tous les fichiers de configuration liés au modsecurity2 sont bazardés dans le dossier /usr/share/apache/mod_security2_rules (je suis pas assez doué pour faire du post-install dans mes paquets …), vous pouvez soit les déplacer dans le dossier  /etc/apache2/conf.d/, mais il faudra un peu les retoucher (surtout le modsecurity_crs_10_config.conf en modifiant les fichiers de logs, sinon des erreurs apparaitront lors du démarrage du serveur).

Pour utiliser les fichiers de configuration fournit par le paquet :

cat /usr/share/apache2/mod_security2_rules/*.conf >> /etc/apache2/conf.d/security

et modifier toutes les lignes en rapport avec les logs, pour cela, remplacez :

SecAuditLog logs/modsec_audit.log par SecAuditLog /var/log/apaches2/modsec_audit.log
SecDebugLog logs/modsec_debug.log par SecDebugLog /var/log/apache2/modsec_debug.log

Ou bien, vous pouvez faire votre propre fichier de configuration, grâce à la superbe doc.

Pour cela, allez dans le dossier /etc/apache2/conf.d/ et modifiez le fichier security.conf, ou bien en créer un nommé … du nom que vous voulez.

Dans lequel il faudra mettre (au minimum, histoire de faire propre) :

<IfModule mod_security2.c>
ServerTokens Full
ServerSignature On
TraceEnable Off

SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On

SecAuditLog /var/log/apache2/mod_secure.log
## RESTE DE LA CONFIG A METTRE ICI

## NE PAS TOUCHER PLUS LOIN

Et on met quoi dans cette configuration ???

Plein de choses diverses et variées (on peut aussi rajouter quelque lignes des fichiers d’exemple dans /usr/share/apache2/mod_security2_rules, qui peuvent être très intéressante pour bloquer les injections, …).
Pour induire en erreurs/bloquer certains scanners :

Changement de la signature du serveur (un peu grossié ^^ mais ça peut induire en erreur les n00b … ça fait toujours ça de moins) :

SecServerSignature "Windows 2003 IIS/6.0"
SecRule REQUEST_HEADERS:User-Agent ".*perl.*" "t:none,msg:'Perl based user agent identified'"
SecRule REQUEST_HEADERS:User-Agent ".*nikto.*" "t:none,msg:'Nikto Scanners Identified'"
SecRule REQUEST_HEADERS:User-Agent "(?:\b(?:m(?:ozilla\/4\.0 \(compatible\)|etis)|webtrends security analyzer|pmafind)\b|n(?:-stealth|sauditor|essus|ikto)|b(?:lack ?widow|rutus|ilbo)|(?:jaascoi|paro)s|webinspect|\.nasl)" \
"phase:2,t:none,t:lowercase,deny,log,auditlog,status:404,msg:'Request Indicates a Security Scanner Scanned the Site',id:'990002',tag:'AUTOMATION/SECURITY_SCANNER',severity:'2'"
SecRule REQUEST_HEADERS_NAMES "\bacunetix-product\b" \
"phase:2,t:none,t:lowercase,deny,log,auditlog,status:404,msg:'Request Indicates a Security Scanner Scanned the Site',id:'990901',tag:'AUTOMATION/SECURITY_SCANNER',severity:'2'"
SecRule REQUEST_FILENAME "^/nessustest" \
"phase:2,t:none,t:lowercase,deny,log,auditlog,status:404,msg:'Request Indicates a Security Scanner Scanned the Site',id:'990902',tag:'AUTOMATION/SECURITY_SCANNER',severity:'2'"

Bloquer les requêtes zarb :

SecRule REQUEST_LINE "!(^((?:(?:pos|ge)t|head))|http/(0\.9|1\.0|1\.1)$)" \
"t:none,t:lowercase,msg:'Un imbécile qui connait pas le http'"

Bloquer les accès direct à l’ip du serveur : (cas courant de scan)

SecRule REQUEST_HEADERS:Host "^[\d\.]+$" \
"log,deny,status:404,t:lowercase,msg:'Connexion direct a l\'ip du serveur'"

Protection contre des fuites lors  d’erreurs mysql : (qui pourrait permettre à des petits malin de connaître les tables utilisées, …)

SecRule RESPONSE_BODY "(?:\b(?:(?:s(?:elect list because it is not contained in (?:an aggregate function and there is no|either an aggregate function or the) GROUP BY clause|upplied argument is not a valid (?:(?:M(?:S |y)|Postgre)SQL|O(?:racle|DBC)))|S(?:yntax error converting the \w+ value .*? to a column of data type|QL Server does not exist or access denied)|Either BOF or EOF is True, or the current record has been deleted(?:; the operation|\. Requested)|The column prefix .{0,50}? does not match with a table name or alias name used in the query|Could not find server '\w+' in sysservers\. execute sp_addlinkedserver)\b|Un(?:closed quotation mark before the character string\b|able to connect to PostgreSQL server:)|(?:Microsoft OLE DB Provider for .{0,30} [eE]rror |error '800a01b8)'|(?:Warning: mysql_connect\(\)|PostgreSQL query failed):|You have an error in your SQL syntax(?: near '|;)|cannot take a \w+ data type as an argument\.|incorrect syntax near (?:\'|the\b|@@error\b)|microsoft jet database engine error '8|ORA-\d{5}: )|\[Microsoft\]\[ODBC )" \
"phase:4,t:none,ctl:auditLogParts=+E,deny,log,auditlog,status:500,msg:'SQL Information Leakage',id:'970003',tag:'LEAKAGE/ERRORS',severity:'4'"

Protection contre des fuites concernant des erreurs php ou un affichage de code php (source code disclosure comme on dit :p) :

SecRule RESPONSE_BODY "<b>Warning<\/b>.{0,100}?:.{0,1000}?\bon line\b" \
"phase:4,t:none,ctl:auditLogParts=+E,deny,log,auditlog,status:500,msg:'PHP Information Leakage',id:'970009',tag:'LEAKAGE/ERRORS',severity:'4'"
SecRule RESPONSE_BODY "(?:\b(?:f(?:tp_(?:nb_)?f?(?:ge|pu)t|get(?:s?s|c)|scanf|write|open|read)|gz(?:(?:encod|writ)e|compress|open|read)|s(?:ession_start|candir)|read(?:(?:gz)?file|dir)|move_uploaded_file|(?:proc_|bz)open)|\$_(?:(?:pos|ge)t|session))\b" \
"phase:4,t:none,ctl:auditLogParts=+E,log,auditlog,msg:'PHP source code leakage',id:'970015',tag:'LEAKAGE/SOURCE_CODE',severity:'4'"
SecRule RESPONSE_BODY "<\?(?!xml)" \
"phase:4,chain,t:none,ctl:auditLogParts=+E,log,auditlog,msg:'PHP source code leakage',id:'970902',tag:'LEAKAGE/SOURCE_CODE',severity:'4'"
SecRule RESPONSE_BODY "!(?:\b(?:(?:i(?:nterplay|hdr|d3)|m(?:ovi|thd)|(?:ex|jf)if|f(?:lv|ws)|varg|cws)\b|r(?:iff\b|ar!B)|gif)|B(?:%pdf|\.ra)\b)" "t:none"

Protection contre les XSS :

SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES|REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer "@pm jscript onsubmit copyparentfolder javascript meta onmove onkeydown onchange onkeyup activexobject expression onmouseup ecmascript onmouseover vbscript: <![cdata[ http: settimeout onabort shell: .innerhtml onmousedown onkeypress asfunction: onclick .fromcharcode background-image: .cookie ondragdrop onblur x-javascript mocha: onfocus javascript: getparentfolder lowsrc onresize @import alert onselect script onmouseout onmousemove background application .execscript livescript: getspecialfolder vbscript iframe .addimport onunload createtextrange onload <input" \
"phase:2,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:compressWhiteSpace,t:lowercase,pass,nolog,skip:1"
SecAction phase:2,pass,nolog,skipAfter:959004
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES "(?:\b(?:(?:type\b\W*?\b(?:text\b\W*?\b(?:j(?:ava)?|ecma|vb)|application\b\W*?\bx-(?:java|vb))script|c(?:opyparentfolder|reatetextrange)|get(?:special|parent)folder|iframe\b.{0,100}?\bsrc)\b|on(?:(?:mo(?:use(?:o(?:ver|ut)|down|move|up)|ve)|key(?:press|down|up)|c(?:hange|lick)|s(?:elec|ubmi)t|(?:un)?load|dragdrop|resize|focus|blur)\b\W*?=|abort\b)|(?:l(?:owsrc\b\W*?\b(?:(?:java|vb)script|shell|http)|ivescript)|(?:href|url)\b\W*?\b(?:(?:java|vb)script|shell)|background-image|mocha):|s(?:(?:tyle\b\W*=.*\bexpression\b\W*|ettimeout\b\W*?)\(|rc\b\W*?\b(?:(?:java|vb)script|shell|http):)|a(?:ctivexobject\b|lert\b\W*?\(|sfunction:))|<(?:(?:body\b.*?\b(?:backgroun|onloa)d|input\b.*?\btype\b\W*?\bimage)\b| ?(?:(?:script|meta)\b|iframe)|!\[cdata\[)|(?:\.(?:(?:execscrip|addimpor)t|(?:fromcharcod|cooki)e|innerhtml)|\@import)\b)" \
"phase:2,capture,t:none,t:htmlEntityDecode,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:'Cross-site Scripting (XSS) Attack',id:'950004',tag:'WEB_ATTACK/XSS',logdata:'%{TX.0}',severity:'2'"
SecRule REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer "(?:\b(?:(?:type\b\W*?\b(?:text\b\W*?\b(?:j(?:ava)?|ecma|vb)|application\b\W*?\bx-(?:java|vb))script|c(?:opyparentfolder|reatetextrange)|get(?:special|parent)folder|iframe\b.{0,100}?\bsrc)\b|on(?:(?:mo(?:use(?:o(?:ver|ut)|down|move|up)|ve)|key(?:press|down|up)|c(?:hange|lick)|s(?:elec|ubmi)t|(?:un)?load|dragdrop|resize|focus|blur)\b\W*?=|abort\b)|(?:l(?:owsrc\b\W*?\b(?:(?:java|vb)script|shell|http)|ivescript)|(?:href|url)\b\W*?\b(?:(?:java|vb)script|shell)|background-image|mocha):|s(?:(?:tyle\b\W*=.*\bexpression\b\W*|ettimeout\b\W*?)\(|rc\b\W*?\b(?:(?:java|vb)script|shell|http):)|a(?:ctivexobject\b|lert\b\W*?\(|sfunction:))|<(?:(?:body\b.*?\b(?:backgroun|onloa)d|input\b.*?\btype\b\W*?\bimage)\b| ?(?:(?:script|meta)\b|iframe)|!\[cdata\[)|(?:\.(?:(?:execscrip|addimpor)t|(?:fromcharcod|cooki)e|innerhtml)|\@import)\b)" \
"phase:2,capture,t:none,t:urlDecodeUni,t:htmlEntityDecode,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,log,auditlog,msg:'Cross-site Scripting (XSS) Attack',id:'959004',tag:'WEB_ATTACK/XSS',logdata:'%{TX.0}',severity:'2'"

Et les petits trucs que nous permettent de faire la version 2.5.7 :
(protection contre les bruteforces, il faudra bien sûr changer ARGS:login en fonction de vos champs d’authentification).

SecAction initcol:ip=%{REMOTE_ADDR},nolog
SecRule ARGS:login "!^$" \
nolog,phase:1,setvar:ip.auth_attempt=+1,deprecatevar:ip.auth_attempt=20/120
SecRule IP:AUTH_ATTEMPT "@gt 25" \
log,drop,phase:1,msg:'Possible Brute Force Attack"

Une fois que vous avez terminé votre fichier de configuration, n’oubliez pas le /etc/init.d/apache2 restart
Sinon, comme dit, ce ne sont que des exemples, … la doc est très complète : http://www.modsecurity.org/documentation/

Script de mise à jour du driver em2882

Bijour à tous …

(Pour les utilisateurs d’ubuntu 9.10 : http://wiki.ubuntuusers.de/em28xx, récupérer le script d’extraction pour le firmware et lancer votre player comme d’hab, le module est installé par défaut)

Voilà, pour les flemmards qui viennent de mettre à jour leur kernel (vers la 2.6.27-11, qui est disponible en màj depuis jeudi dernier), il fallait recompiler à nouveau le driver de notre clé USB TNT favorite, sinon le son grésillait pas mal dans mon cas, c’était carrément inaudible (le driver fournit pas ubuntu n’étant pas très à jour …).

Ce que fait ce script :

  • Aller dans le répertoire de src
  • Copier les fichiers nécessaire à la compilation
  • Aller dans le répertoire contenant le driver (si il ne contient pas de .hg, on checkout les source)
  • Compiler les sources
  • Installer le driver

Donc voilà, le fameux script :


#!/bin/bash
## SCRIPT BY GRIGIS GAETAN - blog.gaetan-grigis.eu ^^
## TO MODIFY WITH YOUR PERSONNAL INFORMATION - A MODIFIER AVEC VOS INFOS PERSO

#le dossier du src ... a ne pas changer (normalement)
SRC_DIR="/usr/src"
#ici, au cas ou vous n'avez pas le même kernel
SRC_DIR_LINUX_SOURCE="$SRC/linux-source-2.6.27"
# le repertoire contenant les sourge (HGifié), si le dossier (.hg n'existe pas les sources seront checkout).
EM2_DIR="/usr/src/cinergy-new"
EM2_DIR_HG="$EM2_DIR/.hg"

## ZETE PAS CENSER TOUCHER PLUS LOIN (C'EST DEJA ASSEZ PROFOND COMME CA)
cd $SRC_DIR

if [ -d $SRC_DIR_LINUX_SRC ]
then

sudo cp linux-source-2.6.27/drivers/media/dvb/dvb-core/*.h linux-headers-$(uname -r)/drivers/media/dvb/dvb-core/
sudo cp linux-source-2.6.27/drivers/media/dvb/frontends/lgdt330x.h linux-headers-$(uname -r | sed 's/-generic//')/drivers/media/dvb/frontends/
sudo cp linux-source-2.6.27/drivers/media/video/msp3400-driver.h linux-headers-$(uname -r | sed 's/-generic//')/drivers/media/dvb/frontends

else
echo "Install your kernel SRC package!!!"
echo "$SRC_DIR_LINUX_SRC n'existe pas"
exit 0
fi

if [ -d $EM2_DIR ]
then
cd $EM2_DIR

if [ -d $EM2_DIR_HG ]
then
echo "On met à jour"
hg up
else
echo "On checkout les sources"
hg clone http://mcentral.de/hg/~mrec/em28xx-new ./
fi
./build.sh build
./build.sh install
else
echo "Semblerait que $EM2_DIR n'existe pas"
fi

A noter qu’il suffit de faire les étapes :


sudo apt-get install build-essential libxine1-ffmpeg mercurial dvb-utils kaffeine
sudo apt-get install linux-headers-$(uname -r | sed 's/.*-//')
sudo apt-get install linux-source
cd /usr/src/
tar -jxvf linux-source*.tar.bz2

Pour installer le driver « from scratch ».

Enjoy 😉