# Siguiendo IPTables para newbies

## sunbqto

Hola amigos,

  Siguiendo el  Howto: http://gentoo-wiki.com/HOWTO_Iptables_for_newbies, estoy algo confuso, en la parte donde debo crear mi propio script, no se como enlazarlo para ponerlo a rodar

***********  A ver  esta es mi configuracion:

genshosam etc # /sbin/iptables -nL

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

ACCEPT     all  --  127.0.0.1            0.0.0.0/0           

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination         

genshosam etc #

*******************   y estas mis escazas reglas:

genshosam etc # cat /var/lib/iptables/rules-save

# Generated by iptables-save v1.3.8 on Sat Sep 29 20:15:04 2007

*mangle

:PREROUTING ACCEPT [457:38860]

:INPUT ACCEPT [457:38860]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [255:28156]

:POSTROUTING ACCEPT [255:28156]

COMMIT

# Completed on Sat Sep 29 20:15:04 2007

# Generated by iptables-save v1.3.8 on Sat Sep 29 20:15:04 2007

*filter

:INPUT ACCEPT [457:38860]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [255:28156]

[0:0] -A INPUT -s 127.0.0.1 -j ACCEPT 

COMMIT

# Completed on Sat Sep 29 20:15:04 2007

genshosam etc # 

  estoy enfrascado, debe ser una tonteria, pero no lo veo claro en ningun otro hilo.

Por ejemplo, este seria el script  definitivo a usar, no se como echarlo a correr:

Code Listing 5: /etc/init.d/firewall

#!/sbin/runscript

IPTABLES=/sbin/iptables

IPTABLESSAVE=/sbin/iptables-save

IPTABLESRESTORE=/sbin/iptables-restore

FIREWALL=/etc/firewall.rules

DNS1=212.242.40.3

DNS2=212.242.40.51

#inside

IIP=10.0.0.2

IINTERFACE=eth0

LOCAL_NETWORK=10.0.0.0/24

#outside

OIP=217.157.156.144

OINTERFACE=eth1

opts="${opts} showstatus panic save restore showoptions rules"

depend() {

  need net

}

