Retourner aux forums || Retourner au forum general.general
general.general : masquerading et wifi
Posté par Marc () le 10 février 2006
root@ap100:~# cat S45firewall
#!/bin/sh
. /etc/functions.sh
WAN=$(nvram get wan_ifname)
LAN=$(nvram get lan_ifname)
WIFI=$(nvram get wifi_ifname)
IPT=/usr/sbin/iptables
drop_ip_olsr () {
ip=$1
$IPT -A INPUT --source $ip -p udp --dport 698 -j DROP
$IPT -A INPUT --destination $ip -p udp --dport 698 -j DROP
}
accept_port(){
port=$1
$IPT -A INPUT -p tcp --dport $port -j ACCEPT
$IPT -A INPUT -p udp --dport $port -j ACCEPT
}
# ex : forward_port 8080 192.168.10.80 80 tcp
forward_port(){
sport=$1
dport=$3
daddr=$2
proto=$4
$IPT -t nat -A PREROUTING -p $proto --dport $sport -j DNAT --to $daddr
$IPT -A FORWARD -p $proto -d $daddr --dport $dport -j ACCEPT
}
for T in filter nat mangle ; do
$IPT -t $T -F
$IPT -t $T -X
done
# log errors : http://lea-linux.org/reseau/secu/iptables.html
for T in DROP ACCEPT REJECT ; do
$IPT -N LOG_${T}
$IPT -A LOG_${T} -j LOG --log-prefix "[IPTABLES $T] : "
$IPT -A LOG_${T} -j $T
done
$IPT -N LOG_P2P_DROP
$IPT -A LOG_P2P_DROP -j LOG --log-prefix "[IPTABLES P2P_DROP] : "
$IPT -A LOG_P2P_DROP -j DROP
# filter p2p forwarding.
if [ -f /lib/modules/2.4.29/ipt_ipp2p.o ] ; then
(lsmod | grep ipt_ipp2p > /dev/null)|| insmod /lib/modules/2.4.29/ipt_ipp2p.o
$IPT -A FORWARD -p udp -m ipp2p --ipp2p -j LOG_P2P_DROP
$IPT -A FORWARD -p tcp -m ipp2p --ipp2p -j LOG_P2P_DROP
fi
drop_ip_olsr 169.254.0.51
# accept OLSR protocol
$IPT -A INPUT -p tcp --dport 698 -j ACCEPT
$IPT -A INPUT -p udp --dport 698 -j ACCEPT
$IPT -A FORWARD -p tcp --dport 698 -j ACCEPT
$IPT -A FORWARD -p udp --dport 698 -j ACCEPT
# forward port :
# forward_port 8888 192.168.10.80 80 tcp
# forward_port 80 192.168.10.80 8080 tcp
$IPT -t filter -A INPUT -m state --state INVALID -j LOG_DROP
$IPT -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -t filter -A INPUT -p icmp -j ACCEPT
$IPT -t filter -A INPUT -p tcp --dport 22 -j ACCEPT # ssh
$IPT -t filter -A INPUT -p 47 -j ACCEPT # allow GRE
$IPT -t filter -A INPUT -p 53 -j ACCEPT # allow domain (DNS)
$IPT -t filter -A INPUT -i $WAN -p tcp -j REJECT --reject-with tcp-reset
$IPT -t filter -A INPUT -i $WAN -j REJECT --reject-with icmp-port-unreachable
# $IPT -t filter -A FORWARD -m state --state INVALID -j LOG_DROP
# $IPT -t filter -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# $IPT -t filter -A FORWARD -i $WAN -m state --state NEW,INVALID -j LOG_DROP
# $IPT -t filter -A FORWARD -o $WAN -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$IPT -A FORWARD -i $WIFI -o $LAN -m state --state NEW,INVALID -j LOG_ACCEPT
$IPT -A FORWARD -j ACCEPT
# $IPT -t nat -A POSTROUTING -o $WAN -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $LAN -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $WIFI -j MASQUERADE
root@ap100:~#
root@ap100:~#
root@ap100:~#
root@ap100:~# ls
S45firewall ap nfs ping.awk ping.sh rc-reconfigure rc-reconfigure~
root@ap100:~#
root@ap100:~#
root@ap100:~# cat /etc/init.d/S45firewall
#!/bin/sh
. /etc/functions.sh
WAN=$(nvram get wan_ifname)
LAN=$(nvram get lan_ifname)
WIFI=$(nvram get wifi_ifname)
IPT=/usr/sbin/iptables
drop_ip_olsr () {
ip=$1
$IPT -A INPUT --source $ip -p udp --dport 698 -j DROP
$IPT -A INPUT --destination $ip -p udp --dport 698 -j DROP
}
accept_port(){
port=$1
$IPT -A INPUT -p tcp --dport $port -j ACCEPT
$IPT -A INPUT -p udp --dport $port -j ACCEPT
}
# ex : forward_port 8080 192.168.10.80 80 tcp
forward_port(){
sport=$1
dport=$3
daddr=$2
proto=$4
$IPT -t nat -A PREROUTING -p $proto --dport $sport -j DNAT --to $daddr
$IPT -A FORWARD -p $proto -d $daddr --dport $dport -j ACCEPT
}
for T in filter nat mangle ; do
$IPT -t $T -F
$IPT -t $T -X
done
# log errors : http://lea-linux.org/reseau/secu/iptables.html
for T in DROP ACCEPT REJECT ; do
$IPT -N LOG_${T}
$IPT -A LOG_${T} -j LOG --log-prefix "[IPTABLES $T] : "
$IPT -A LOG_${T} -j $T
done
$IPT -N LOG_P2P_DROP
$IPT -A LOG_P2P_DROP -j LOG --log-prefix "[IPTABLES P2P_DROP] : "
$IPT -A LOG_P2P_DROP -j DROP
# filter p2p forwarding.
if [ -f /lib/modules/2.4.29/ipt_ipp2p.o ] ; then
(lsmod | grep ipt_ipp2p > /dev/null)|| insmod /lib/modules/2.4.29/ipt_ipp2p.o
$IPT -A FORWARD -m ipp2p --ipp2p --bit --apple --winmx --soul --ares -j LOG_P2P_DROP
# $IPT -A FORWARD -p udp -m ipp2p --ipp2p -j LOG_P2P_DROP
# $IPT -A FORWARD -p tcp -m ipp2p --ipp2p -j LOG_P2P_DROP
fi
# accept OLSR protocol
$IPT -A INPUT -p tcp --dport 698 -j ACCEPT
$IPT -A INPUT -p udp --dport 698 -j ACCEPT
$IPT -A FORWARD -p tcp --dport 698 -j ACCEPT
$IPT -A FORWARD -p udp --dport 698 -j ACCEPT
# forward port :
# forward_port 8888 192.168.10.80 80 tcp
# forward_port 80 192.168.10.80 8080 tcp
$IPT -t filter -A INPUT -m state --state INVALID -j LOG_DROP
$IPT -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -t filter -A INPUT -p icmp -j ACCEPT
$IPT -t filter -A INPUT -p tcp --dport 22 -j ACCEPT # ssh
$IPT -t filter -A INPUT -p 47 -j ACCEPT # allow GRE
$IPT -t filter -A INPUT -p 53 -j ACCEPT # allow domain (DNS)
$IPT -t filter -A INPUT -i $WAN -p tcp -j REJECT --reject-with tcp-reset
$IPT -t filter -A INPUT -i $WAN -j REJECT --reject-with icmp-port-unreachable
# $IPT -t filter -A FORWARD -m state --state INVALID -j LOG_DROP
# $IPT -t filter -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# $IPT -t filter -A FORWARD -i $WAN -m state --state NEW,INVALID -j LOG_DROP
# $IPT -t filter -A FORWARD -o $WAN -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$IPT -A FORWARD -i $WIFI -o $LAN -m state --state NEW,INVALID -j LOG_ACCEPT
$IPT -A FORWARD -j ACCEPT
# $IPT -t nat -A POSTROUTING -o $WAN -j MASQUERADE
# $IPT -t nat -A POSTROUTING -o $LAN -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $WIFI -j MASQUERADE
> Lire le message (5 commentaires, moyenne: 2,2).
Filtre sur l'interface d'entrée
Pour moi, il suffirait de filtrer la règle de NAT en fonction de l'interface d'entrée:
tu remplaces ta dernière ligne par:
$IPT -t nat -A POSTROUTING -i $LAN -o $WIFI -j MASQUERADE
et normalement, le trafic wifi->wifi sera routé de manière classique grâce à ta règle
$IPT -A FORWARD -j ACCEPT
-
[^]Re: Filtre sur l'interface d'entrée
-
[^]Re: Filtre sur l'interface d'entrée
Posté par Marc () le 11/02/2006 à 08:19. (lien). Évalué à 2.non ca ne passe pas. On ne peut pas assigner -i et -o sur le POSTROUTING. Il me semble que j'avais deja essayer et c'est la que mes competences iptables s'arretent. Je ne vois pas tres bien comment aller plus en avant.
Est-ce qu'on pourrait creer plusieurs chaines en fonction de la source (-i) et sur l'une faire du simple forwarding et sur l'autre du MASQUERADE.
cat S45firewall
....
# $IPT -t nat -A POSTROUTING -o $WAN -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $LAN -j MASQUERADE
$IPT -t nat -A POSTROUTING -i $LAN -o $WIFI -j MASQUERADE
$IPT -A FORWARD -j ACCEPT
root@ap100:~# ./S45firewall
iptables v1.3.0: Can't use -i with POSTROUTING
-
[^]Re: Filtre sur l'interface d'entrée
second script pitables
ici j'ai un second script iptables issu d'une version plus recente de openwrt, un peu modifié par mes soins. Mes modifs sont annotés #MQ.
wk ping.sh rc-reconfigure rc-reconfigure~
root@ap94:~# cat S45firewall-wr-rc4
#!/bin/sh
## Please make changes in /etc/firewall.user
${FAILSAFE:+exit}
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/sbin
. /etc/functions.sh
WAN=$(nvram get wan_ifname)
LAN=$(nvram get lan_ifname)
WIFI=$(nvram get wifi_ifname)
IPT=/usr/sbin/iptables
drop_ip_olsr () {
ip=$1
iptables -A INPUT --source $ip -p udp --dport 698 -j DROP
iptables -A INPUT --destination $ip -p udp --dport 698 -j DROP
}
## CLEAR TABLES
for T in filter nat; do
iptables -t $T -F
iptables -t $T -X
done
iptables -N input_rule
iptables -N output_rule
iptables -N forwarding_rule
iptables -t nat -N prerouting_rule
iptables -t nat -N postrouting_rule
# MQ
for T in DROP ACCEPT REJECT ; do
$IPT -N LOG_${T}
$IPT -A LOG_${T} -j LOG --log-prefix "[IPTABLES $T] : "
$IPT -A LOG_${T} -j $T
done
$IPT -N LOG_P2P_DROP
$IPT -A LOG_P2P_DROP -j LOG --log-prefix "[IPTABLES P2P_DROP] : "
$IPT -A LOG_P2P_DROP -j DROP
# /MQ
### INPUT
### (connections with the router as destination)
# base case
iptables -P INPUT DROP
iptables -A INPUT -m state --state INVALID -j LOG_DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN SYN --tcp-option \! 2 -j DROP
#
# insert accept rule or to jump to new accept-check table here
#
iptables -A INPUT -j input_rule
# drop_ip_olsr 169.254.0.51 # MQ pour test
# allow
iptables -A INPUT -i \! $WAN -j ACCEPT # allow from lan/wifi interfaces
iptables -A INPUT -p icmp -j ACCEPT # allow ICMP
# iptables -A INPUT -p gre -j ACCEPT # allow GRE # not supported
# reject (what to do with anything not allowed earlier)
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable
### OUTPUT
### (connections with the router as source)
# base case
iptables -P OUTPUT DROP
iptables -A OUTPUT -m state --state INVALID -j LOG_DROP
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#
# insert accept rule or to jump to new accept-check table here
#
iptables -A OUTPUT -j output_rule
# allow
iptables -A OUTPUT -j ACCEPT #allow everything out
# reject (what to do with anything not allowed earlier)
iptables -A OUTPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A OUTPUT -j REJECT --reject-with icmp-port-unreachable
### FORWARDING
### (connections routed through the router)
# base case
iptables -P FORWARD DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
#
# insert accept rule or to jump to new accept-check table here
#
iptables -A FORWARD -j forwarding_rule
# allow
iptables -A FORWARD -i br0 -o br0 -j ACCEPT
iptables -A FORWARD -i $LAN -o $WAN -j LOG_ACCEPT
iptables -A FORWARD -i $LAN -o $WIFI -j LOG_ACCEPT # MQ
iptables -A FORWARD -i $WIFI -o $WIFI -j LOG_ACCEPT # MQ
# reject (what to do with anything not allowed earlier)
# uses the default -P DROP
### MASQ
iptables -t nat -A PREROUTING -j prerouting_rule
iptables -t nat -A POSTROUTING -j postrouting_rule
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
iptables -t nat -A POSTROUTING -o $WIFI -j MASQUERADE # MQ
## USER RULES
# [ -f /etc/firewall.user ] && . /etc/firewall.user
iptables -F input_rule
iptables -F output_rule
iptables -F forwarding_rule
iptables -t nat -F prerouting_rule
iptables -t nat -F postrouting_rule
### BIG FAT DISCLAIMER
### The "-i $WAN" literally means packets that came in over the $WAN interface;
### this WILL NOT MATCH packets sent from the LAN to the WAN address.
### Allow SSH on the WAN interface
# iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j ACCEPT
# iptables -A input_rule -i $WAN -p tcp --dport 22 -j ACCEPT
### Port forwarding
# iptables -t nat -A prerouting_rule -i $WAN -p tcp --dport 22 -j DNAT --to 192.168.1.2
# iptables -A forwarding_rule -i $WAN -p tcp --dport 22 -d 192.168.1.2 -j ACCEPT
### DMZ (should be placed after port forwarding / accept rules)
# iptables -t nat -A prerouting_rule -i $WAN -j DNAT --to 192.168.1.2
# iptables -A forwarding_rule -i $WAN -d 192.168.1.2 -j ACCEPT
Revenir en haut de page || Retourner aux forums || Retourner au forum general.general



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.