/********************************************************************
 *
 * Script de configuration IPtables
 *
 * Ce script permet d'effectuer une configuration rapide d'un
 * firewall en utilisant IPtables (votre kernel doit avoir été
 * compilé avec les bonnes options et vous devez avoir installé
 * iptables auparavant).
 *
 * http://www.canonne.net/linux/iptables/index.php
 * (c) 2003 Antoine CANONNE http://www.canonne.net
 *
 *******************************************************************/
 
function changeLAN(){
	if( document.formulaire.elements["islan"][0].checked){
		document.formulaire.elements["--out-interface"].disabled=false;
		document.formulaire.elements["lanout"][0].disabled=false;
		document.formulaire.elements["lanout"][1].disabled=false;
		document.formulaire.elements["wall_local"][0].disabled=false;
		document.formulaire.elements["wall_local"][1].disabled=false;
		document.formulaire.elements["lan_local"][0].disabled=false;
		document.formulaire.elements["lan_local"][1].disabled=false;

		document.formulaire.elements["lan_dns"][0].disabled=false;
		document.formulaire.elements["lan_dns"][1].disabled=false;
		document.formulaire.elements["lan_http"][0].disabled=false;
		document.formulaire.elements["lan_http"][1].disabled=false;
		document.formulaire.elements["lan_ftp"][0].disabled=false;
		document.formulaire.elements["lan_ftp"][1].disabled=false;
		document.formulaire.elements["lan_pop"][0].disabled=false;
		document.formulaire.elements["lan_pop"][1].disabled=false;
		document.formulaire.elements["lan_imap"][0].disabled=false;
		document.formulaire.elements["lan_imap"][1].disabled=false;
		document.formulaire.elements["lan_imaps"][0].disabled=false;
		document.formulaire.elements["lan_imaps"][1].disabled=false;
		document.formulaire.elements["lan_smtp"][0].disabled=false;
		document.formulaire.elements["lan_smtp"][1].disabled=false;
	}
	else{
		document.formulaire.elements["--out-interface"].disabled=true;
		document.formulaire.elements["lanout"][0].disabled=true;
		document.formulaire.elements["lanout"][1].disabled=true;
		document.formulaire.elements["wall_local"][0].disabled=true;
		document.formulaire.elements["wall_local"][1].disabled=true;
		document.formulaire.elements["lan_local"][0].disabled=true;
		document.formulaire.elements["lan_local"][1].disabled=true;


		document.formulaire.elements["lan_dns"][0].disabled=true;
		document.formulaire.elements["lan_dns"][1].disabled=true;
		document.formulaire.elements["lan_http"][0].disabled=true;
		document.formulaire.elements["lan_http"][1].disabled=true;
		document.formulaire.elements["lan_ftp"][0].disabled=true;
		document.formulaire.elements["lan_ftp"][1].disabled=true;
		document.formulaire.elements["lan_pop"][0].disabled=true;
		document.formulaire.elements["lan_pop"][1].disabled=true;
		document.formulaire.elements["lan_imap"][0].disabled=true;
		document.formulaire.elements["lan_imap"][1].disabled=true;
		document.formulaire.elements["lan_imaps"][0].disabled=true;
		document.formulaire.elements["lan_imaps"][1].disabled=true;
		document.formulaire.elements["lan_smtp"][0].disabled=true;
		document.formulaire.elements["lan_smtp"][1].disabled=true;
	}
}

