View previous topic :: View next topic |
Author |
Message |
bouleetbil Guru


Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
Posted: Tue May 08, 2007 7:22 pm Post subject: [Iptables] script-rc |
|
|
Bonjour,
Je me suis fais un p'tit script pour iptables avec des morceaux du script iptables gentoo et des recherches internet
Voici le résultat
Attention, la gestion de iptables à partir du noyau 2.6.20 à changer il faut chercher dans netfilter, personnellement j'ai mis les options en dur
Code: |
#!/sbin/runscript
# firewall using netfilter v0.12 19/06/2007 written by : bouleetbil <bouleetbil@frogdev.info>
# this script is free software according to the GNU General Public License (see http://www.gnu.org/licenses/gpl.html)
# Start/stop/restart/status firewall:
opts="status reject "
#Déclaration des variables
IPTABLES="/sbin/iptables"
IPTABLES_PROC="/proc/net/ip_tables_names"
#POUR LA MISE EN PLACE
#1=oui 0=non
#permet de tout logger
DEBUG=1
TEXTE_LOG="FIREWALL_refus"
#pour activer les logs
#1=oui
#2=non
ACTIVE_LOG=1
#carte ou modem : ppp0 ou eth0 ... pour le masquerading
IF_CARTE="ath0"
#IP du reseau local de 192.168.0.0 à 192.168.0.24
RESEAU_LOCAL="192.168.0.0/24"
#cette machine fait office de passerelle 1=oui 0=non
PASSERELLE=0
#gestion du ping de la machine (exterieur vers intérieur)
#NOTPING=0 ping actif, NOTPING=1 ping interdit
NOTPING=0
#SERVICE A OUVRIR 1=Oui 0=Non
SERV_TORRENT=0
SERV_SSH=0
SERV_SMTP=0
SERV_HTTP=0
SERV_HTTPS=0
SERV_DNS=0
SERV_IRC=0
SERV_CVS=0
SERV_FTP=0
SERV_MSN=1
SERV_DONKEY=0
SERV_VIDEOLAN=0
SERV_SAP=0
SERV_GNOMEMETING=0
SERV_OPENVPN=0
SERV_WENGOPHONE=1
SERV_SAMBA=0
depend() {
before net
use logger
}
checkkernel() {
if [ ! -e ${IPTABLES_PROC} ] ; then
eerror "Votre noyau ne supporte pas iptable"
eerror "chargez les modules et recommencez."
return 1
fi
return 0
}
start() {
checkkernel || return 1
einfo "[Démarrage du firewall]"
############################### REGLES PAR DEFAUT ###########################
einfo "[Initialisation de la table filter]"
${IPTABLES} -F
${IPTABLES} -X
einfo "[Politique par défaut de la table filter]"
# On ignore tout ce qui entre ou transite
#refus de tout
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
einfo "Refus de toutes les connexions"
#regles reseau local on accepte tous
# "On accepte le traffic sur 'lo'"
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
$IPTABLES -A FORWARD -i lo -j ACCEPT
$IPTABLES -A FORWARD -o lo -j ACCEPT
einfo "Toutes les connexions internes sont actives"
############################### INTERNET ###########################
einfo "[On autorise les clients à accéder au reseau local ]"
# Autorise les connexions avec le réseau 192.168.0.0/24 connecté à l'interface eth0
${IPTABLES} -t filter -A OUTPUT -o $IF_CARTE -s $RESEAU_LOCAL -d $RESEAU_LOCAL -j ACCEPT
${IPTABLES} -t filter -A INPUT -i $IF_CARTE -s $RESEAU_LOCAL -d $RESEAU_LOCAL -j ACCEPT
# Refus des paquets invalides
# Drop any packet that is not in the state table.
$IPTABLES -A INPUT -m state --state INVALID -j DROP
einfo "[Rejet des paquets associés avec aucune connexion connue. ]"
# On accepte les paquets que l'on a initialisé.
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#On autorise les sorties icmp (pour pinger l'exterieur)
$IPTABLES -A OUTPUT -p icmp -j ACCEPT
# Autorise les paquets à sortir comme ping dans ce cas plus besoin d'ouvir des services en sortie (http, https...)
#$IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT
#1ere version
#$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
################################# PREPARATION DES LOGS #########################
if [ ${DEBUG} == "1" ]
then
einfo "Prépare les log pour mise en place du firewall "
#Logguer les packets DROPés
#Logguer les packets au début afin de vérifier que tous fonctionne
$IPTABLES -N LOG_DROP
$IPTABLES -A LOG_DROP -j LOG --log-prefix "$TEXTE_LOG"
$IPTABLES -A LOG_DROP -j DROP
einfo "Toutes les entrées sont prefixées de :"
einfo "[FIREWALL refus] "
ewarn "Cela prend beaucoup de place "
ewarn "Une fois les règles mises en place, désactivé cette option"
fi
############################### LES TABLES NAT ET MANGLE #############################
einfo "[Initialisation des tables nat et mangle]"
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
#################################### LE MASQUERADING ########################################
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)
einfo "[Mise en place du masquerading]"
$IPTABLES -t nat -A POSTROUTING -s 192.168.0.0/24 -o ${IF_CARTE} -j MASQUERADE
############################## Les acces clients vers internet #####################
einfo "[On autorise les clients à accéder à internet ]"
einfo "[Autorise la résolution des noms de domaines ]"
#accepte la résolution de domaine en sortie
$IPTABLES -A OUTPUT -p tcp --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 53 -j ACCEPT
einfo "[Autorise l'acces NTP ]"
#Protocole de temps réseau (NTP)
$IPTABLES -A OUTPUT -p udp --dport 123 -j ACCEPT
einfo "[Autorise la navigation sur internet ]"
#Acces (http)
$IPTABLES -A OUTPUT -p tcp --dport 80 -j ACCEPT
einfo "[Autorise le https ]"
#Acces (https)
$IPTABLES -A OUTPUT -p tcp --dport 443 -j ACCEPT
einfo "[Autorise SSH ]"
#Acces (ssh)
$IPTABLES -A OUTPUT -p tcp --dport 22 -j ACCEPT
einfo "[Autorise l'envoi de mail ]"
$IPTABLES -A OUTPUT -p tcp --dport 25 -j ACCEPT
einfo "[Autorise la reception de mail ]"
$IPTABLES -A OUTPUT -p tcp --dport 110 -j ACCEPT
einfo "[Autorise la connexion vers serveur FTP ]"
$IPTABLES -A OUTPUT -p tcp --dport 21 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 20 -j ACCEPT
einfo "[Autorise les listes de diffusion ]"
$IPTABLES -A OUTPUT -p tcp --dport nntp -j ACCEPT
einfo "[Autorise Jabber]"
$IPTABLES -A OUTPUT -p tcp --dport 5222 -j ACCEPT
einfo "[Autorise l'attribution d'adresse IP via DHCP]"
$IPTABLES -A OUTPUT -p udp --sport 68 --dport 67 -j ACCEPT
einfo "[Autorise rsync]"
$IPTABLES -A OUTPUT -p tcp --dport 873 -j ACCEPT
einfo "[CVS 2401]"
$IPTABLES -A OUTPUT -p tcp --dport 2401 -j ACCEPT
#einfo "[Autorise lyrics]"
#$IPTABLES -A OUTPUT -p tcp --dport 8880 -j ACCEPT
einfo "[Autorise torrent]"
$IPTABLES -A OUTPUT -p tcp --dport 6881:6889 -j ACCEPT
einfo "[Autorise chat]"
$IPTABLES -A OUTPUT -p tcp --dport 6667 -j ACCEPT
einfo "[Autorise GIT]"
$IPTABLES -A OUTPUT -p tcp --dport 9418 -j ACCEPT
einfo "[Autorise SVN]"
$IPTABLES -A OUTPUT -p tcp --dport 3690 -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 3690 -j ACCEPT
#Une liste de ports est disponible : http://www.frogdev.info/reseaux.php
#ajouter ici les protocoles autorisé en sortie
#Il suffit de lancer le script avec "reject" afin de consulter les connexions rejete
#einfo "[Autorise la sortie de XXX ]"
#$IPTABLES -A OUTPUT -p tcp --dport N° du port -j ACCEPT
################################################################################
###############openvpn10.8.0.0
################################# ACTIVATION DE LA PASSERELLE ##################
if [ ${PASSERELLE} == "1" ]
then
einfo "[Activation de la passerelle]"
echo 1 > /proc/sys/net/ipv4/ip_forward
else
einfo "[Désactivation de la passerelle]"
echo 0 > /proc/sys/net/ipv4/ip_forward
fi
################################# PAS DE SPOOFING ############################
einfo "[Pas de spoofing]"
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $filtre
done
fi
########################## PAS DE SYNFLOOD ####################
einfo "[Pas de synflood]"
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
################################## PAS DE PING ###############################
if [ ${NOTPING} == "1" ]
then
einfo "[Pas ping]"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
fi
else
einfo "[Ping actif]"
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then
echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
fi
fi
############################ Fonctionnalités serveurs #####################################
einfo "[Fonctionalités serveurs, visibles depuis internet ]"
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne
# depuis internet ne peux accéder à l'un des serveurs que vous hébergés.
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,
# en décommentant les 2 ou 3 lignes correspondantes.
if [ ${SERV_SSH} == "1" ]
then
einfo "[autorisation du serveur ssh(22) ...]"
$IPTABLES -A INPUT -p tcp --dport ssh -j ACCEPT
fi
if [ ${SERV_SMTP} == "1" ]
then
einfo "[autorisation du serveur smtp(25) ...]"
$IPTABLES -A INPUT -p tcp --dport smtp -j ACCEPT
fi
if [ ${SERV_HTTP} == "1" ]
then
einfo "[autorisation du serveur http(80) ...]"
$IPTABLES -A INPUT -p tcp --dport www -j ACCEPT
fi
if [ ${SERV_HTTPS} == "1" ]
then
einfo "[autorisation du serveur https(443) ...]"
$IPTABLES -A INPUT -p tcp --dport https -j ACCEPT
fi
if [ ${SERV_SAMBA} == "1" ]
then
# EPMAP
$IPTABLES -A INPUT -m state --state NEW -p TCP --dport 135 -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW -p UDP --dport 135 -j ACCEPT
# NetBios-NS
$IPTABLES -A INPUT -m state --state NEW -p TCP --dport 137 -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW -p UDP --dport 137 -j ACCEPT
# NetBios-DGM => exploration du réseau (basé sur SMB browser service)
$IPTABLES -A INPUT -m state --state NEW -p UDP --dport 138 -j ACCEPT
# NetBios-SSN => partage fichiers, imprimantes par Microsoft
$IPTABLES -A INPUT -m state --state NEW -p TCP --dport 139 -j ACCEPT
# SMB/IP => partage fichiers, imprimantes par SaMBa
$IPTABLES -A INPUT -m state --state NEW -p TCP --dport 445 -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW -p UDP --dport 445 -j ACCEPT
fi
if [ ${SERV_DNS} == "1" ]
then
einfo "[autorisation du serveur DNS(53) ...]"
$IPTABLES -A INPUT -p udp --dport domain -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport domain -j ACCEPT
fi
if [ ${SERV_IRC} == "1" ]
then
einfo "[autorisation du serveur irc(6667) ...]"
iptables -A INPUT -p tcp --dport ircd -j ACCEPT
fi
if [ ${SERV_CVS} == "1" ]
then
einfo "[autorisation du serveur cvs (2401) ...]"
$IPTABLES -A INPUT -p tcp --dport cvspserver -j ACCEPT
fi
if [ ${SERV_FTP} == "1" ]
then
einfo "[autorisation du serveur FTP(21 et 20) ...]"
$IPTABLES -A INPUT -p tcp --dport 20 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 21 -j ACCEPT
fi
if [ ${SERV_MSN} == "1" ]
then
#msn transfert de fichier
$IPTABLES -A INPUT -p TCP --sport 6891:6900 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 6891:6900 -j ACCEPT
#msn communication
$IPTABLES -A INPUT --protocol tcp --sport 1863 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT --protocol tcp --dport 1863 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#webcam
$IPTABLES -A INPUT -p TCP --sport 6800:7000 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 6800:7000 -j ACCEPT
$IPTABLES -A INPUT -p udp --sport 6800:7000 -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 6800:7000 -j ACCEPT
einfo "[autorisation MSN(6891:6900 et 1863 ) ...]"
fi
if [ ${SERV_DONKEY} == "1" ]
then
#on accept sur les port entrants par défault d'eMULE
$IPTABLES -A INPUT -p tcp --dport 34037 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 34038 -j ACCEPT
$IPTABLES -A INPUT -p udp --sport 4242 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 4662 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 4665 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 4672 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 4661 -j ACCEPT
einfo "[Réseau emule actif]"
#accepte toutes les sorties
einfo "ATTENTION pour emule que toute les connexions sortante que l'on établi!!!"
$IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT
fi
if [ ${SERV_VIDEOLAN} == "1" ]
then
$IPTABLES -A INPUT -p udp --dport 1234 -j ACCEPT
einfo "[Ouverture flux VideaoLAN (1234) ]"
fi
if [ ${SERV_SAP} == "1" ]
then
$IPTABLES -A INPUT -p udp -d 224.2.127.254 --dport 9875 -j ACCEPT
einfo "[Ouverture des annonces SAP ]"
fi
if [ ${SERV_GNOMEMETING} == "1" ]
then
$IPTABLES -A INPUT -p tcp --dport 30000:33000 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 1720 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 5000:5006 -j ACCEPT
einfo "[Ouverture de GnomeMeeting ]"
fi
if [ ${SERV_TORRENT} == "1" ]
then
$IPTABLES -A INPUT -p tcp --dport 6881:6889 -j ACCEPT
einfo "[Ouverture Bittorrent (6881:6889) ]"
fi
if [ ${SERV_WENGOPHONE} == "1" ]
then
$IPTABLES -A INPUT -p udp --dport 5060 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 10600:10601 -j ACCEPT
einfo "[Ouverture de wengophone ]"
fi
if [ ${SERV_OPENVPN} == "1" ]
then
$IPTABLES -A OUTPUT -p udp --dport 1194 -j ACCEPT
$IPTABLES -A INPUT -p udp --dport 1194 -j ACCEPT
#82.236.233.XX adresse visible depuis internet
$IPTABLES -t nat -A POSTROUTING -o $IF_CARTE -j SNAT --to 82.236.233.XX
$IPTABLES -A FORWARD -j ACCEPT
$IPTABLES -A INPUT -i tap+ -j ACCEPT
$IPTABLES -A FORWARD -i tap+ -j ACCEPT
IPTABLES -t nat -A POSTROUTING -s 10.8.0.0/24 -o $IF_CARTE -j MASQUERADE
fi
# Ne pas décommenter les 3 lignes qui suivent.
# Plus généralement :
#echo "[autorisation du serveur Mon_truc(10584) ...]"
#$IPTABLES -A INPUT -p tcp --dport 10584 -j ACCEPT
#redirection d'une interface vers une autre
#$IPTABLES -A FORWARD -i $IF_PRV -o $IF_PUB -j ACCEPT
if [ ${ACTIVE_LOG} == "1" ]
then
#on log tout
einfo "[Activation des logs]"
$IPTABLES -A FORWARD -j LOG_DROP
$IPTABLES -A INPUT -j LOG_DROP
$IPTABLES -A OUTPUT -j LOG_DROP
fi
einfo "[firewall activé !]"
}
stop() {
einfo "[Désactivation de la passerelle]"
echo 0 > /proc/sys/net/ipv4/ip_forward
einfo "[Initialisation de la table filter]"
${IPTABLES} -F
${IPTABLES} -X
einfo "[Politique par défaut de la table filter]"
${IPTABLES} -P FORWARD ACCEPT
${IPTABLES} -P INPUT ACCEPT
${IPTABLES} -P OUTPUT ACCEPT
${IPTABLES} -t nat -F
${IPTABLES} -t nat -X
${IPTABLES} -t nat -P PREROUTING ACCEPT
${IPTABLES} -t nat -P POSTROUTING ACCEPT
${IPTABLES} -t nat -P OUTPUT ACCEPT
${IPTABLES} -t mangle -F
${IPTABLES} -t mangle -X
${IPTABLES} -t mangle -P PREROUTING ACCEPT
${IPTABLES} -t mangle -P OUTPUT ACCEPT
einfo "[firewall desactivé! ]"
}
reject() {
grep $TEXTE_LOG /var/log/messages
}
status() {
${IPTABLES} -L
}
restart() {
svc_stop
sleep 2
svc_start
}
|
Si vous voyez des choses à changer je suis preneur _________________ L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php
Last edited by bouleetbil on Sun Sep 02, 2007 8:17 am; edited 4 times in total |
|
Back to top |
|
 |
bouleetbil Guru


Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
Posted: Mon May 14, 2007 8:38 pm Post subject: |
|
|
P'tite mise à jour
Ajout en sortie vers serveur rsync (pratique pour emerge --sync ) Ajout du ping en sortie et paramétrage du ping en entrée _________________ L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php |
|
Back to top |
|
 |
bouleetbil Guru


Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
|
Back to top |
|
 |
bouleetbil Guru


Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
|
Back to top |
|
 |
bouleetbil Guru


Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|