rules() {

  stop

  ebegin "Setting internal rules"

  einfo "Setting default rule to drop"

  $IPTABLES -P FORWARD DROP

  $IPTABLES -P INPUT   DROP

  $IPTABLES -P OUTPUT  DROP

  #default rule

  einfo "Creating states chain"

  $IPTABLES -N allowed-connection

  $IPTABLES -F allowed-connection

  $IPTABLES -A allowed-connection -m state --state ESTABLISHED,RELATED -j ACCEPT

  $IPTABLES -A allowed-connection -i $IINTERFACE -m limit -j LOG --log-prefix \

      "Bad packet from ${IINTERFACE}:"

  $IPTABLES -A allowed-connection -j DROP

  #ICMP traffic

  einfo "Creating icmp chain"

  $IPTABLES -N icmp_allowed

  $IPTABLES -F icmp_allowed

  $IPTABLES -A icmp_allowed -m state --state NEW -p icmp --icmp-type \

      time-exceeded -j ACCEPT

  $IPTABLES -A icmp_allowed -m state --state NEW -p icmp --icmp-type \

      destination-unreachable -j ACCEPT

  $IPTABLES -A icmp_allowed -p icmp -j LOG --log-prefix "Bad ICMP traffic:"

  $IPTABLES -A icmp_allowed -p icmp -j DROP

  #Incoming traffic

  einfo "Creating incoming ssh traffic chain"

  $IPTABLES -N allow-ssh-traffic-in

  $IPTABLES -F allow-ssh-traffic-in

  #Flood protection

  $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \

      ALL RST --dport ssh -j ACCEPT

  $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \

      ALL FIN --dport ssh -j ACCEPT

  $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \

      ALL SYN --dport ssh -j ACCEPT

  $IPTABLES -A allow-ssh-traffic-in -m state --state RELATED,ESTABLISHED -p tcp --dport ssh -j ACCEPT

  #outgoing traffic

  einfo "Creating outgoing ssh traffic chain"

  $IPTABLES -N allow-ssh-traffic-out

  $IPTABLES -F allow-ssh-traffic-out

  $IPTABLES -A allow-ssh-traffic-out -p tcp --dport ssh -j ACCEPT

  einfo "Creating outgoing dns traffic chain"

  $IPTABLES -N allow-dns-traffic-out

  $IPTABLES -F allow-dns-traffic-out

  $IPTABLES -A allow-dns-traffic-out -p udp -d $DNS1 --dport domain \

      -j ACCEPT

  $IPTABLES -A allow-dns-traffic-out -p udp -d $DNS2 --dport domain \

     -j ACCEPT

  einfo "Creating outgoing http/https traffic chain"

  $IPTABLES -N allow-www-traffic-out

  $IPTABLES -F allow-www-traffic-out

  $IPTABLES -A allow-www-traffic-out -p tcp --dport www -j ACCEPT

  $IPTABLES -A allow-www-traffic-out -p tcp --dport https -j ACCEPT

  #Catch portscanners

  einfo "Creating portscan detection chain"

  $IPTABLES -N check-flags

  $IPTABLES -F check-flags

  $IPTABLES -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -m limit \

      --limit 5/minute -j LOG --log-level alert --log-prefix "NMAP-XMAS:"

  $IPTABLES -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

  $IPTABLES -A check-flags -p tcp --tcp-flags ALL ALL -m limit --limit \

      5/minute -j LOG --log-level 1 --log-prefix "XMAS:"

  $IPTABLES -A check-flags -p tcp --tcp-flags ALL ALL -j DROP

  $IPTABLES -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG \

      -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS-PSH:"

  $IPTABLES -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

  $IPTABLES -A check-flags -p tcp --tcp-flags ALL NONE -m limit \

      --limit 5/minute -j LOG --log-level 1 --log-prefix "NULL_SCAN:"

  $IPTABLES -A check-flags -p tcp --tcp-flags ALL NONE -j DROP

  $IPTABLES -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -m limit \

      --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/RST:"

  $IPTABLES -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

  $IPTABLES -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit \

      --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/FIN:"

  $IPTABLES -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

  # Apply and add invalid states to the chains

  einfo "Applying chains to INPUT"

  $IPTABLES -A INPUT -m state --state INVALID -j DROP

  $IPTABLES -A INPUT -p icmp -j icmp_allowed

  $IPTABLES -A INPUT -j check-flags

  $IPTABLES -A INPUT -i lo -j ACCEPT

  $IPTABLES -A INPUT -j allow-ssh-traffic-in

  $IPTABLES -A INPUT -j allowed-connection

  einfo "Applying chains to FORWARD"

  $IPTABLES -A FORWARD -m state --state INVALID -j DROP

  $IPTABLES -A FORWARD -p icmp -j icmp_allowed

  $IPTABLES -A FORWARD -j check-flags

  $IPTABLES -A FORWARD -o lo -j ACCEPT

  $IPTABLES -A FORWARD -j allow-ssh-traffic-in

  $IPTABLES -A FORWARD -j allow-www-traffic-out

  $IPTABLES -A FORWARD -j allowed-connection

  einfo "Applying chains to OUTPUT"

  $IPTABLES -A OUTPUT -m state --state INVALID -j DROP

  $IPTABLES -A OUTPUT -p icmp -j icmp_allowed

  $IPTABLES -A OUTPUT -j check-flags

  $IPTABLES -A OUTPUT -o lo -j ACCEPT

  $IPTABLES -A OUTPUT -j allow-ssh-traffic-out

  $IPTABLES -A OUTPUT -j allow-dns-traffic-out

  $IPTABLES -A OUTPUT -j allow-www-traffic-out

  $IPTABLES -A OUTPUT -j allowed-connection

  #Allow client to route through via NAT (Network Address Translation)

  $IPTABLES -t nat -A POSTROUTING -o $OINTERFACE -j MASQUERADE

  eend $?

}