function changeWallOut(){
	if( !document.formulaire.elements["wall_out"][0].checked){

		document.formulaire.elements["wall_dns"][0].disabled=false;
		document.formulaire.elements["wall_dns"][1].disabled=false;
		document.formulaire.elements["wall_http"][0].disabled=false;
		document.formulaire.elements["wall_http"][1].disabled=false;
		document.formulaire.elements["wall_ftp"][0].disabled=false;
		document.formulaire.elements["wall_ftp"][1].disabled=false;
		document.formulaire.elements["wall_pop"][0].disabled=false;
		document.formulaire.elements["wall_pop"][1].disabled=false;
		document.formulaire.elements["wall_imap"][0].disabled=false;
		document.formulaire.elements["wall_imap"][1].disabled=false;
		document.formulaire.elements["wall_imaps"][0].disabled=false;
		document.formulaire.elements["wall_imaps"][1].disabled=false;
		document.formulaire.elements["wall_smtp"][0].disabled=false;
		document.formulaire.elements["wall_smtp"][1].disabled=false;
	}
	else{
		document.formulaire.elements["wall_dns"][0].disabled=true;
		document.formulaire.elements["wall_dns"][1].disabled=true;
		document.formulaire.elements["wall_http"][0].disabled=true;
		document.formulaire.elements["wall_http"][1].disabled=true;
		document.formulaire.elements["wall_ftp"][0].disabled=true;
		document.formulaire.elements["wall_ftp"][1].disabled=true;
		document.formulaire.elements["wall_pop"][0].disabled=true;
		document.formulaire.elements["wall_pop"][1].disabled=true;
		document.formulaire.elements["wall_imap"][0].disabled=true;
		document.formulaire.elements["wall_imap"][1].disabled=true;
		document.formulaire.elements["wall_imaps"][0].disabled=true;
		document.formulaire.elements["wall_imaps"][1].disabled=true;
		document.formulaire.elements["wall_smtp"][0].disabled=true;
		document.formulaire.elements["wall_smtp"][1].disabled=true;
	}
}
function changeLANOUT(){
	if( !document.formulaire.elements["lanout"][0].checked){

		document.formulaire.elements["lan_dns"][0].disabled=false;
		document.formulaire.elements["lan_dns"][1].disabled=false;
		document.formulaire.elements["lan_http"][0].disabled=false;
		document.formulaire.elements["lan_http"][1].disabled=false;
		document.formulaire.elements["lan_ftp"][0].disabled=false;
		document.formulaire.elements["lan_ftp"][1].disabled=false;
		document.formulaire.elements["lan_pop"][0].disabled=false;
		document.formulaire.elements["lan_pop"][1].disabled=false;
		document.formulaire.elements["lan_imap"][0].disabled=false;
		document.formulaire.elements["lan_imap"][1].disabled=false;
		document.formulaire.elements["lan_imaps"][0].disabled=false;
		document.formulaire.elements["lan_imaps"][1].disabled=false;
		document.formulaire.elements["lan_smtp"][0].disabled=false;
		document.formulaire.elements["lan_smtp"][1].disabled=false;
	}
	else{
		document.formulaire.elements["lan_dns"][0].disabled=true;
		document.formulaire.elements["lan_dns"][1].disabled=true;
		document.formulaire.elements["lan_http"][0].disabled=true;
		document.formulaire.elements["lan_http"][1].disabled=true;
		document.formulaire.elements["lan_ftp"][0].disabled=true;
		document.formulaire.elements["lan_ftp"][1].disabled=true;
		document.formulaire.elements["lan_pop"][0].disabled=true;
		document.formulaire.elements["lan_pop"][1].disabled=true;
		document.formulaire.elements["lan_imap"][0].disabled=true;
		document.formulaire.elements["lan_imap"][1].disabled=true;
		document.formulaire.elements["lan_imaps"][0].disabled=true;
		document.formulaire.elements["lan_imaps"][1].disabled=true;
		document.formulaire.elements["lan_smtp"][0].disabled=true;
		document.formulaire.elements["lan_smtp"][1].disabled=true;
	}
}

