2014-06-17 09:06:40 +0000 2014-06-17 09:06:40 +0000
15
15

¿Cómo bloquear todos los puertos excepto 80,443 con iptables?

Bloquear todos los puertos (de entrada y salida) es fácil, pero es difícil con la palabra “excepto”. No conozco ninguna regla que satisfaga la condición.

PS: Sé que esta pregunta no es nada nuevo. Pero de hecho, no he encontrado nada que me ayude. Así que, ¡ayúdenme, por favor!

Respuestas (3)

25
25
25
2014-06-18 01:46:30 +0000

En primer lugar, el símbolo ! es el símbolo NOT.

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

Segundo, las reglas que escribiste pueden no tener los resultados esperados. Se te cae todo, incluyendo la respuesta a la conexión en el puerto 80. Por lo tanto, usted no será capaz de conectarse a ella dice a los efectos de un servidor web.

Estas reglas permiten conexiones RELACIONADAS y ESTABLECIDAS, por lo que un servidor web debería funcionar, si es que eso es lo que se intenta hacer.

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP
5
5
5
2014-06-17 09:12:54 +0000
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

Esto debería darte lo que necesitas

3
3
3
2014-06-17 09:11:51 +0000

Puede establecer su acción por defecto en DROP, y luego crear reglas de excepción para permitir 80 y 443, así

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS

iptables recorrerá la lista de ‘excepciones’ hasta encontrar una coincidencia. Entonces realizará la acción especificada por el parámetro -j (ACCEPT en este caso). Si no encuentra una coincidencia, volverá a la política por defecto y descartará el paquete.

Nota que con esta solución cualquier subdominio será bloqueado. Por ejemplo, con este método usted tendrá que trabajar en www.mydomain.com, pero su subdominio, digamos www.sub.mydomain.com, no se abrirá por errores de DNS.