start() {

  ebegin "Starting firewall"

  if [ -e "${FIREWALL}" ]; then

    restore

  else

    einfo "${FIREWALL} does not exists. Using default rules."

    rules

  fi

  eend $?

}

stop() {

  ebegin "Stopping firewall"

  $IPTABLES -F

  $IPTABLES -t nat -F

  $IPTABLES -X

  $IPTABLES -P FORWARD ACCEPT

  $IPTABLES -P INPUT   ACCEPT

  $IPTABLES -P OUTPUT  ACCEPT

  eend $?

}

showstatus() {

  ebegin "Status"

  $IPTABLES -L -n -v --line-numbers

  einfo "NAT status"

  $IPTABLES -L -n -v --line-numbers -t nat

  eend $?

}

panic() {

  ebegin "Setting panic rules"

  $IPTABLES -F

  $IPTABLES -X

  $IPTABLES -t nat -F

  $IPTABLES -P FORWARD DROP

  $IPTABLES -P INPUT   DROP

  $IPTABLES -P OUTPUT  DROP

  $IPTABLES -A INPUT -i lo -j ACCEPT

  $IPTABLES -A OUTPUT -o lo -j ACCEPT

  eend $?

}

save() {

  ebegin "Saving Firewall rules"

  $IPTABLESSAVE > $FIREWALL

  eend $?

}

restore() {

  ebegin "Restoring Firewall rules"

  $IPTABLESRESTORE < $FIREWALL

  eend $?

}

restart() {

  svc_stop; svc_start

}

showoptions() {

  echo "Usage: $0 {start|save|restore|panic|stop|restart|showstatus}"

  echo "start)      will restore setting if exists else force rules"

  echo "stop)       delete all rules and set all to accept"

  echo "rules)      force settings of new rules"

  echo "save)       will store settings in ${FIREWALL}"

  echo "restore)    will restore settings from ${FIREWALL}"

  echo "showstatus) Shows the status"

}

  Gracias TOTALES

----------

## Cereza

No es necesario hacer un script con las reglas. Haz iptables -nL y observa si ya está a tu gusto, si lo está, solo tienes que hacer como root /etc/init.d/iptables save

Edito: Espera jeje, acabo de leer mejor tu mensaje y veo que has pegado un iptables -nL, que basicamente viene a decir que lo tienes todo ABIERTO, sin ninguna regla activa. Todas esas "escasas" reglas que has pegado no se han aplicado. Haz una copia de seguridad de tu rules-save y prueba a reiniciar iptables a ver si las coge, hasta que no veas esas reglas haciendo un iptables -nL, no hagas /etc/init.d/iptables saveLast edited by Cereza on Sat Sep 29, 2007 6:52 pm; edited 1 time in total

----------

## sunbqto

 *Cereza wrote:*   

> No es necesario hacer un script con las reglas. Haz iptables -nL y observa si ya está a tu gusto, si lo está, solo tienes que hacer como root /etc/init.d/iptables save

 

   He llegado hasta donde modifico el archivo /etc/iptables.bak, con las reglas que requiero, peroooooooo, cuando hago 

#iptables-restore /etc/iptables.bak,  me da un error en la ultima linea que intenta restaurar y no restaura nada,

 creo que con un script, los errores serian mas facil de depurar.

 Gracias

----------

## Cereza

 *sunbqto wrote:*   

>  *Cereza wrote:*   No es necesario hacer un script con las reglas. Haz iptables -nL y observa si ya está a tu gusto, si lo está, solo tienes que hacer como root /etc/init.d/iptables save 
> 
>    He llegado hasta donde modifico el archivo /etc/iptables.bak, con las reglas que requiero, peroooooooo, cuando hago 
> 
> #iptables-restore /etc/iptables.bak, da un error y no restaura nada, creo que con un script, los errores serian mas facil de depurar.
> ...

 

Ni siquiera tengo ese archivo, /etc/iptables.bak, olvidate de iptables-restore, usa /etc/init.d/iptables para restart, save, start, stop y demás. No he leído ese howto pero a mi iptables me va muy bien, y solo lo configuré a base de meter las reglas a mano y guardarlas con /etc/init.d/iptables save una vez tenía lo que quería.

