Iptables + icmp ayuda

Forums: 

hola amigos de ecualug la pagina que mas consulto :) tengo una duda como puedo hacer con mi iptables para que cuando alguien de ping a mi linux no reciba respuesta de el. pero yo si pueda dar pinga desde mi linux a otras redes en internet.
resulta que pongo esto en mi iptables
esquema:
eth0= wan
eth1= lan
bloqueo con input a -i eth0 el protocolo icmp

iptables -A INPUT -i eth0 -p icmp -j DROP

aqui deniego el ping desde afuera no logran dar ping
pero tambien no logro dar ping yo desde mi linux a internet
como puedo hacer para que el ping solo pueda afectar a las personas que hacen ping a mi linux pero no me afecte a mi internamente hacia internet.
la unica forma que hago recibir respuesta desde afuera es especificando mi ip de la oficina a mi linux ej

seria asi la regla completa
200.200.200.0 es un ejemplo de mi ip de mi casa no es real :) en el ejemplo solo una idea.

iptables -A INPUT -i eth0 -s 200.200.200.0 -p icmp -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -j DROP

ahora nadie puede darle ping al linux solo la ip 200.200.200.0 pero no puedo dar ping desde mi linux a ej:
ping www.yahoo.com
no recibo respuesta porque estoy denegando cualquier entrada icmp al linux. eso lo entiendo
ahora bien si doy ping a mi casa desde mi linux:
ping 200.200.200.0

si recibo respuesta pero como puedo hacer para que solo sea externo y no me afecte el ping de forma que mi linux si pueda dar ping a cualquier lado.
yo he visto los linksys router nat que uno puede darle block icmp y no pueden darle ping al linksys pero si puedo hacer ping a cualquier lado.
gracias espero haber sido claro con la pregunta :)

gracias mis amigos ya encontre solucion

Imagen de juandarcy2000

leyendo y leyendo encontre que es parte del kernel de linux la negacion de echo entrante. con esto resolvi el problema.

Bueno aqui explican todo esto y la forma en que elimine el echo entrante fue escribiendo esta linea.

/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

=====================================================
Como asegurar su PC de ataques externos con iptables
Autor: Andres Roldan
======================================================

*** Que es IPTables?

Iptables es la herramienta utilizada para manipular las "filter tables" incorporadas en los
kernel 2.4.x y primeras versiones de 2.5.x que controlan el flujo de paquetes de internet
tanto de entrada y de salida con una gran felxibilidad, como filtrar paquetes por UID, estado
(NEW, ESTABLISHED, INVALID), destino, origen, tamano; y en otros aspectos avanzados como NAT.

*** Establecer que se necesita proteger.

Lo primero que se tiene que tener en cuenta es saber que se necesita proteger, contra que y
para que.

Si usted es un usuario simple de internet, sus necesidades de proteccion son
basicamente contra ataques DoS (Denial of Service).

Si usted es una persona a cargo de un servidor, necesita otro tipo de proteccion.

Nota: La seguridad de un sistema depende de una buena administracion :)

*** Ahora la mejor parte, la practica :)

Para testiar un simple uso de iptables y de las tables de filtro hagamos esto:

$ ping -c 1 localhost
PING localhost (127.0.0.1): 56 octets data
64 octets from 127.0.0.1: icmp_seq=0 ttl=255 time=0.7 ms

--- localhost ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.7/0.7/0.7 ms

--- Salida en Snort ----

05/22-12:25:52.529318 127.0.0.1 -> 127.0.0.1
ICMP TTL:64 TOS:0x0 ID:0 IpLen:20 DgmLen:84 DF
Type:8 Code:0 ID:27169 Seq:0 ECHO

05/22-12:25:52.529439 127.0.0.1 -> 127.0.0.1
ICMP TTL:255 TOS:0x0 ID:54909 IpLen:20 DgmLen:84
Type:0 Code:0 ID:27169 Seq:0 ECHO REPLY

-----------------------

Aca se puede ver que el paquete se mando sin problemas y el host destino lo recibio y
respondio, en este caso un echo reply dado el paquete enviado.

Ahora insertemos nuestra regla de ensayo:

# iptables -A INPUT -p icmp -j DROP

