Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

iptables et danseguardian (sur squid)


bobymaw

Messages recommandés

Bonjour

J'avais demandé de l'aide il y a quelque temps pour partagé à ma connexion. Je ne suis pas super fort en réseau mais bref me voilà avec un partage de connexion qui marche.

J'ai installer sur l'ordinateur qui partage la connexion squid + danseguardian. Je les est testé en locale il marche.

J'aimerais obligés la connexion partagés à passé par ce proxy.

J'ai lu des tuto mes la ligne prerouting indiqué ne suffit pas :

$IPT -t nat -A PREROUTING -i $LOCAL -s 192.168.10.0/24 -p tcp --dport 80 -j DNAT --to $IP_OUT:$PROXY_PORT

LOCAL est l'interface connecté à mon réseau locale.

OUT celle relié au net

IP_OUT est l'adresse IP de l'interface OUT

IP_LOCAL celle de l'interface LOCAL

PROXY_PORT le port de danseguardian

 

J'ai des règles iptables plutôt strict par défaul tout est à DROP.

Voici mon bout de code pour le partage de connexion avec mes essaies commenté.

share()
{
ifconfig $LOCAL $IP_LOCAL
#Pour DNSMASQ uniquement en locale
 $IPT -A INPUT -p udp --sport 68 --dport 67 -i $LOCAL -j ACCEPT
 $IPT -A OUTPUT -p udp --sport 67 --dport 68 -o $LOCAL -j ACCEPT
 $IPT -A OUTPUT -p udp --dport 5353 --sport 5353 -o $LOCAL -j ACCEPT
 $IPT -A INPUT -p udp --dport 5353 --sport 5353 -i $LOCAL -j ACCEPT
 $IPT -A INPUT -p udp --dport 53 -i $LOCAL -j ACCEPT
 $IPT -A OUTPUT -p udp --dport 53 -o $LOCAL -j ACCEPT

#Ports forwardé
#  $IPT -A INPUT -m state --state NEW -p tcp -m multiport --dports 80,3128,443,110,25,1863 -i $LOCAL -j ACCEPT
#  $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 $IPT -A FORWARD -m state --state NEW -p tcp -m multiport --dports 80,3129,443,110,25,1863 -i $LOCAL -j ACCEPT
 $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 $IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o eth0 --clamp-mss-to-pmtu


echo 1 >/proc/sys/net/ipv4/ip_forward

#  $IPT -t nat -A PREROUTING -i $LOCAL -s 192.168.10.0/24 -p tcp --dport 80 -j ACCEPT
 $IPT -t nat -A PREROUTING -i $LOCAL -s 192.168.10.0/24 -p tcp --dport 80 -j DNAT --to $IP_OUT:$PROXY_PORT
 $IPT -t nat -A POSTROUTING -s 192.168.10.0/24 -o $OUT -j MASQUERADE
 $IPT -A INPUT -p tcp --dport $PROXY_PORT -i $OUT -j ACCEPT
}

Est ce que quelqu'un pourrais m'aider je ne comprend pas pourquoi cette ligne que j'ai peu ou prou retrouvé à l'identique dans plusieurs doc ne marche pas?

Lien vers le commentaire
Partager sur d’autres sites

Peut-être parce que tu fais des "append" sur les chaînes alors que ces mêmes chaînes contiennent des règles qui DROP, FORWARD ou MASQUERADE ce qui reste avant que tes règles ci-dessus n'aient la chance d'être évaluées ? Au hasard, tes règles de NAT....

 

L'ennui avec iptables, c'est que si on n'a pas toute l'histoire, on ne comprend pas ;-)

Lien vers le commentaire
Partager sur d’autres sites

mes tables PRE et POST ROUTING ne sont pas initialisé à drop. Elles ne sont pas intialisé du tout.

Voici mon script entier:

Si quelqu'un a une remarque dessus?

 

#!/bin/bash

### Chemin vers Iptables ###
IPT="/sbin/iptables"

### paramètre (y/n) ###
MODULE="y" #load les modules
HTTP_S="y"
HTTP_C="y"
FTP_S="y" #serveur
FTP_C="y" #client
JEUX="y"
MSN="y"
MYSQL="y"
NTP="y"
PING="y"
POP="y"
PROXY="y" #verouille HTTP et HTTPS pour les utilisateurs root et proxy
SMTP="y"
SSH="y"
SYNERGY="y"
SHARE="y"
VIDEOLAN="y"
TEST="y"
TEST_192="n"
TEST_172="y"
SYSCTL="y"