Guarda tus reglas en /var/lib/iptables/rules-save y prueba a reiniciar iptables

----------

## sunbqto

 *Cereza wrote:*   

>  Ni siquiera tengo ese archivo, /etc/iptables.bak, olvidate de iptables-restore, usa /etc/init.d/iptables para restore, save, start, stop y demás. No he leído ese howto pero a mi iptables me va muy bien, y solo lo configuré a base de meter las reglas a mano y guardarlas con /etc/init.d/iptables save una vez tenía lo que quería.

 

  A mano..., estoy aprendiendo para enmascarar paquetes y frenar los p2p,  aplicar las reglas una por una, me da como ganas de volverme a shorewall.

  Cereza, mis archivos /etc/iptables.bak = /var/lib/iptables/rules-save = /var/lib/iptables/rules.working, en otras palabras, 

por donde sea obtengo el mismo stop, sin una aclaracion del error que tengo.

  Cuando tu aplicas /iptables save, que archivo estas grabando, no es un script, es el conjunto de reglas, ese mismo a quien

no he podido meterle mano

   Cereza, Gracias

----------

## Cereza

Ésta fué la pequeña guía que me abrió los ojos sobre iptables http://www.badopi.org/node/977

Solo añadir a esa guía, que cuando para cambiar la politica de un protocolo dice "iptables -P INPUT -j DROP" en mi caso, no me lo acepta, y tengo que harlo sin el -j (¿diferentes versiones tal vez?)

Es muy básica pero bastante clara, lo que no sé es si cubrirá tus necesidades.

----------

## sunbqto

 *Cereza wrote:*   

> Ésta fué la pequeña guía que me abrió los ojos sobre iptables http://www.badopi.org/node/977
> 
> Solo añadir a esa guía, que cuando para cambiar la politica de un protocolo dice "iptables -P INPUT -j DROP" en mi caso, no me lo acepta, y tengo que harlo sin el -j (¿diferentes versiones tal vez?)
> 
> Es muy básica pero bastante clara, lo que no sé es si cubrirá tus necesidades.

 

  Si realmente muy util, al final te recomiendan que pases tus reglas a un script: "En eso ando"

  Mil Gracias

----------

## Cereza

Bueno, yo no he hecho nada así pero creo que bastaría con que hicieras un script sencillo en bash, añadiendo todas las reglas como si lo hicieras a mano, tal que así:

```
#!/bin/bash/

iptables -P INPUT DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i lo -s 127.0.0.1 -j ACCEPT

iptables ........

```

Por ejemplo, y lo guardas como firewall.sh, le das permisos de ejecución, y una vez hecho esto editas /etc/conf.d/local.start para poner la ruta del script que acabas de hacer, es decir, añadas la linea:

```
/root/firewall.sh
```

o donde sea que lo hayas que lo hayas puesto. De este modo el script se lanzará automaticamente en cada booteo (todo lo que pongas en /etc/conf.d/local.start se lanza automaticamente al final de INIT, como root). Mi consejo es que el script lo guardes en /root y solo tenga permisos para root, ya que es un archivo de seguridad importante. Asegurate también de que el servicio local está en el runlevel default rc-update add local default

 Si ha funcionado, al arrancar y hacer iptables -nL deberias ver todas tus reglas. Aún así y como ya he dicho yo no he hecho esto y sería cosa de que vayas probando.

----------

## i92guboj

 *Cereza wrote:*   

> Bueno, yo no he hecho nada así pero creo que bastaría con que hicieras un script sencillo en bash, añadiendo todas las reglas como si lo hicieras a mano, tal que así:
> 
> ```
> #!/bin/bash/
> 
> ...

 

Como dice cereza, si quieres guardarlo en forma de script de bash lo único que necesitas es ponerlo todo en un archivo de texto plano y luego darle permisos de ejecución (chmod u+x <file>).

Yo, además de las reglas añadiría algunas líneas para limpiar las tablas antes de empezar, y para salvarlas al terminar. Así luego no es necesario guardarlas a mano.

```

#First we flush our current rules