function generer(){

	str="#!/bin/sh\n\
\n\
# fichier de configuration IPtables\n\
# cree depuis http://www.canonne.net\n\
# (c) 2003 Antoine CANONNE\n\
\n";
	
	/* Activation du forwading */
	if (document.formulaire.elements["islan"][0].checked && document.formulaire.elements["lanout"][0].checked){
	str+="\n\
# Activation du forwarding\n\
echo 1 > /proc/sys/net/ipv4/ip_forward\n\
\n";

	}

	/* Grand nettoyage de toutes les chaines */
	str+="# Nous vidons toutes les chaines\n\
iptables -F\n\
\n\
# Nous supprimons les chaines non standards\n\
iptables -X\n\
\n\
# Par defaut tout est ferme\n\
iptables -P INPUT DROP\n\
iptables -P OUTPUT DROP\n\
iptables -P FORWARD DROP\n\
\n";

if_in= document.formulaire.elements["--in-interface"].value;
if_out= document.formulaire.elements["--out-interface"].value;

	/* Initialisation table de translation d'adresses */
	if (document.formulaire.elements["islan"][0].checked ){
	str+="# reinitialisation table NAT\n\
iptables -t nat -F\n\
iptables -t nat -X\n\
\n\
iptables -t nat -P PREROUTING ACCEPT\n\
iptables -t nat -P POSTROUTING ACCEPT\n\
iptables -t nat -P OUTPUT ACCEPT\n\
\n\
# Translation d'adresse pour tout ce qui sort vers l'internet\n\
iptables -t nat -A POSTROUTING -o "+ if_in +" -j MASQUERADE\n\
\n";
	}

	/* La machine locale est sure */
	str+="# La machine locale est sure\n\
iptables -A INPUT  -i lo -j ACCEPT\n\
iptables -A OUTPUT -o lo -j ACCEPT\n\
\n";

	/* permet la resolution DNS pour le firewall */
	if (document.formulaire.elements["wall_dns"][0].checked && document.formulaire.elements["wall_out"][1].checked){
	str+="# Resolution DNS pour le firewall\n\
iptables -A INPUT  -i "+if_in +" --protocol udp --source-port 53 -j ACCEPT\n\
iptables -A OUTPUT -o "+if_in +" --protocol udp --destination-port 53 -j ACCEPT\n\
iptables -A INPUT  -i "+if_in +" --protocol tcp --source-port 53 -j ACCEPT\n\
iptables -A OUTPUT -o "+if_in +" --protocol tcp --destination-port 53 -j ACCEPT \n\
\n";
	}


	/* permet la resolution DNS pour le LAN */
	if (document.formulaire.elements["islan"][0].checked && (document.formulaire.elements["lan_dns"][0].checked || document.formulaire.elements["lanout"][0].checked)){
	str+="# Resolution DNS pour les machines du LAN\n\
iptables -A FORWARD -i "+if_in +" -o "+if_out+" --protocol udp --source-port 53 -j ACCEPT\n\
iptables -A FORWARD -i "+if_out+" -o "+if_in +" --protocol udp --destination-port 53 -j ACCEPT\n\
iptables -A FORWARD -i "+if_in +" -o "+if_out+" --protocol tcp --source-port 53 -j ACCEPT\n\
iptables -A FORWARD -i "+if_out+" -o "+if_in +" --protocol tcp --destination-port 53 -j ACCEPT \n\
\n";
	}

	/* connections Firewall -> LAN*/
	if (document.formulaire.elements["islan"][0].checked && document.formulaire.elements["wall_local"][0].checked){
	str+="# On permet toutes les connexions sur le LAN depuis le firewall\n\
iptables -A INPUT -i  "+if_out+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A OUTPUT -o "+if_out+" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}


	/* connections LAN -> Firewall */
	if (document.formulaire.elements["islan"][0].checked && document.formulaire.elements["lan_local"][0].checked){
	str+="# On permet toutes les connexions sur le firewall depuis le LAN\n\
iptables -A INPUT -i  "+if_out+" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A OUTPUT -o "+if_out+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

	/* permet toutes les connexions Firewall -> Internet */
	if (document.formulaire.elements["wall_out"][0].checked){
	str+="# On accepte toutes les liaisons firewall-Internet\n\
iptables -A OUTPUT -o "+ if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
# On accepte les liaisons Internet-firewall deja etablies\n\
iptables -A  INPUT -i "+if_in+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

	/* permet toutes les connexions LAN -> Internet */
	if (document.formulaire.elements["islan"][0].checked && document.formulaire.elements["lanout"][0].checked){
	str+="# On accepte toutes les liaisons LAN-Internet\n\
iptables -A FORWARD -i "+ if_out +" -o "+ if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
\n\
# On accepte les liaisons Internet-LAN deja etablies\n\
iptables -A FORWARD -i "+if_in+" -o "+if_out+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

	/* Permet les connection firewall -> Internet (www) */
	if (document.formulaire.elements["wall_out"][1].checked && document.formulaire.elements["wall_http"][0].checked){
	str+="# connexions Firewall-Internet (www)\n\
iptables -A OUTPUT -p tcp --dport 80  -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A OUTPUT -p tcp --dport 443 -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A INPUT  -p tcp --sport 80  -i "+if_in +" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A INPUT  -p tcp --sport 443 -i "+if_in +" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}


	/* Permet les connection LAN -> Internet (www) */
	if (document.formulaire.elements["islan"][0].checked && document.formulaire.elements["lanout"][1].checked && document.formulaire.elements["lan_http"][0].checked){
	str+="# connexions LAN-Internet (www)\n\
iptables -A FORWARD -p tcp --dport 80  -i "+if_out+" -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A FORWARD -p tcp --dport 443 -i "+if_out+" -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A FORWARD -p tcp --sport 80  -i "+if_in +" -o "+if_out+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A FORWARD -p tcp --sport 443 -i "+if_in +" -o "+if_out+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

 	/* Permet les connection firewall -> Internet (ftp) */
	if (document.formulaire.elements["wall_out"][1].checked && document.formulaire.elements["wall_ftp"][0].checked){
	str+="# connexions firewall-Internet (ftp) bof bof a revoir\n\
iptables -A OUTPUT -p tcp --dport 21  -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A INPUT -p tcp --sport 21 -i "+if_in+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A OUTPUT -o "+if_in+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A INPUT  -i "+if_in+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}


 	/* Permet les connection LAN -> Internet (ftp) */
	if (document.formulaire.elements["islan"][0].checked && document.formulaire.elements["lanout"][1].checked && document.formulaire.elements["lan_ftp"][0].checked){
	str+="# connexions LAN-Internet (ftp)\n\
iptables -A FORWARD -p tcp --dport 21 -i "+if_out+" -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A FORWARD -p tcp --sport 21 -i "+if_in +" -o "+if_out+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A FORWARD -p tcp --sport 20 -i "+if_in +" -o "+if_out+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A FORWARD -p tcp --dport 20 -i "+if_out+" -o "+if_in +" -m state --state ESTABLISHED -j ACCEPT\n\
\n";
	}


	/* Permet les connection firewall -> Internet (pop) */
	if (document.formulaire.elements["wall_out"][1].checked && document.formulaire.elements["wall_pop"][0].checked){
	str+="# connexions firewall -Internet (pop)\n\
iptables -A OUTPUT -p tcp --dport 110 -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A INPUT -p tcp --sport 110 -i "+if_in +" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

	/* Permet les connection LAN -> Internet (pop) */
	if (document.formulaire.elements["islan"][0].checked && document.formulaire.elements["lanout"][1].checked && document.formulaire.elements["lan_pop"][0].checked){
	str+="# connexions LAN-Internet (pop)\n\
iptables -A FORWARD -p tcp --dport 110 -i "+if_out+" -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A FORWARD -p tcp --sport 110 -i "+if_in +" -o "+if_out+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

	/* Permet les connection firewall -> Internet (imap) */
	if (document.formulaire.elements["wall_out"][1].checked && document.formulaire.elements["wall_imap"][0].checked){
	str+="# connexions firewall-Internet (imap)\n\
iptables -A OUTPUT -p tcp --dport 143 -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A INPUT -p tcp --sport 143 -i "+if_in +" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

	/* Permet les connection LAN -> Internet (imap) */
	if (document.formulaire.elements["islan"][0].checked && document.formulaire.elements["lanout"][1].checked && document.formulaire.elements["lan_imap"][0].checked){
	str+="# connexions LAN-Internet (imap)\n\
iptables -A FORWARD -p tcp --dport 143 -i "+if_out+" -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A FORWARD -p tcp --sport 143 -i "+if_in +" -o "+if_out+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

	/* Permet les connection firewall -> Internet (imaps) */
	if (document.formulaire.elements["wall_out"][1].checked && document.formulaire.elements["wall_imaps"][0].checked){
	str+="# connexions firewall-Internet (imaps)\n\
iptables -A OUTPUT -p tcp --dport 993 -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A INPUT -p tcp --sport 993 -i "+if_in +" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

	/* Permet les connection LAN -> Internet (imaps) */
	if (document.formulaire.elements["islan"][0].checked && document.formulaire.elements["lanout"][1].checked && document.formulaire.elements["lan_imaps"][0].checked){
	str+="# connexions LAN-Internet (imaps)\n\
iptables -A FORWARD -p tcp --dport 993 -i "+if_out+" -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A FORWARD -p tcp --sport 993 -i "+if_in +" -o "+if_out+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

	/* Permet les connection firewall -> Internet (smtp) */
	if (document.formulaire.elements["wall_out"][1].checked && document.formulaire.elements["wall_smtp"][0].checked){
	str+="# connexions firewall-Internet (smtp)\n\
iptables -A OUTPUT -p tcp --dport 25 -o "+if_in+" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A INPUT -p tcp --sport 25 -i "+if_in+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

	/* Permet les connection LAN -> Internet (smtp) */
	if (document.formulaire.elements["islan"][0].checked && document.formulaire.elements["lanout"][1].checked && document.formulaire.elements["lan_smtp"][0].checked){
	str+="# connexions LAN-Internet (smtp)\n\
iptables -A FORWARD -p tcp --dport 25 -i "+if_out+" -o "+if_in +" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A FORWARD -p tcp --sport 25 -i "+if_in +" -o "+if_out+" -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
\n";
	}

	/* Accepte les connexions ftp */
	if(document.formulaire.elements["ftp"][0].checked){
		str+="\n\
# Ouverture pour le ftp (actif)\n\
iptables -A INPUT  -i "+if_in+" -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT\n\
iptables -A OUTPUT -o "+if_in+" -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT\n\
iptables -A INPUT  -i "+if_in+" -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT\n\
iptables -A OUTPUT -o "+if_in+" -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A INPUT  -i "+if_in+" -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT\n\
iptables -A OUTPUT -o "+if_in+" -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT\n\
\n";
	}

	/* Accepte les connexions ssh */
	if(document.formulaire.elements["ssh"][0].checked){
		str+="\n\
# Ouverture pour le serveur ssh\n\
iptables -A OUTPUT -o "+if_in+" -p tcp --sport "+ document.formulaire.elements["ssh_port"].value +" -j ACCEPT\n\
iptables -A INPUT  -i "+if_in+" -p tcp --dport "+ document.formulaire.elements["ssh_port"].value +"  -j ACCEPT\n\
\n";
	}

	/* Accepte les connexions telnet */
	if(document.formulaire.elements["telnet"][0].checked){
		str+="\n\
# Ouverture pour le serveur ssh\n\
iptables -A OUTPUT -o "+if_in+" -p tcp --sport "+ document.formulaire.elements["telnet_port"].value +" -j ACCEPT\n\
iptables -A INPUT  -i "+if_in+" -p tcp --dport "+ document.formulaire.elements["telnet_port"].value +" -j ACCEPT\n\
\n";
	}

	/* Accepte les connexions www */
	if(document.formulaire.elements["www"][0].checked){
		str+="# Ouverture pour le serveur web\n\
iptables -A OUTPUT -o "+if_in+" -p tcp --sport "+ document.formulaire.elements["www_port"].value +" -j ACCEPT\n\
iptables -A INPUT  -i "+if_in+" -p tcp --dport "+ document.formulaire.elements["www_port"].value +" -j ACCEPT\n\
\n";
	}

	str+="# Fin du fichier\n";
	document.write("<html>\n<body>\n<pre>\n"+str+"</pre>\n</body>\n</html>\n");
}