### interfaces ###
OUT="eth0"
LOCAL="eth1" # "eth1 eth2 eth3"
IP_LOCAL="`ifconfig $LOCAL | grep 'inet adr:' | cut -d: -f2 | awk '{ print $1}'`"
IP_OUT="`ifconfig $OUT | grep 'inet adr:' | cut -d: -f2 | awk '{ print $1}'`"
PROXY_PORT="8080"

flush()  ### purge de iptables ###
{ 
 $IPT -F
 $IPT -X
 $IPT -t nat -F
 $IPT -t nat -X
 $IPT -t mangle -F
 $IPT -t mangle -X
}

stop()
{
 #On accepte les packets par defaut
 $IPT -P INPUT ACCEPT
 $IPT -P OUTPUT ACCEPT  
 $IPT -P FORWARD ACCEPT
}



######### soft ##########
http_s()
{
 $IPT -A INPUT -p tcp --sport 1024:65535 -m multiport --dports 80,443 -i $OUT  -m state --state NEW --syn -j ACCEPT
}

http_c()
{
 $IPT -A OUTPUT -p tcp --sport 1024:65535 -m multiport --dports 80,443 -o $OUT  -m state --state NEW --syn -j ACCEPT
}

ftp_c()
{
 ### ouvre ftp en sortie uniquement (nécessite le module ip_conntrack_ftp) ###
 $IPT -A OUTPUT -p tcp --dport ftp -o $OUT -m state --state NEW --syn -j ACCEPT
 ### variante inspirée du guide de sécurité debian (autorise les mises à jour de sécurité uniquement) ###
 ### plusieurs règles peuvent être ajouter pour autoriser vos mirroirs de paquet deb ou rpm... ###
 #$IPT -A OUTPUT -p tcp -d security.debian.org --dport ftp -m state --state NEW -j ACCEPT
}

ftp_s()
{
 $IPT -A INPUT -p tcp --dport 21 -m state --state ESTABLISHED -j ACCEPT
 $IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
 #FTP-data actif
 $IPT -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
 $IPT -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
 #FTP-dat passif
 $IPT -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
 $IPT -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
}

jeux()
{
 echo jeux

}

msn()
{
 $IPT -A OUTPUT -p tcp --dport 1863 -m state --state NEW --syn -j ACCEPT
}

mysql()
{
 ### accepte mysql depuis l'interface $LOCAL ###
 $IPT -A INPUT -p tcp --sport 1025: --dport mysql -i $LOCAL -m state --state NEW --syn -j ACCEPT
 $IPT -A OUTPUT -p tcp --dport mysql -o $LOCAL -m state --state NEW --syn -j ACCEPT
}


ntp()
{
 $IPT -A OUTPUT -p udp --dport 53 -o $OUT -m state --state NEW -j ACCEPT
}

pingon()
{

 $IPT -A INPUT -p icmp --icmp-type redirect -j DROP
 $IPT -A INPUT -p icmp --icmp-type network-redirect -j DROP
 $IPT -A INPUT -p icmp --icmp-type TOS-network-redirect -j DROP
 $IPT -A INPUT -p icmp --icmp-type TOS-host-redirect -j DROP

 $IPT -A INPUT -p icmp --icmp-type destination-unreachable -m limit --limit 1/s -j ACCEPT
 $IPT -A INPUT -p icmp --icmp-type time-exceeded -m limit --limit 1/s -j ACCEPT
 $IPT -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT
 $IPT -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
 $IPT -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
}


pop()
{
 $IPT -A OUTPUT -p tcp -m multiport --dports 110,995 -o $OUT --syn -j ACCEPT
}

proxy()
{
 $IPT -A OUTPUT -o $OUT -p tcp -m multiport --dports http,https -m owner --uid-owner root -j ACCEPT
 $IPT -A OUTPUT -o $OUT -p tcp -m multiport --dports http,https -m owner --uid-owner proxy -j ACCEPT
 $IPT -t nat -A PREROUTING -i $OUT -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT
}


smtp()
{
 $IPT -A OUTPUT -p tcp -m multiport --dports 25,465 -o $OUT --syn -j ACCEPT
}