iptables -F

iptables -t nat -F

...

[tus reglas aquí]

...

#Tell the kernel that ip forwarding is OK

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

for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

#This is so when we boot we don't have to run the rules by hand

/etc/init.d/iptables save

```

La parte de ip forwarding tan solo es necesario si piensas hacer  NAT o alguna otra cosa que lo requiera.

----------

## opotonil

Yo me tengo hecho un script, que ni se puede llamar script es mas bien un listado de reglas, me es mas comodo modificarlas teniendolo asi, basado en el de http://www.gentoo.org/doc/en/security/security-handbook.xml?part=1&chap=12#doc_chap5 te lo pego a continuacion:

```

#!/bin/bash

IPTABLES=/sbin/iptables

LAN=192.168.1.240/28

echo "Setting firewall rules"

# Erasing rules

$IPTABLES -F

$IPTABLES -X

# Setting default rule to drop

$IPTABLES -P INPUT   DROP

$IPTABLES -P FORWARD DROP

$IPTABLES -P OUTPUT  DROP

# Creating icmp chain

$IPTABLES -N allow-icmp

$IPTABLES -F allow-icmp

$IPTABLES -A allow-icmp -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT

$IPTABLES -A allow-icmp -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT

$IPTABLES -A allow-icmp -p icmp -j LOG --log-prefix "Bad ICMP traffic: "

$IPTABLES -A allow-icmp -p icmp -j DROP

# Creating portscan detection chain

$IPTABLES -N check-flags

$IPTABLES -F check-flags

$IPTABLES -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j LOG --log-level alert --log-prefix "NMAP-XMAS: "

$IPTABLES -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

$IPTABLES -A check-flags -p tcp --tcp-flags ALL ALL -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS: "

$IPTABLES -A check-flags -p tcp --tcp-flags ALL ALL -j DROP

$IPTABLES -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS-PSH: "

$IPTABLES -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

$IPTABLES -A check-flags -p tcp --tcp-flags ALL NONE -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "NULL_SCAN: "

$IPTABLES -A check-flags -p tcp --tcp-flags ALL NONE -j DROP

$IPTABLES -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/RST: "

$IPTABLES -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

$IPTABLES -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/FIN: "

$IPTABLES -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# Creating states chain

$IPTABLES -N allow-connection

$IPTABLES -F allow-connection

$IPTABLES -A allow-connection -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A allow-connection -j DROP

echo "Setting incoming traffic"

# Creating incoming ssh traffic chain

$IPTABLES -N allow-ssh-in

$IPTABLES -F allow-ssh-in

# Flood protection

$IPTABLES -A allow-ssh-in -m limit --limit 1/second -p tcp --tcp-flags ALL RST --dport ssh -j ACCEPT

$IPTABLES -A allow-ssh-in -m limit --limit 1/second -p tcp --tcp-flags ALL FIN --dport ssh -j ACCEPT

$IPTABLES -A allow-ssh-in -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport ssh -j ACCEPT

$IPTABLES -A allow-ssh-in -m state --state RELATED,ESTABLISHED -p tcp --dport ssh -j ACCEPT

# Creating incoming nut traffic chain

$IPTABLES -N allow-nut-in

$IPTABLES -F allow-nut-in

$IPTABLES -A allow-nut-in -p tcp -s $LAN --dport nut -j ACCEPT

# Creating incoming ldap traffic chain

$IPTABLES -N allow-ldap-in

$IPTABLES -F allow-ldap-in

$IPTABLES -A allow-ldap-in -p tcp -s $LAN --dport ldap -j ACCEPT

$IPTABLES -A allow-ldap-in -p tcp -s $LAN --dport ldaps -j ACCEPT

# Creating incoming samba traffic chain

$IPTABLES -N allow-samba-in

$IPTABLES -F allow-samba-in

$IPTABLES -A allow-samba-in -p udp -s $LAN --dport netbios-ns -j ACCEPT

$IPTABLES -A allow-samba-in -p udp -s $LAN --dport netbios-dgm -j ACCEPT

