[eside-ghost] IPTables

exar khun exar.khun.daimus en gmail.com
Jue Mayo 24 10:39:05 CEST 2007


Buenas!

estoy pegándome con el IPTables y no consigo que haga del todo lo que yo quiero.

Os cuento, tengo un scriptcillo que es el que lanzo para configurar
iptables. los echo son porque lo mando a un log y si falla algo veo
que líneas faltan.

1.- limpiar toda posible configuración previa que pudiera haber:
iptables -F && echo "Borrando reglas"
iptables -X && echo "Borrando cadenas"

2.- definición de las políticas por defecto para INPUT, FORWARD y OUTPUT.
iptables -P INPUT DROP && echo "Politica INPUT por defecto: DROP"
iptables -P OUTPUT DROP && echo "Politica OUTPUT por defecto: DROP"
iptables -P FORWARD DROP && echo "Politica FORWARD por defecto: DROP"

3.- permitir la entrada de paquetes 'de vuelta'. Vale, es cierto que
podría poner un -p all o incluso sin -p pero me queda más claro.
iptables -A INPUT  -p tcp -m state --state ESTABLISHED,RELATED -j
ACCEPT && echo "Regla Entrada conexiones TCP"
iptables -A INPUT  -p udp -m state --state ESTABLISHED,RELATED -j
ACCEPT && echo "Regla Entrada conexiones UDP"
iptables -A INPUT  -p icmp -m state --state ESTABLISHED,RELATED -j
ACCEPT && echo "Regla Entrada para ICMP"

4.- permitir la salida de paquetes DNS(aunque haya programas como dig
que lo hagan por tcp lo normal es por udp). ¿ El ESTABLISHED tiene
sentido aquí ?
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED
-j ACCEPT && echo "Regla Salida datagramas UDP: DNS (UDP:53)"

5.- permitir la salida de paquetes HTTP o HTTPS
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED
-j ACCEPT && echo "Regla Salida paquetes TCP: Web(HTTP:80)"
iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED
-j ACCEPT && echo "Regla Salida paquetes TCP: Web(HTTPS:443)"

6.- ahora viene cuando la matan, lo de arriba funciona way peeero el
problema son las reglas de la mula.

#Siguiendo http://wiki.amule.org
# What does each port do?
# Well, since most ports can be configured to be set to any other
number, the defaults will be listed.
# The traffic direction is from client perspective (you):<--genial!
menos que pensar.

#     * 4661 TCP (outgoing): Port, on which a server listens for
connection (defined by server). p.e: DonkeyServer No3 usa el 4242.
Esta solo vale para 'logearse' en el servidor.
iptables -A OUTPUT -p tcp --dport 4661 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT && echo "Regla Salida paquetes TCP:
aMule(:4661)"
iptables -A OUTPUT -p tcp --dport 4242 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT && echo "Regla Salida paquetes TCP:
aMule(:4242)"

#     * 4662 TCP (outgoing and incoming): Client to client transfers.
iptables -A INPUT -p tcp --dport 4662 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT && echo "Regla Entrada paquetes TCP:
aMule (:4662)"
iptables -A OUTPUT -p tcp --dport 4662 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT && echo "Regla Salida paquetes TCP:
aMule (:4662)"

#     * 4672 UDP (outgoing and incoming): Extended eMule protocol,
Queue Rating, File Reask Ping, Kad.
#                                         Kad will be 'firewalled' if
NAT (Network Address Translation) remaps this port number.
iptables -A INPUT -p udp --dport 4672 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT && echo "Regla Entrada datagramas
UDP: aMule (:4672)"
iptables -A OUTPUT -p udp --dport 4672 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT && echo "Regla Salida datagramas
UDP: aMule (:4672)"

#     * 4665 UDP (outgoing and incoming): Used for global server
searches and global source queries. (Client TCP port + 3)
iptables -A INPUT -p udp --dport 4665 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT && echo "Regla Entrada datagramas
UDP: aMule (:4665)"
iptables -A OUTPUT -p udp --dport 4665 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT && echo "Regla Salida datagramas
UDP: aMule (:4665)"

Con el 'netstat -anp | grep -i amule' he comprobado que el amule está
escuchando efectivamente en los puertos y por el protocolo que yo creo
que debe escuchar. Con el 'tcpdump -i eth0' (sí, a cañonazos) he
comprobado que efectivamente esos son los puertos por los que hay
tráfico, sin embargo, me da siempre ID baja, que según la página de
donde he sacado esto es porque el firewall está cortando algo. Los
puertos 4662, 4672 y 4665 estan abiertos en el router para entrada a
mi ip. Y si quito el iptables me da id alta. Con lo cual 'hábilmente'
deduzco que el motivo es el iptables, claro que no tengo ni la más
remota idea de que puedo estar dejándome.

Alguna idea?


Más información sobre la lista de distribución eside-ghost