share()
{
ifconfig $LOCAL $IP_LOCAL
#pour DNSMASQ
 $IPT -A INPUT -p udp --sport 68 --dport 67 -i $LOCAL -j ACCEPT
 $IPT -A OUTPUT -p udp --sport 67 --dport 68 -o $LOCAL -j ACCEPT
 $IPT -A OUTPUT -p udp --dport 5353 --sport 5353 -o $LOCAL -j ACCEPT
 $IPT -A INPUT -p udp --dport 5353 --sport 5353 -i $LOCAL -j ACCEPT
 $IPT -A INPUT -p udp --dport 53 -i $LOCAL -j ACCEPT
 $IPT -A OUTPUT -p udp --dport 53 -o $LOCAL -j ACCEPT

#  $IPT -A INPUT -m state --state NEW -p tcp -m multiport --dports 80,3128,443,110,25,1863 -i $LOCAL -j ACCEPT
#  $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 $IPT -A FORWARD -m state --state NEW -p tcp -m multiport --dports 80,3129,443,110,25,1863 -i $LOCAL -j ACCEPT
 $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 $IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o eth0 --clamp-mss-to-pmtu

 echo 1 >/proc/sys/net/ipv4/ip_forward

#  $IPT -t nat -A PREROUTING -i $LOCAL -s 192.168.10.0/24 -p tcp --dport 80 -j ACCEPT
 $IPT -t nat -A PREROUTING -i $LOCAL -s 192.168.10.0/24 -p tcp --dport 80 -j DNAT --to $IP_OUT:$PROXY_PORT
 $IPT -t nat -A POSTROUTING -s 192.168.10.0/24 -o $OUT -j MASQUERADE
 $IPT -A INPUT -p tcp --dport $PROXY_PORT -i $OUT -j ACCEPT
}

ssh()
{
 $IPT -A INPUT -p tcp --dport ssh --sport 1024:65535 -m state --state NEW --syn -m limit --limit 1/s -j ACCEPT
 $IPT -A OUTPUT -p tcp --dport ssh --sport 1024:65535 -m state --state NEW --syn -j ACCEPT
 ### Je préfère n'accepter ssh sur l'interface $OUT en entrée que depuis certaines adresses IP jugées sûres (mon bureau, chez moi) ###
 #$IPT -A INPUT -p tcp --dport ssh -i $OUT -s xxx.xxx.xxx.xxx -m state --state NEW --syn -j ACCEPT
 ### Accepte les connexions ssh sur l'interface $LOCAL ###
 #$IPT -A INPUT -p tcp --dport ssh -i $LOCAL -m state --state NEW --syn -j ACCEPT
 #$IPT -A OUTPUT -p tcp --dport ssh -o $LOCAL -m state --state NEW --syn -j ACCEPT
}


synergy()
{
 $IPT -A INPUT -p tcp --dport 24800 -i $LOCAL -m state --state NEW --syn -j ACCEPT
 $IPT -A OUTPUT -p tcp --dport 24800 -o $LOCAL -m state --state NEW --syn -j ACCEPT
}


videolan()
{
 $IPT -A INPUT -p tcp --dport 1234 -i $LOCAL -m state --state NEW --syn -j ACCEPT
}


######### AUTRE ##########
module()
{
 modprobe ip_conntrack
 modprobe ip_conntrack_ftp
}


testpacket()
{
 ### vérifie la validité des paquets entrants ###
 #
 # Drop (NMAP) scan packets #
 $IPT -A VALID_CHECK -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
 $IPT -A VALID_CHECK -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
 $IPT -A VALID_CHECK -p tcp --tcp-flags ALL ALL -j DROP
 $IPT -A VALID_CHECK -p tcp --tcp-flags ALL FIN -j DROP
 $IPT -A VALID_CHECK -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
 $IPT -A VALID_CHECK -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
 $IPT -A VALID_CHECK -p tcp --tcp-flags ALL NONE -j DROP
 #
 # Drop packets with bad tcp flags
 $IPT -A VALID_CHECK -p tcp --tcp-option 64 -j DROP
 $IPT -A VALID_CHECK -p tcp --tcp-option 128 -j DROP
 #
 # Drop invalid packets
 $IPT -A VALID_CHECK -m state --state INVALID -j DROP
 # Drop port 0 scan packets
 $IPT -A VALID_CHECK -p tcp --dport 0 -j DROP
 $IPT -A VALID_CHECK -p udp --dport 0 -j DROP
 # Drop source port 0 packets
 $IPT -A VALID_CHECK -p tcp --sport 0 -j DROP
 $IPT -A VALID_CHECK -p udp --sport 0 -j DROP

 ### Verifie que les connection depuis OUT n'ont pas une IP LOCAL ###
 $IPT -A RESERVED_NET_CHECK -i $OUT -s 10.0.0.0/8 -j DROP
 if [ $TEST_192 = "y" ];then
$IPT -A RESERVED_NET_CHECK -i $OUT -s 192.168.0.0/16 -j DROP
 fi
 if [ $TEST_172 = "y" ];then
$IPT -A RESERVED_NET_CHECK -i $OUT -s 172.16.0.0/12 -j DROP
 fi
 $IPT -A RESERVED_NET_CHECK -i $OUT -s 169.254.0.0/16 -j DROP
}