$IPTABLES -A allow-samba-in -p tcp -s $LAN --dport netbios-ssn -j ACCEPT

$IPTABLES -A allow-samba-in -p tcp -s $LAN --dport microsoft-ds -j ACCEPT

# Creating incoming cups traffic chain

$IPTABLES -N allow-cups-in

$IPTABLES -F allow-cups-in

$IPTABLES -A allow-cups-in -p tcp -s $LAN --dport ipp -j ACCEPT

# Creating incoming mail traffic chain

$IPTABLES -N allow-mail-in

$IPTABLES -F allow-mail-in

$IPTABLES -A allow-mail-in -p tcp -s $LAN --dport smtp -j ACCEPT

$IPTABLES -A allow-mail-in -p tcp --dport submission -j ACCEPT

$IPTABLES -A allow-mail-in -p tcp -s $LAN --dport pop3 -j ACCEPT

$IPTABLES -A allow-mail-in -p tcp --dport pop3s -j ACCEPT

$IPTABLES -A allow-mail-in -p tcp -s $LAN --dport imap -j ACCEPT

$IPTABLES -A allow-mail-in -p tcp --dport imaps -j ACCEPT

# Creating incoming www traffic chain

$IPTABLES -N allow-www-in

$IPTABLES -F allow-www-in

$IPTABLES -A allow-www-in -p tcp -s $LAN --dport http -j ACCEPT

$IPTABLES -A allow-www-in -p tcp --dport https -j ACCEPT

# Creating incoming p2p traffic chain

$IPTABLES -N allow-p2p-in

$IPTABLES -F allow-p2p-in

$IPTABLES -A allow-p2p-in -p tcp -s $LAN --dport 4000 -j ACCEPT

$IPTABLES -A allow-p2p-in -p tcp -s $LAN --dport 4001 -j ACCEPT

$IPTABLES -A allow-p2p-in -p tcp -s $LAN --dport 4080 -j ACCEPT

$IPTABLES -A allow-p2p-in -p tcp -s ! $LAN --dport 32250 -j ACCEPT

$IPTABLES -A allow-p2p-in -p tcp -s ! $LAN --dport 32251 -j ACCEPT

$IPTABLES -A allow-p2p-in -p tcp -s ! $LAN --dport 32252 -j ACCEPT

$IPTABLES -A allow-p2p-in -p udp -s ! $LAN --dport 32253 -j ACCEPT

$IPTABLES -A allow-p2p-in -p tcp -s ! $LAN --dport 32253 -j ACCEPT

$IPTABLES -A allow-p2p-in -p udp -s ! $LAN --dport 32254 -j ACCEPT

$IPTABLES -A allow-p2p-in -p udp -s ! $LAN --dport 32255 -j ACCEPT

$IPTABLES -A allow-p2p-in -p tcp -s ! $LAN --dport 32255 -j ACCEPT

echo "Setting outgoing traffic"

# Creating outgoing dns traffic chain

$IPTABLES -N allow-dns-out

$IPTABLES -F allow-dns-out

$IPTABLES -A allow-dns-out -p udp --dport domain -j ACCEPT

# Creating outgoing ssh traffic chain

$IPTABLES -N allow-ssh-out

$IPTABLES -F allow-ssh-out

$IPTABLES -A allow-ssh-out -p tcp --dport ssh -j ACCEPT

# Creating outgoing samba traffic chain

$IPTABLES -N allow-samba-out

$IPTABLES -F allow-samba-out

$IPTABLES -A allow-samba-out -p udp --dport netbios-ns -j ACCEPT

$IPTABLES -A allow-samba-out -p udp --dport netbios-dgm -j ACCEPT

# Creating outgoing rsync traffic chain

$IPTABLES -N allow-rsync-out

$IPTABLES -F allow-rsync-out

$IPTABLES -A allow-rsync-out -p tcp --dport rsync -j ACCEPT

# Creating outgoing mail traffic chain

$IPTABLES -N allow-mail-out

$IPTABLES -F allow-mail-out

$IPTABLES -A allow-mail-out -p tcp --dport smtp -j ACCEPT

# Creating outgoing www traffic chain

