Script Bash : Bind9 Owncloud Postfix LAMP SQUID IPTABLES

Bonjour à tous,

Je suis actuellement en formation BAC +2 option formateur déficient et je souhaiterais présenter pour mon projet de fin d’année, un script bash qui installe ou propose les services suivants :

[ul]- config IP

  • DNS (local) : Bind9
  • DHCP isc-dhcp-server
  • CLOUD : Owncloud 5 + LAMP + https
  • SMTP : Postfix + LAMP ou LDAP + roudcube en https
  • IPTABLES (config de base)
  • Proxy avec Squid 3/Dansquardian/sarg
  • Coloration syntaxique shell de root + vim
  • Kvm/Virt-manager/Lxde + outils graphiques style gnome-manager iceweasel…
  • Certif autosigné avec CA[/ul]

Le programme, côté utilisateurs, est présenté sous forme d’assistant. Je modifie les fichiers de conf des différents services proposés.

Je lance donc un appel à la communauté Debian pour tester mon script et si possible me faire un ou deux retour sur l’orthographe, les bugs…

Mon script est destiné à Debian SQUEEZE et se lance avec bash.

Sur une machine neuve et avec les droits du super utilisateur :

wget http://pbb.trio.free.fr/tsgeri/SuperServeur.bsh bash SuperServeur.bsh

Pour installer tous les services, il faut compter entre 30 min et 45 min en fonction de la connexion. Je n’ai pas eu le courage de programmer la gestion minimale des erreurs donc attention lorsque vous tapez car si vous faites une erreur du genre une adresse IP impossible le programme ne vous dira rien (ex : 512.10456.32.1)!

Merci d’avance

Salut,
En guise d’avertissement, je listerais au démarrage du script les informations dont l’utilisateur aura besoin pour continuer.

“Si par aventure” à remplacer par “si d’aventure”

Bravo pour ton script, c’est une belle page de littérature!

Une fois lancé et terminé que renvoie iptables-save ? histoire de voir…

:006

PS: Je n’ai pas le temps de tester en live, désolé…

Merci !
et iptables-save ne m’insulte pas néanmoins le script lancé pour iptables au boot est expérimental, c’est mon premier contact avec iptables. Je pense qu’il mériterait des améliorations !!

Salut,

[quote=“vincentsan”]Merci !
et iptables-save ne m’insulte pas néanmoins le script lancé pour iptables au boot est expérimental, c’est mon premier contact avec iptables. Je pense qu’il mériterait des améliorations !![/quote]

Mais de rien.
Si tu pouvais nous donner le résultat de iptables-save on pourrait jeter un oeil et te dire s’il manque des choses.

Je testerais ça dans une VM, je suis cloué à la maison à cause d’une bronchite, je trouverais bien le temps de faire ça.

Bonjour lol,

Merci de prendre du temps pour regarder mon script. Voici le rendu d’iptables-save :

[code]# Generated by iptables-save v1.4.8 on Sun Apr 7 08:58:58 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [37:5639]
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -j LOG
-A FORWARD -j LOG
COMMIT

Completed on Sun Apr 7 08:58:58 2013[/code]

JE me suis aperçu que dans mon assistant Bind, lorsque j’incrémente les fichiers de zones, je n’ai pas trouvé le moyen de n’incrémenter que les serials avec sed sans modifier les autres chaînes de caractères comportant des chiffres.
J’ai essayé avec des trucs du genre : sed _i “s/[1-9]{10}/201304050701/” le_fichier_de_zone. Mais cette commande ne fonctionne pas tout à fait comme je voudrais…

Je vais rédiger une aide dans laquelle j’expliquerai les quelques prérequis nécessaires pour l’utilisation de mon script et je la rajouterai au menu principal. Je pense également ajouter à chaque entrée un assistant de désinstallation.

Bon courage pour la bronchite !

Ce n’est ni un “truc”, ni une “astuce”, je déplace dans SD

Bonjour Ricardo,

J’avais posté dans Trucs et astuces car le script est opérationnel et pourrait aider certaines personnes qui souhaiteraient installer un des services proposés. C’est en quelque sorte une astuce…
En même temps, je demande un peu d’assistance à la communauté pour peaufiner le script… Donc le post a également sa place dans cette section !

De toute façon le modo a le dernier mot !

Bon dimanche.

Hello,

Testé rapidement le script.

Personnellement, je trouve qu’il pose trop de questions (“entrez l’IP de votre serveur” à plusieurs reprises, etc)

Et puis c’est vrai que c’est dommage de ne pas avoir une gestion minimale des erreurs (et cela te sera peut-être reproché par tes examinateurs) :stuck_out_tongue:

Hello,
Merci agentsteel d’avoir pris le temps de me répondre , qu’entends-tu par “une gestion minimale des erreurs” ? Pourrais-tu me donner un exemple ?
En ce qui concerne la redondance des questions, il est vrai que je pourrais réemployer les variables définies plus tôt dans le script. Quelle service as-tu testé pour me donner quelques indications ?
Ceci dit, mon script n’est pas destiné à être installé sur une même machine car les paramètres des différents services peuvent se télescoper. Ex php5 pour la taille max des fichiers uploadés sur le serveur dans le cas où on installe un cloud et un service de messagerie… A moins qu’il y ait un moyen d’avoir des paramètres différents par service installés sur une même machine mais mon prof est un peu défaillant et je dois me débrouiller seul.

L’un des problèmes que je rencontre est que je dois, lorsque j’édite les fichiers de zone de bind, incrémenter le serial afin que les modifs soient prises en compte par Bind.
Par exemple, dans le fichier de zone suivant, comment, avec sed, incrémenter le sérial (qui change à chaque install de Bind si la date change…) sans avoir à l’afficher l’utilisateur pour lui faire renseigner la variable ?

[code]$ORIGIN kabou.net.
$TTL 1600
@ IN SOA bind.kabou.net. root.localhost. (
2013040701 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL

@ IN NS bind.kabou.net.
@ IN MX 10 bind.kabou.net.
bind IN A 192.168.0.70[/code]

A +

Ce n’est pas que je veux avoir le dernier mot systématiquement, je suis toujours “ouvert” à la discussion.
Je te suggère de faire un double post avec ton seul script et une demande de correction mais dans “Programmation”.
Là, tu vas avoir tous les spécialistes du codage qui vont t’éplucher ça en petits bouts, de telle façon qu’à la fin, tu ne reconnaitras plus ton script originel.
Par contre, s’ils ont le temps et s’ils sont bien lunés, tu vas te retrouver avec un VRAI programme, digne de ce nom.
J’ai fait l’expérience moi-même avec mon script sur les sauvegardes et je peux dire que j’ai énormément appris.

EDIT :
je suis du même avis que Agentsteel.

[quote=“vincentsan”]qu’entends-tu par “une gestion minimale des erreurs” ? Pourrais-tu me donner un exemple ?
[/quote]
le contrôle des valeurs entrées au clavier.

Merci à tous pour les remarques. Sans vouloir abuser quelqu’un connaîtrait un site avec une bonne doc sur les regex ? J’ai essayé d’implémenter une gestion minimale des erreurs mais sans succès…
Par exemple pour les masques de sous réseau il faudrait combiner trop de facteurs pour mon cerveau ! Pour ce qui est des IP j’aurais pu essayer mais si je dois blacklister toutes les plages d’adresses qui ne doivent pas être utilisés je ne m’en sort plus… Si quelqu’un a déjà fait ce genre de chose avec bash je veux bien un exemple je bosse 12h / jour depuis 15 jours sur mon script et je commence à ne plus être très lucide !

Merci à tous pour vos commentaires et remarques.

regular-expressions.info/

une mine de trucs & astuces sur les sites de stackexchange.com, en faisant une recherche

Bonjour,

Merci pour la doc !
J’ai apporté quelques corrections au script mais je n’ai pas le courage de me lancer dans les regex pour implémenter la gestion des erreurs.

Si quelqu’un a déjà utilisé les regex dans bash pour obliger l’utilisateur à entrer une valeur correcte je suis preneur !
Par exemple : comment obliger l’utilisateur qui écrit une adresse IP à taper une adresse en concordance avec le masque de sous réseau (en tenant compte des adresses réservées et des plages d’@IP compatible) ?
Je ne sais pas trop comment insérer ce genre de regex à l’intérieur de boucles while dans un case…

Merci à tous

Bonjour à tous,

J’ai ré-uploadé une version corrigée (dans la mesure de mes moyens) de mon script, il est toujours à la même adresse.

A+

Bonsoir,

Après moult recherches je n’ai toujours pas trouvé comment implémenter un gestion des erreurs dans mon script, je remercie tous ceux qui ont pris la peine de me répondre et de m’aider !
Je vais écouter ricardo et faire un post dans le forum programmation et on verra bien.Je ne me fais pas trop de souci pour les critiques du jury car je suis en TSGERI => Technicien Gestionnaire Exploitant de Ressources Informatiques (ce qui signifie technicien supérieur clavier/souris !) et que la programmation n’est pas au “programme” !

A+