sysctl()
{
 echo 1 > /proc/sys/net/ipv4/tcp_syncookies
 echo 0 > /proc/sys/net/ipv4/ip_forward
 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
 echo 1 >/proc/sys/net/ipv4/conf/all/log_martians
 echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
 echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
 echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
}




start()
{
 if [ $MODULE = "y" ];then
module
 fi
 ### Bloque tout par défaut ###
 $IPT -P INPUT DROP
 $IPT -P OUTPUT DROP
 $IPT -P FORWARD DROP

 ### Accepte les loopback ###
 $IPT -A INPUT -i lo -j ACCEPT
 $IPT -A OUTPUT -o lo -j ACCEPT

 ### déclaration des chaines personnelles ###
 $IPT -N VALID_CHECK
 $IPT -N RESERVED_NET_CHECK

 ### Autorise tout le trafic appartenant à des connections existantes. (nécessite le module ip_conntrack) ###
 $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 ### vérifie la validité des paquets en INPUT ###
 $IPT -A INPUT -j VALID_CHECK

 ### Verifie que les connection depuis OUT n'ont pas une IP LOCAL ###
 ### desactiver ceci si vous tester ce script au sein de votre réseau LOCAL et que vous êtes branché sur l'interface $OUT ###
 $IPT -A INPUT -i $OUT -j RESERVED_NET_CHECK


 ### Autorise l'envoi de requêtes DNS ###
 $IPT -A OUTPUT -p udp --dport 53 -o $OUT -m state --state NEW -j ACCEPT
 ### les requêtes DNS peuvent aussi être filtrées par adresse IP ###
 #$IPT -A OUTPUT -p udp --dport 53 -o $OUT -d xxx.xxx.xxx.xxx -m state --state NEW -j ACCEPT


  if [ $HTTP_C = "y" ];then
http_c
 fi
 if [ $HTTP_S = "y" ];then
http_s
 fi
 if [ $FTP_S = "y" ];then
ftp_s
 fi
 if [ $FTP_C = "y" ];then
ftp_c
 fi
 if [ $JEUX = "y" ];then
jeux
 fi
 if [ $MSN = "y" ];then
msn
 fi
 if [ $MYSQL = "y" ];then
mysql
 fi
 if [ $NTP = "y" ];then
ntp
 fi
 if [ $PING = "y" ];then
pingon
 fi
 if [ $POP = "y" ];then
pop
 fi
 if [ $PROXY = "y" ];then
proxy
 fi
 if [ $SMTP = "y" ];then
smtp
 fi
 if [ $SSH = "y" ];then
ssh
 fi
 if [ $SYNERGY = "y" ];then
synergy
 fi
 if [ $VIDEOLAN = "y" ];then
videolan
 fi
 if [ $TEST = "y" ];then
testpacket
 fi
 if [ $SYSCTL = "y" ];then
sysctl
 fi
 if [ $SHARE = "y" ];then
share
 fi
 $IPT -A INPUT -m hashlimit --hashlimit-name log --hashlimit-upto 6/minute --hashlimit-mode srcip,dstport -j LOG --log-prefix "paquet IPv4 inattendu "
}

soft()
{
 $IPT -A OUTPUT -j ACCEPT
}

open()
{
 case "$1" in
http)
http_c;;
http_s)
http_s;;
ftp_s)
ftp_s;;
ftp_c)
ftp_c;;
jeux)
jeux;;
mail)
smtp && pop;;
msn)
msn;;
mysql)
mysql;;
ping)
pingon;;
ssh)
ssh;;
synergy)
synergy;;
videolan)
videolan;;
*)
echo "http_s ftp_s ftp_c jeux mail msn mysql ping ssh synergy videolan"
 esac
}

case "$1" in
 start)
 flush && start;;
 stop)
 flush && stop;;
 restart)
 flush && start;;
 soft)
 soft;;
 share)
 share;;
 open)
 open $2;;
 *)
 echo "Usage: /etc/init.d/firewall {start|restart|stop|soft|open}"
 exit 1;;
esac

exit 0

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous publiez en tant qu’invité. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...