$IPTABLES -N allow-www-out

$IPTABLES -F allow-www-out

$IPTABLES -A allow-www-out -p tcp --dport http -j ACCEPT

$IPTABLES -A allow-www-out -p tcp --dport https -j ACCEPT

# Creating outgoing ftp traffic chain

$IPTABLES -N allow-ftp-out

$IPTABLES -F allow-ftp-out

$IPTABLES -A allow-ftp-out -p tcp --dport ftp -j ACCEPT

$IPTABLES -A allow-ftp-out -p tcp --dport ftp-data -j ACCEPT

# Creating outgoing p2p traffic chain

$IPTABLES -N allow-p2p-out

$IPTABLES -F allow-p2p-out

$IPTABLES -A allow-p2p-out -p tcp --dport 1025:65535 -j ACCEPT

$IPTABLES -A allow-p2p-out -p udp --dport 1025:65535 -j ACCEPT

echo "Adding and applying chains"

# Applying chains to INPUT

$IPTABLES -A INPUT -m state --state INVALID -j DROP

$IPTABLES -A INPUT -p icmp -j allow-icmp

$IPTABLES -A INPUT -j check-flags

$IPTABLES -A INPUT -i lo -j ACCEPT

$IPTABLES -A INPUT -j allow-ssh-in

$IPTABLES -A INPUT -j allow-nut-in

$IPTABLES -A INPUT -j allow-ldap-in

$IPTABLES -A INPUT -j allow-samba-in

$IPTABLES -A INPUT -j allow-cups-in

$IPTABLES -A INPUT -j allow-mail-in

$IPTABLES -A INPUT -j allow-www-in

$IPTABLES -A INPUT -j allow-p2p-in

$IPTABLES -A INPUT -j allow-connection

# Applying chains to FORWARD

$IPTABLES -A FORWARD -m state --state INVALID -j DROP

$IPTABLES -A FORWARD -p icmp -j allow-icmp

$IPTABLES -A FORWARD -j check-flags

$IPTABLES -A FORWARD -i lo -j ACCEPT

$IPTABLES -A FORWARD -j allow-connection

# Applying chains to OUTPUT"

$IPTABLES -A OUTPUT -m state --state INVALID -j DROP

$IPTABLES -A OUTPUT -p icmp -j allow-icmp

$IPTABLES -A OUTPUT -j check-flags

$IPTABLES -A OUTPUT -o lo -j ACCEPT

$IPTABLES -A OUTPUT -j allow-dns-out

$IPTABLES -A OUTPUT -j allow-ssh-out

$IPTABLES -A OUTPUT -j allow-samba-out

$IPTABLES -A OUTPUT -j allow-rsync-out

$IPTABLES -A OUTPUT -j allow-mail-out

$IPTABLES -A OUTPUT -j allow-www-out

$IPTABLES -A OUTPUT -j allow-ftp-out

$IPTABLES -A OUTPUT -j allow-p2p-out

$IPTABLES -A OUTPUT -j allow-connection

echo "Finished"

```

bueno pues lo tengo guardado como iptables.sh de manera que lo ejecuto con:

```

bash iptables.sh

```

ahora si haces un:

```

iptables -L

```

ya te deberian de aparecer todas las reglas, asi que te valdria con usar el script de inicio que se incluye en el ebuild del iptables de la siguiente manera:

```

/etc/init.d/iptables save

/etc/init.d/iptables start

rc-update add iptables default

```

Por cierto la regla "allow-p2p-out" es una autentica chapuza, pero no he encontrado nada mejor con lo que me funcione bien el mldonkey. Probe ipp2p y l7-filter pero no hubo manera.

Salu2.

PD: Cereza, ese avatar ¿era un juego del msx?

----------

## gringo

yo para esto ya no me rompo la cabeza y uso scripts de terceros, ahora mismo uso el de arno. Fácil y flexible, no pido nada mas  :Smile: 

Una vez que tengas tus reglas creadas y cargadas, guárdalas con iptables save y luego simplemente carga iptables como otro servicio cualquiera.

saluetes

----------

