en fait si tu veux un petit scripte qui tourne sur mes 2 machine, certes il est fait par un débutant donc soyer indulgent car je le modifie encore souvent.
tout d'abords la version d'iptable n'est pas la même partout. ensuite il y a le patch p-o-m (pom).
donc moi je suis en debian testing:
la version d'iptables: iptables -V iptables v1.3.5
pour un tuto complet sur iptables voici un lien qui ma beaucoup aider et fort bien détailler
[
www.linux-france.org]
ensuite les regle de base pour un par feux:
1.- on bloque tout ce que l'on ne connais pas.
2.- ensuite on ouvre ce dont on a besoin si possible par utilisateur, donc root ne doit pas sortir sauf pour quelque port en local.
3 si <<on ne sais pas vraiment>> ce qui rentre on sais par contre ce qui sore!
4.- on log le reste si besoin est
4 voici un script schell adapter a mes besoin , il te faudra lire la doc sur le patch pom si tu veux pouvoir t'en servir et s'il est intergrer a ton noyaux
ce script ne gère pas la nat, car il est deja assez restrictif comme cela
voila amuse toi bien pour l'adapter a tes besoin.
#!/bin/sh
PATH=/usr/eth0cal/sbin:/usr/eth0cal/bin:/sbin:/bin:/usr/sbin:/usr/bin:/sbin/iptables
DAEMON=/etc/init.d/fw
NAME=fw
ID=$$
DESC="Par Feux 1.09"
FAMOPTS="-T 0"
#Section variable
#on raccourci le texte
#id = autorisation de l'utilisateur
#idroot= autorisation du root
AC=" -j ACCEPT"
DP=" -j DROP"
DPR=" -j REJECT tcp-reset"
id="1002"
idroot="0"
ip="127.0.0.1"
ip1="192.168.1.80"
ip2="192.168.1.81"
ip3="192.168.1.255"
rip1="192.168.1.80-192.168.1.81"
rip2="192.168.1.81-192.168.1.80"
i="iptables -A INPUT"
o="iptables -A OUTPUT"
portp2p2="6969,6881,4661,4662,4665,4672,57692,16349"
Moduleid=" -m owner --uid-owner "
banip="82.121.61.101"
banip1="80.239.200.102"
bs="$i -i eth0 -m iprange --src-range"
bd="$i -i eth0 -m iprange --dst-range"
rootudp137="$i -o eth0 -p udp -m iprange --src-range $rip1 --dst-range $ip3 $AC"
rootudp138="$i -i eth0 -p tcp -m iprange --src-range $rip1 --dst-range $ip3 $AC"
ipineth0tcpsport="$i -i eth0 -p tcp -m multiport --source-ports "
ipintcpsport="$i -p tcp -m multiport --source-ports"
ipinudpsport="$i -p udp -m multiport --source-ports "
ipinudpdport="$i -p udp -m multiport --destination-port "
serv4="$i -i eth0 -s $ip1 -d $ip2 $AC"
serv5="$i -i eth0 -s $ip2 -d $ip1 $AC"
suivi=" -m state --state ESTABLISHED,RELATED -j ACCEPT"
newsuivi=" -m state --state ESTABLISHED,NEW"
newpure="-m state --state NEW"
loopack="$i -i lo -j ACCEPT"
limiteflood=" -m limit --limit 1/s --limit-burst 2 -j LOG --log-prefix "
gnomein1="$i -p tcp -s $ip -d $ip --dport 111 -m state --state ESTABLISHED,NEW -j ACCEPT"
gnomein2="$i -p tcp -s $ip -d $ip --sport 111 -m state --state ESTABLISHED,NEW -j ACCEPT"
LOGALLIN="$i -i lo -j LOG --log-prefix=""<LOOPACKIN> "" --log-level debug"
surfin="$i -p udp -m multiport --source-ports 53,80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT "
surfin2="$i -p tcp -m multiport --source-ports 81,80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT"
limituid="-m owner --uid-owner $id"
irc="$i -p tcp --sport 6667"
ircin="$i -p udp --sport 53"
ircone="$i -p udp --dport 138 --sport 138 -m iprange --src-range $ip2 --dst-range $ip3 "
icpmonip1="$i -p icmp -m iprange --src-range $ip1 --dst-range 192.168.1.1 -j ACCEPT"
icpmonip2="$i -p icmp -m iprange --src-range $ip2 --dst-range 192.168.1.1 -j ACCEPT"
dnswww3="$i -p udp -d $ip2 -s 192.168.1.1 --sport 53 -j ACCEPT"
dnswww4="$i -p udp -d $ip2 -s 212.147.0.0/16 --sport 53 -j ACCEPT"
p2p3="$i -p tcp -m multiport --source-ports $portp2p2 $AC"
p2p4="$i -p udp -m multiport --source-ports $portp2p2 $AC"
p2p5="$i -p tcp -m multiport --destination-port $portp2p2 $AC"
p2p26="$i -p udp -m multiport --destination-port $portp2p2 $AC"
ipdropoutudpdport="$o -p udp -m multiport --destination-port "
loopackout="$o -o lo -j ACCEPT"
LOGALLOUT="$o -o lo -j LOG --log-prefix=""<LOOPACK> "" --log-level debug"
ircout="$o -p tcp $Moduleid $id --dport 6667"
ipouttcpdport="$o -p tcp -m multiport --destination-port "
ipouttcpsport="$o -p tcp $Moduleid $id -m multiport --source-ports "
ipoutudpsport="$o -p udp $Moduleid $id -m multiport --source-ports "
surfout="$o -m owner --uid-owner $id -p udp -m multiport --destination-port 53,80,81 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT"
surfout2="$o -m owner --uid-owner $id -p tcp -m multiport --destination-port 81,80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT"
surfout3="$o -p tcp --dport 53 $AC"
surfout4="$o -p tcp --sport 53 $AC"
surfout5="$o -p udp --dport 53 $AC"
surfout6="$o -p udp --sport 53 $AC"
serv="$o -o eth0 -s $ip2 -d $ip3 $Moduleid $id $AC"
serv1="$o -o eth0 -s $ip1 -d $ip3 $Moduleid $id $AC"
serv2="$o -o eth0 -s $ip2 -d $ip1 $Moduleid $id $AC"
serv3="$o -o eth0 -s $ip1 -d $ip2 $Moduleid $id $AC"
p2p="$o -p tcp -m multiport --source-ports $portp2p2 $limituid $AC"
p2p2="$o -p udp -m multiport --source-ports $portp2p2 $limituid $AC"
gnomeout1="$o -p tcp -s $ip -d $ip --dport 111 -m state --state ESTABLISHED,NEW -j ACCEPT"
gnomeout2="$o -p tcp -s $ip -d $ip --sport 111 -m state --state ESTABLISHED,NEW -j ACCEPT"
p2p7="$o -p tcp -m multiport --destination-port $portp2p2 $limituid $AC"
p2p8="$o -p udp -m multiport --destination-port $portp2p2 $limituid $AC"
roottcp="$o -o eth0 -p tcp -s 192.168.1.81 -d 192.168.1.1 --dport 53 $Moduleid $idroot $AC"
rootudp="$o -o eth0 -p udp -s 192.168.1.81 -d 192.168.1.1 --dport 53 $Moduleid $idroot $AC"
roottcpip2="$o -o eth0 -p tcp -s $ip1 -d 192.168.1.1 --dport 53 $Moduleid $idroot $AC"
rootudpip2="$o -o eth0 -p udp -s $ip1 -d 192.168.1.1 --dport 53 $Moduleid $idroot $AC"
rootudpip3="$o -o eth0 -p udp -m iprange --src-range $ip1 --dst-range 212.147.10.0-212.147.10.250 --dport 53 $Moduleid $idroot $AC"
rootudpip4="$o -o eth0 -p udp -m iprange --src-range $rip2 --dst-range 212.147.10.0-212.147.10.255 --dport 53 $Moduleid $idroot $AC"
rootudp137="$o -o eth0 -p udp -m iprange --src-range $rip1 --dst-range $ip3 $Moduleid $idroot $AC"
rootudp138="$i -i eth0 -p udp -m iprange --src-range $rip1 --dst-range 192.168.1.255 $AC"
invalidelog="$o -p tcp -m state --state INVALID -j LOG --log-prefix=""----->syn: "" --log-level debug"
invalidelog="$o -p tcp -m state --state INVALID -j REJECT --reject-with tcp-reset"
# port en language plus parlant============================================================
msn="1863"
msn2="443"
filemsn="6891"
mailentranpop="110"
mailsortansmtp="25"
# Port FERMER==========================================================================
c22="22"
c68="68"
c111="111"
c113="113"
c162="162"
c6000="6000"
#string interdi note c est risquer !===========================================================================
stringInput="iptables -A INPUT -i eth0 -m string --string" # autre paramettre de --algo kmp
stringOutput="iptables -A OUTPUT -o eth0 -m string --string"
stringInputEndDrop="--algo bm -j DROP"
stringTexteCokie="cookie"
stringTextegay="gay"
stringTextegays="gays"
stringTextepopup="thumbzilla"
StringW1="pornstarfinder"
StringW2="moviesgold"
StringW3="vidsvidsvids"
StringW4="hanksgalleries"
StringW5="spewie"
StringW6="vx23855"
StringW7="elephantlist"
set -e
case "$1" in
start)
echo "Starting $DESC"
#============================================================================================
# Astuces
# lsof -ni
#============================================================================================
iptables -P INPUT DROP
$ipinudpdport $c162 $DP
$bs $banip $DP
$bd $banip $DP
$bs $banip1 $DP
$bd $banip1 $DP
$p2p3
$p2p4
$p2p5
$p2p26
$stringInput $stringTextegay $stringInputEndDrop
$stringInput $stringTextegays $stringInputEndDrop
$stringInput $stringTextepopup $stringInputEndDrop
$stringInput $StringW1 $stringInputEndDrop
$stringInput $StringW2 $stringInputEndDrop
$stringInput $StringW3 $stringInputEndDrop
$stringInput $StringW4 $stringInputEndDrop
$stringInput $StringW5 $stringInputEndDrop
$stringInput $StringW6 $stringInputEndDrop
$stringInput $StringW7 $stringInputEndDrop
$ipineth0tcpsport $c22 $DP
$ipineth0tcpsport $c68 $DP
$ipineth0tcpsport $c111 $DP
$ipineth0tcpsport $c113 $DP
$ipineth0tcpsport $c6000 $DP
$gnomein1
$gnomein2
$rootudp138
$loopack
$icpmonip1
$icpmonip2
$irc $suivi
$ircin $suivi
$ircone $suivi
$ipintcpsport $msn $suivi
$ipintcpsport $msn2 $AC
$ipintcpsport $filemsn $suivi
$surfin
$surfin2
$ipintcpsport $mailentranpop $suivi
$ipintcpsport $mailsortansmtp $suivi
$serv4
$serv5
#iptables -A INPUT -i eth0 -m string --string "lol" --algo bm -j REJECT # autre paramettre de --algo kmp
iptables -A INPUT -i eth0 -m limit --limit 1/d --limit-burst 1 -j LOG --log-prefix="IN Drop Final: " --log-level debug
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A FORWARD -p tcp -j REJECT --reject-with tcp-reset
#============================================================================================
# policy defaut
iptables -P OUTPUT DROP
#============================================================================================
#iptables -A OUTPUT -o lo -j ACCEPT
#============================================================================================
#iptables -A OUTPUT -o eth0 -m string --string "lol" --algo bm -j DROP # autre paramettre de --algo kmp
$invalidelog
$p2p2
$p2p
$p2p7
$p2p8
$gnomeout1
$gnomeout2
$ipouttcpdport $c111 $DP
$loopackout
$surfout
$surfout2
$ircout $newsuivi $AC
$ipouttcpdport $msn $limituid $AC
$ipouttcpdport $msn2 $limituid $AC
$ipouttcpdport $filemsn $limituid $AC
$ipouttcpdport $mailentranpop $limituid $AC
$ipouttcpdport $mailsortansmtp $limituid $AC
$serv
$serv1
$serv2
$serv3
$roottcp
$rootudp
$roottcpip2
$rootudpip2
$rootudpip3
#$rootudpip4
$rootudp137
iptables -A OUTPUT -o eth0 -m limit --limit 1/d --limit-burst 1 -j LOG --log-prefix="OUT Drop final: " --log-level debug
iptables -A OUTPUT -p tcp -j REJECT --reject-with tcp-reset
#iptables -A OUTPUT -o eth0 -j ACCEPT
#============================================================================================
iptables -P FORWARD ACCEPT
#============================================================================================
#Close port critique
#============================================================================================
#==================================END=======================================================
#echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
#
# On remet la police par défaut à ACCEPT
#
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#
# On remet les polices par défaut pour la table NAT
#
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#
# On vide (flush) toutes les règles existantes
#
iptables -F
iptables -t nat -F
#
# Et enfin, on efface toutes les chaînes qui ne
# sont pas à defaut dans la table filter et nat
iptables -X
iptables -t nat -X
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: /etc/init.d/fw {start|stop} " $DAEMON >&2
exit 1
;;
esac
exit 0