<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000066">
This is my iptables_tc script. Create a file in /etc/init.d and the
create the symlinks <br>
<br>
<font face="Courier New">$ sudo update-rc.d iptables_tc detauls<br>
<br>
</font>Please adapt it to your needs. The file has firewall
functionality, routing SNAT and DNAT and bandwidth shaping.<br>
<br>
<font face="Courier New"><a class="moz-txt-link-abbreviated" href="mailto:jferrando@alcudia:/etc/init.d$">jferrando@alcudia:/etc/init.d$</a> cat iptables_tc<br>
#!/bin/sh<br>
#<br>
# iptables_tc - ipables/tc init script<br>
#<br>
# Written by Jordi Ferrando<br>
# Debian.etch / Kubuntu feisty 7.04<br>
# (GPL) NETPLC, <a class="moz-txt-link-abbreviated" href="mailto:jferrando@netplc.com">jferrando@netplc.com</a>, 17-may-2007<br>
<br>
TC="/sbin/tc"<br>
IPTABLES="/sbin/iptables"<br>
<br>
start() {<br>
echo "Firewall NETPLC/alcudia ..."<br>
<br>
#Router linux with bandwith control and firewall<br>
#(c)NETPLC, J.Ferrando, Ene-2005/17-may-2007<br>
#Interfaz eth0 10.54.10.2 / 255.255.255.0 (10.54.10.0/24,
SEG-ROUTER-LINUX)<br>
# eth1 10.54.11.1 / 255.255.255.0 (10.54.11.0/24, LAN)<br>
# tun0 10.54.12.1 / 255.255.255.0
(10.54.12.0/24, OPENVPN)<br>
#Default gateway 10.54.10.1<br>
#DNS servers 80.58.61.250, 80.58.61.254<br>
<br>
#flush de reglas<br>
$IPTABLES -F<br>
$IPTABLES -X<br>
$IPTABLES -Z<br>
$IPTABLES -t nat -F<br>
<br>
#-------------------------------------------------------------------------<br>
#DNAT tables<br>
#HTTP tcp/80<br>
#iptables --table nat --append PREROUTING -i eth0 -d 10.54.10.2
-p tcp --dport 80 -j DNAT --to 10.54.11.1<br>
iptables --table nat --append PREROUTING -i eth0 -d 10.54.10.2
-p tcp --dport 443 -j DNAT --to 10.54.11.71<br>
<br>
#SMTP<br>
iptables --table nat --append PREROUTING -i eth0 -d 10.54.10.2
-p tcp --dport 25 -j DNAT --to 10.54.11.71<br>
#imaps<br>
iptables --table nat --append PREROUTING -i eth0 -d 10.54.10.2
-p tcp --dport 993 -j DNAT --to 10.54.11.71<br>
#POP3S<br>
iptables --table nat --append PREROUTING -i eth0 -d 10.54.10.2
-p tcp --dport 995 -j DNAT --to 10.54.11.71<br>
<br>
#Openvpn<br>
iptables --table nat --append PREROUTING -i eth0 -d 10.54.10.2
-p udp --dport 1194 -j DNAT --to 10.54.11.1<br>
<br>
#aMule<br>
iptables --table nat --append PREROUTING -i eth0 -d 10.54.10.2
-p tcp --dport 4662 -j DNAT --to 10.54.11.66<br>
iptables --table nat --append PREROUTING -i eth0 -d 10.54.10.2
-p udp --dport 4672 -j DNAT --to 10.54.11.66<br>
<br>
#-------------------------------------------------------------------------<br>
#ROUTER SNAT para la LAN<br>
iptables --table nat --append POSTROUTING --out-interface eth0
-j MASQUERADE<br>
<br>
#-------------------------------------------------------------------------<br>
iptables -A INPUT -i lo -j ACCEPT<br>
<br>
#-------------------------------------------------------------------------<br>
#Reglas generales para conexiones ya establecidas <br>
iptables -A FORWARD -i eth0 -o eth1 -m state --state
ESTABLISHED,RELATED -j ACCEPT<br>
iptables -A FORWARD -i tun0 -o eth1 -m state --state
ESTABLISHED,RELATED -j ACCEPT<br>
<br>
#-------------------------------------------------------------------------<br>
#filtrado red eth0 (10.54.10.0/24)<br>
#http<br>
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport
80 -j ACCEPT<br>
#openvpn<br>
iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT<br>
iptables -A INPUT -i eth0 -p udp --sport 1194 -j ACCEPT<br>
#<br>
#aMule<br>
iptables -A INPUT -i eth0 -p tcp --dport 4663 -j ACCEPT<br>
#iptables -A INPUT -i eth0 -p udp --dport 4673 -j ACCEPT<br>
iptables -A INPUT -i eth0 -p udp --dport 4667 -j ACCEPT<br>
#<br>
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED
-j ACCEPT<br>
#drop por defecto<br>
iptables -A INPUT -i eth0 -j DROP<br>
<br>
#-------------------------------------------------------------------------<br>
#acceso de la VPN, tun0 (10.54.12.0/24)<br>
iptables -A INPUT -i tun0 -j ACCEPT<br>
iptables -A FORWARD -i tun0 -j ACCEPT<br>
<br>
iptables -A FORWARD -s 192.168.8.0/24 -d 10.54.11.0/24 -j ACCEPT<br>
iptables -A FORWARD -s 10.54.11.0/24 -d 192.168.8.0/24 -j ACCEPT<br>
<br>
#--------------------------------------------------------------------------<br>
#filtrado red eth1 (10.54.11.0/24)<br>
#La ip de la propia máquina (no hace falta habilitar el forward
para una ip de la propia máquina)<br>
iptables -A INPUT -s 10.54.10.2 -j ACCEPT<br>
<br>
#servicios a la red local 10.54.11.0/255.255.255.0<br>
#DNS<br>
iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --sport 53 -j
ACCEPT<br>
iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --dport 53 -j
ACCEPT<br>
iptables -A INPUT -s 10.54.11/24 -i eth1 -p udp --sport 53 -j
ACCEPT<br>
iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p udp --dport 53 -j
ACCEPT<br>
#Web server<br>
iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --sport 80 -j
ACCEPT<br>
iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --dport 80 -j
ACCEPT<br>
#iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --sport 443
-j ACCEPT<br>
#iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --dport 443
-j ACCEPT<br>
<br>
#imaps<br>
iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --sport 993
-j ACCEPT<br>
iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --dport 993
-j ACCEPT<br>
<br>
#pop3s<br>
iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --sport 995
-j ACCEPT<br>
iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --dport 995
-j ACCEPT<br>
<br>
#ntp / Network Time Protocol<br>
#iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --sport 123
-j ACCEPT<br>
iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p tcp --dport 123
-j ACCEPT<br>
#iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p udp --sport 123
-j ACCEPT<br>
iptables -A INPUT -s 10.54.11.0/24 -i eth1 -p udp --dport 123
-j ACCEPT<br>
#<br>
iptables -A FORWARD -s 10.54.11.0/24 -i eth1 -p tcp --dport 123
-j ACCEPT<br>
iptables -A FORWARD -s 10.54.11.0/24 -i eth1 -p udp --dport 123
-j ACCEPT<br>
<br>
#Política por defecto a exterior<br>
#Tráfico web<br>
iptables -A FORWARD -s 10.54.11.0/24 -i eth1 -p tcp --sport 80
-j ACCEPT<br>
iptables -A FORWARD -s 10.54.11.0/24 -i eth1 -p tcp --dport 80
-j ACCEPT<br>
iptables -A FORWARD -s 10.54.11.0/24 -i eth1 -p tcp --sport 443
-j ACCEPT<br>
iptables -A FORWARD -s 10.54.11.0/24 -i eth1 -p tcp --dport 443
-j ACCEPT<br>
#Si no habilitamos el puerto de openvpn los PCs de la LAN no
pueden aceptar conexiones de<br>
#clientes remotos a través de VPN<br>
iptables -A FORWARD -s 10.54.11.0/24 -i eth1 -p udp --sport
1194 -j ACCEPT<br>
iptables -A FORWARD -s 10.54.11.0/24 -i eth1 -p udp --dport
1194 -j ACCEPT<br>
iptables -A FORWARD -s 10.54.11.0/24 -d 10.54.12.0/24 -j ACCEPT<br>
iptables -A FORWARD -s 10.54.12.0/24 -d 10.54.11.0/24 -j ACCEPT<br>
<br>
#portjordi wireless<br>
iptables -A FORWARD -s 10.54.11.64 -m mac --mac-source
00:0D:54:9F:99:C5 -j ACCEPT<br>
iptables -A INPUT -s 10.54.11.64 -m mac --mac-source
00:0D:54:9F:99:C5 -j ACCEPT<br>
#portangela cable<br>
iptables -A FORWARD -s 10.54.11.65 -m mac --mac-source
00:E0:91:03:3C:EC -j ACCEPT<br>
iptables -A INPUT -s 10.54.11.65 -m mac --mac-source
00:E0:91:03:3C:EC -j ACCEPT<br>
#portangela wireless<br>
iptables -A FORWARD -s 10.54.11.66 -m mac --mac-source
00:0E:35:9D:83:C3 -j ACCEPT<br>
iptables -A INPUT -s 10.54.11.66 -m mac --mac-source
00:0E:35:9D:83:C3 -j ACCEPT<br>
#portjordi<br>
iptables -A FORWARD -s 10.54.11.70 -m mac --mac-source
00:08:0D:CD:CE:D9 -j ACCEPT<br>
iptables -A INPUT -s 10.54.11.70 -m mac --mac-source
00:08:0D:CD:CE:D9 -j ACCEPT<br>
#...<br>
<br>
#drop el resto<br>
iptables -A INPUT -i eth1 -j DROP<br>
iptables -A FORWARD -i eth1 -j DROP<br>
<br>
echo 1 > /proc/sys/net/ipv4/ip_forward<br>
<br>
#listar las tablas<br>
iptables -L -v -n<br>
iptables -L -v -n -t nat<br>
<br>
#Script tc / Traffic Control<br>
#J.Ferrando, 30-nov-2005<br>
<br>
#Borrar clase entera<br>
tc qdisc del dev eth0 root<br>
<br>
#This command attaches queue discipline HTB to eth0 and gives
it the "handle" 1:0.<br>
#This is just a name or identifier with which to refer to it
below.<br>
#The default 12 means that any traffic that is not otherwise
classified will be assigned to class 1:12.<br>
tc qdisc add dev eth0 root handle 1:0 htb default 20<br>
<br>
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 2880kbit
ceil 2880kbit prio 1 burst 32k cburst 3200<br>
tc class add dev eth0 parent 1:1 classid 1:5 htb rate 1920kbit
ceil 2880kbit prio 5 burst 16k cburst 1600<br>
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1280kbit
ceil 2880kbit prio 10 burst 8k cburst 800<br>
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 1280kbit
ceil 2880kbit prio 11 burst 8k cburst 800<br>
tc class add dev eth0 parent 1:1 classid 1:15 htb rate 640kbit
ceil 2880kbit prio 15 burst 2k cburst 200<br>
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 320kbit
ceil 2880kbit prio 20 burst 1k cburst 100<br>
tc class add dev eth0 parent 1:1 classid 1:25 htb rate 160kbit
ceil 160kbit prio 25 burst 512 cburst 52<br>
#tc class add dev eth0 parent 1:0 classid 1:1 htb rate 288kbit
ceil 288kbit prio 1 burst 32k cburst 3200<br>
#tc class add dev eth0 parent 1:1 classid 1:5 htb rate 192kbit
ceil 288kbit prio 5 burst 16k cburst 1600<br>
#tc class add dev eth0 parent 1:1 classid 1:10 htb rate 128kbit
ceil 288kbit prio 10 burst 8k cburst 800<br>
#tc class add dev eth0 parent 1:1 classid 1:11 htb rate 128kbit
ceil 288kbit prio 11 burst 8k cburst 800<br>
#tc class add dev eth0 parent 1:1 classid 1:15 htb rate 64kbit
ceil 288kbit prio 15 burst 2k cburst 200<br>
#tc class add dev eth0 parent 1:1 classid 1:20 htb rate 32kbit
ceil 288kbit prio 20 burst 1k cburst 100<br>
#tc class add dev eth0 parent 1:1 classid 1:25 htb rate 16kbit
ceil 16kbit prio 25 burst 512 cburst 52<br>
<br>
#<br>
tc qdisc add dev eth0 parent 1:5 handle 5:0 sfq perturb 10<br>
tc qdisc add dev eth0 parent 1:10 handle 10:0 sfq perturb 10<br>
tc qdisc add dev eth0 parent 1:11 handle 11:0 sfq perturb 10<br>
tc qdisc add dev eth0 parent 1:15 handle 15:0 sfq perturb 10<br>
tc qdisc add dev eth0 parent 1:20 handle 20:0 sfq perturb 10<br>
tc qdisc add dev eth0 parent 1:25 handle 25:0 sfq perturb 10<br>
<br>
#Privileged computers (Whitelist)<br>
iptables -A OUTPUT -t mangle -o eth0 -j MARK --set-mark 20<br>
iptables -A FORWARD -t mangle -i eth1 -o eth0 --source
10.54.11.1 -j MARK --set-mark 15<br>
#portjordi wireless<br>
iptables -A FORWARD -t mangle -i eth1 -o eth0 --source
10.54.11.64 -j MARK --set-mark 15<br>
#portangela cable<br>
iptables -A FORWARD -t mangle -i eth1 -o eth0 --source
10.54.11.65 -j MARK --set-mark 15<br>
#portangela wireless<br>
iptables -A FORWARD -t mangle -i eth1 -o eth0 --source
10.54.11.66 -j MARK --set-mark 15<br>
#...<br>
<br>
#Restrict computers (Blacklist)<br>
#iptables -A FORWARD -t mangle -i eth1 -o eth0 --source
10.54.8.71 -j MARK --set-mark 25<br>
<br>
#Priority protocols<br>
#<br>
iptables -A FORWARD -t mangle -i eth1 -p tcp --sport 80 -j MARK
--set-mark 5<br>
iptables -A FORWARD -t mangle -i eth1 -p tcp --dport 80 -j MARK
--set-mark 5<br>
iptables -A FORWARD -t mangle -i eth1 -p tcp --sport 443 -j
MARK --set-mark 5<br>
iptables -A FORWARD -t mangle -i eth1 -p tcp --dport 443 -j
MARK --set-mark 5<br>
iptables -A FORWARD -t mangle -i eth1 -p tcp --sport 25 -j MARK
--set-mark 5<br>
iptables -A FORWARD -t mangle -i eth1 -p tcp --dport 25 -j MARK
--set-mark 5<br>
iptables -A FORWARD -t mangle -i eth1 -p tcp --sport 993 -j
MARK --set-mark 5<br>
iptables -A FORWARD -t mangle -i eth1 -p tcp --dport 993 -j
MARK --set-mark 5<br>
<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --sport 80 -j MARK
--set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --dport 80 -j MARK
--set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --sport 443 -j MARK
--set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --dport 443 -j MARK
--set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --sport 25 -j MARK
--set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --dport 25 -j MARK
--set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --sport 993 -j MARK
--set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --dport 993 -j MARK
--set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p udp --sport 1194 -j
MARK --set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p udp --dport 1194 -j
MARK --set-mark 5<br>
#sky.fm<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --sport 8110 -j
MARK --set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --dport 8110 -j
MARK --set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --sport 8600 -j
MARK --set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --dport 8600 -j
MARK --set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --sport 8710 -j
MARK --set-mark 5<br>
iptables -A OUTPUT -t mangle -o eth0 -p tcp --dport 8710 -j
MARK --set-mark 5<br>
<br>
iptables -A FORWARD -t mangle -o eth0 -p icmp -j MARK
--set-mark 5<br>
<br>
#<br>
tc filter add dev eth0 protocol ip parent 1:0 prio 5 handle 5
fw flowid 1:5<br>
tc filter add dev eth0 protocol ip parent 1:0 prio 10 handle 10
fw flowid 1:10<br>
tc filter add dev eth0 protocol ip parent 1:0 prio 11 handle 11
fw flowid 1:11<br>
tc filter add dev eth0 protocol ip parent 1:0 prio 15 handle 15
fw flowid 1:15<br>
tc filter add dev eth0 protocol ip parent 1:0 prio 20 handle 20
fw flowid 1:20<br>
tc filter add dev eth0 protocol ip parent 1:0 prio 25 handle 25
fw flowid 1:25<br>
<br>
echo "Outbound shaping added to alcudia"<br>
}<br>
<br>
stop() {<br>
echo "stop ..."<br>
# Reset everything to a known state (cleared)<br>
#flush de reglas<br>
$IPTABLES -F<br>
$IPTABLES -X<br>
$IPTABLES -Z<br>
$IPTABLES -t nat -F<br>
#Borrar clase entera<br>
$TC qdisc del dev eth0 root<br>
<br>
echo "Shaping removed on alcudia"<br>
}<br>
<br>
status() {<br>
echo "[iptables]"<br>
$IPTABLES -L -v -n<br>
$IPTABLES -L -v -n -t nat<br>
echo "---- qdisc parameters ----------"<br>
#tc qdisc ls dev eth0<br>
echo "---- Class parameters ----------"<br>
#tc class ls dev eth0<br>
echo "---- filter parameters ---------"<br>
#tc filter ls dev eth0<br>
#Print tc statictics<br>
#echo "---- tc class statistics -------"<br>
#tc -s -d class show dev eth0<br>
echo "---- tc qdisc statistics -------"<br>
#tc -s -d qdisc show dev eth0<br>
}<br>
<br>
restart() {<br>
echo "restart ..."<br>
start<br>
}<br>
<br>
reload() {<br>
echo "start ..."<br>
start<br>
}<br>
<br>
force_reload() {<br>
echo "force-reload ..."<br>
start<br>
}<br>
<br>
case $1 in<br>
start)<br>
start<br>
;;<br>
stop)<br>
stop<br>
;;<br>
status)<br>
status<br>
;;<br>
restart)<br>
restart<br>
;;<br>
reload)<br>
reload<br>
;;<br>
force-reload)<br>
force_reload<br>
;;<br>
*)<br>
echo "Usage: iptables_tc
{start|stop|restart|reload|force-reload|status}"<br>
#echo "Usage: ${0##*/} {start|stop|restart|reload|status}"<br>
;;<br>
esac<br>
<br>
exit 0</font><br>
<br>
Donn escribió:
<blockquote cite="mid:200711111227.02939.donn.ingle@gmail.com"
type="cite">
<pre wrap="">Hi,
I want to run an iptables command to allow my other machine to surf through my
Kubuntu box. I used to put this into /etc/networking/netshare, but I can't
recall how it got run exactly.
How do I set this up on Gutsy (I don't savvy upstart yet) so it runs soon
after the network interfaces have come to life?
\d
</pre>
</blockquote>
<br>
</body>
</html>