Esto le dice a nuestra tabla de filtrado que deniegue todos los paquetes ICMP que entren al
sistema. Ensayemos nuestro filtro :)

$ ping -c 1 localhost
PING localhost (127.0.0.1): 56 octets data

--- localhost ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss

--- Salida de Snort ---
05/22-12:28:53.203651 127.0.0.1 -> 127.0.0.1
ICMP TTL:64 TOS:0x0 ID:0 IpLen:20 DgmLen:84 DF
Type:8 Code:0 ID:27681 Seq:0 ECHO

-----------------------

Voila!
Se puede ver claramente que el paquete fue rechazado por el host destino.

Esta regla sirve para prevenir ataques de DoS que utilizan el protocolo ICMP, asi que si esta
es solo su necesidad de proteccion, esto es todo por ahora, si no, sigamos leyendo :).

Si las necesidades de proteccion no son tan basicas, iptables tiene muchas opciones para
filtrar paquetes, las cuales no voy a listar porque seria poco eficiente .

Por ejemplo si necesito evitar que cierto host se conecte a mi servidor al puerto 23,
simplemente hago:

# iptables -A INPUT -p tcp -s pc1.hax0r.com --dport 23 -j DROP

Asi, todas las conecciones desde el host pc1.hax0r.com al puerto 23 seran rechazadas por el
kernel.
m
Si simplemente quiero que solo la red local tenga acceso a mi puerto 23 (telnet), ejecuto algo
como esto:

# iptables -A INPUT -p tcp -i ! eth0 --dport 23 -j DROP

esto seria lo que, en palabras humanas, le diria iptables al kernel: "denegar (-j DROP) las
conecciones tcp (-p tcp) al puerto 23 (--dport 23) que entren por todas las interfaces, menos
la interface de la LAN (-i ! eth0)".

Se pueden anadir muchos tipos de filtros, por ejemplo:

- Para negar entradas de conecciones nuevas al puerto 23

# iptables -A INPUT -p tcp -m -state SYN --dport 23 -j DROP

- Para negar varios puertos a la vez

# iptables -A INPUT -p tcp -m multiport --dport 21,22,23,25,79,110,12345,31337 -j DROP

- Para prevenir ataques de spoof

# iptables -A INPUT -i ppp0 -p all -s 192.168.1.0/24 -j DROP
# iptables -A INPUT -i ppp0 -p all -s 127.0.0.0/8 -j DROP

*** Utilizar el kernel para ayudar a la seguridad del sistema :)

Hay una forma de poder cambiar varias opciones de la configuracion del kernel que nos pueden
ayudar a hacer nuestro sistema mas seguro y mas "leet" :).

El kernel linux utiliza el directorio /proc para llevar control sobre los procesos, ademas de
mostrarnos informacion de nuestro equipo, configuracion, etc y varias opciones que podemos
cambiar para nuestro beneficio.

Para hacer esto, hay que habilitar en el kernel la opcion CONFIG_PROC_FS. Si ud tiene
instalado el kernel por defecto de alguna distribucion, esta opcion ya debe estar activada y
no necesita recompilar kernel.

Si ya todo esta listo, empecemos.

Podemos mirar que en el directorio /proc/sys/net/ipv4 hay varios "archivos" que en realidad
son variables del kernel que podemos manipular.

Entre estas variables hay varias que podemos cambiar para mejorar la seguridad. Estas son,
entre otras:

tcp_syncookies -> Habilita SYN Cookies que es una forma de proteccion contra el ataque SYN flood
icmp_echo_ignore_all -> Deniega por defecto todos los ICMP Echo (Pings)
icmp_echo_ignore_broadcasts -> Igual que la anterior para broadcast
conf/all/accept_source_route -> Si usamos nuestro pc como enrutador o gateway, habilitamos esto
conf/all/accept_redirects -> Habilita redirecciones de interfaces
icmp_ignore_bogus_error_responses -> Deniega respuestas extranas de ICMP
conf/*/rp_filter -> Proteccion anti spoof (Chequea que la direccion de origen si exista)
conf/all/log_martians ->
ip_forward -> Habilita forward entre interfaces (Routing)

*** Ejemplos practicos

Aqui pongo el firewall que yo uso. Obviamente se puede modificar de acuerdo a las necesidades
de cada uno :P

---- cut here ----

#!/bin/bash
#
# Firewall by violat0r
#

# Politicas por defecto

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Reglas de INPUT o de entrada

# Aceptar todo el trafico por la interface local
iptables -A INPUT -i lo -p all -j ACCEPT

# Rechazar paquetes fragmentados
iptables -A INPUT -p udp -f -j DROP
iptables -A INPUT -p tcp -f -j DROP

# Prevencion de ataques DoS
iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -p igmp -j DROP
iptables -A INPUT -m state --state INVALID -p tcp -j DROP

# Aceptar DNS, TALK y NTALK
iptables -A INPUT -i ppp0 -m multiport -p udp --sport 53,517,518 -j ACCEPT
iptables -A INPUT -i ppp0 -m multiport -p udp --dport 53,517,518 -j ACCEPT

# Evitar spoofing
iptables -A INPUT -i ppp0 -p all -s 192.168.1.0/24 -j REJECT --reject-with icmp-host-prohibited
iptables -A INPUT -i ppp0 -p all -s 127.0.0.0/8 -j REJECT --reject-with icmp-host-prohibited

# Con esta regla pongo a volar a los "nmap lovers" :)
iptables -A INPUT -m multiport -p tcp -m state --state NEW,ESTABLISHED --dport 25,79,110,119,138,139,6670,1243,27374,21554,1080,20034,40421,31338,31785 -j DROP

# Denegar acceso a X11 y IRC
iptables -A INPUT -m multiport -p tcp --dport 6000,6666,6667 --syn -j DROP

# Si el paquete supero las pruebas, pues aceptemoslo :)
iptables -A INPUT -i ppp0 -p tcp -j ACCEPT

# Reglas de OUTPUT o de salida

# Evitemos que nos hagan tecnicas de tipo "OS fingerprint guessing"
iptables -A OUTPUT -p icmp -o ppp0 --icmp-type 3/4 -j DROP
iptables -A OUTPUT -p icmp -o ppp0 --icmp-type 5 -j DROP
iptables -A OUTPUT -p icmp -o ppp0 --icmp-type 13 -j DROP
iptables -A OUTPUT -p icmp -o ppp0 --icmp-type 14 -j DROP
iptables -A OUTPUT -p icmp -o ppp0 --icmp-type 15 -j DROP
iptables -A OUTPUT -p icmp -o ppp0 --icmp-type 16 -j DROP
iptables -A OUTPUT -p icmp -o ppp0 --icmp-type 17 -j DROP
iptables -A OUTPUT -p icmp -o ppp0 --icmp-type 18 -j DROP

---- cut here ----

---- cut here ----

#!/bin/bash
#
# Configuracion de opciones del kernel
#

/bin/echo "1" > /proc/sys/net/ipv4/tcp_syncookies
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
for i in /proc/sys/net/ipv4/conf/*; do
/bin/echo "1" > $i/rp_filter
done
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
/bin/echo "0" > /proc/sys/net/ipv4/ip_forward

---- cut here ----

Lecturas Sugeridas:

1. Packet Filtering HOWTO -> http://www.netfilter.org
2. Netfilter hacking HOWTO -> http://www.netfilter.org
2. NAT HOWTO -> http://www.netfilter.org
3. Firewall HOWTO -> http://www.linuxdoc.org

=====================================================
Como asegurar su PC de ataques externos con iptables

Muy buena informacion,

Imagen de RazaMetaL

Muy buena informacion, gracias por compartirla.

-------------------------

Antes de preguntar visita esta dirección :evil:

 

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

pero que hace tu servidor

Imagen de juandarcy2000

hace nat, configurastes postrouting o solo haces proxy. explicate bien lo que pones en tu pregunta es muy general no la entiendo. detalla como tienes configurado tu servidor se bien especifico.

Eso me suena a que debe

Imagen de damage

Eso me suena a que debe estar detras de un proxy "no trasnparente", y de ley todo petición pasa por el proxy y por eso no puede hacer ping hacia fuera.
Si no es eso mira que estes haciendo FORWARD para el puerto 53.

Keep The Fire Burning.....
Stryper 1988