¿Cómo puedo bloquear todos menos tres puertos en Ubuntu?

22

¿Cómo puedo bloquear todos los puertos excepto 1962, 999, 12020?

Un puerto para SSH y otros dos para una especie de script. Entonces, es necesario permitir la salida en estos puertos, ¿verdad?

Mis iptables:

# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*mangle
:PREROUTING ACCEPT [643521:136954367]
:INPUT ACCEPT [643521:136954367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
:POSTROUTING ACCEPT [645723:99904505]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*filter
:INPUT ACCEPT [643490:136950781]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
-A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*nat
:PREROUTING ACCEPT [5673:734891]
:POSTROUTING ACCEPT [2816:179474]
:OUTPUT ACCEPT [2816:179474]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012

Lo siento, pero soy un verdadero novato cuando se trata de estas cosas y solo quiero hacer que mi servidor sea más seguro.

okapa
fuente
¿Por qué no usar UFW?
Soviero

Respuestas:

25

Al principio, siempre debe enjuagarse para asegurarse de lo que ya está definido ... nada

iptables -F

Luego, establezca la política predeterminada de la cadena INPUT en DROP si se alcanza el final y no coincide ninguna regla:

iptables -P INPUT DROP

Para asegurarse de que el loopback no se ve afectado, debe agregar

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

para permitir todo el tráfico en lo-if y todo el tráfico entrante para las conexiones que haya establecido. Después de eso, agregue todas las reglas que necesite para sus servicios (¡no olvide abrir ssh si lo necesita! De lo contrario, estará fuera) :

iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 

Un pequeño truco que hago para evitar que yo y otros perforemos agujeros accidentalmente en la seguridad finalmente agrego:

iptables -A INPUT -j DROP

Esta línea coincide con todo para la cadena INPUT y la política no debería obtener nada. La ventaja de esto es que incluso si agrega una regla ACCEPT en algún momento después de inicializar su conjunto de reglas, nunca se comprobará porque todo se descartó antes. por lo tanto, garantiza que tenga que mantener todo en un solo lugar.

Para su pregunta, todo se ve así en resumen:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 
iptables -A INPUT -j DROP
Mose
fuente
1
Solo para aclarar: -Pestablece la política en la cadena. En realidad no está agregando una regla. La política de la cadena indica la acción a realizar en el paquete si se alcanza el final de la cadena. Por eso, es inteligente agregar sus reglas antes de establecer una DROPpolítica.
Belmin Fernández
Si lo recuerdo correctamente, normalmente no importa dónde establecer la política ... tal vez debería darle una pequeña edición a mi respuesta.
Mose
3
una nota: tenga mucho cuidado al configurar la política predeterminada denegar y enjuagar al configurar un firewall a través de ssh. Te encerrarás. Sí, ya hice esto. :-) Ahora normalmente hago la última regla iptables -A INPUT -j DROP, por esa misma razón.
Sirex
Destaqué un poco mi advertencia de ssh ;-)
Mose
@Mose: Corrígelo sin importar en general. Estaba tratando de resaltar eso. Pero podría causar que se bloquee, ya que ya se ha mencionado, je.
Belmin Fernández
20

Una respuesta de un novato como tú :-) También necesitaba proteger mi servidor Ubuntu, aprender iptables fue un dolor que no pude superar. UFW (Uncomplicated Firewall) es un programa para hacer que la configuración del firewall sea lo más fácil posible.

  • instalar ufw:

    sudo apt-get install ufw
    
  • deshabilítelo de inmediato (tuve que rescatar el arranque porque me bloquearon mi propio inicio de sesión SSH):

    sudo ufw disable
    
  • establece "negar" como regla predeterminada (esto bloquea todos los puertos):

    sudo ufw default deny
    
  • permitir puertos que necesita:

    sudo ufw allow to 1962
    sudo ufw allow to 999
    sudo ufw allow to 12020
    
    sudo ufw allow from 1962
    sudo ufw allow from 999
    sudo ufw allow from 12020
    
  • si está seguro de que las reglas anteriores no interrumpen su conexión ssh, habilite ufw:

    sudo ufw enable
    

Los documentos están bien escritos y proporcionan más ejemplos: https://help.ubuntu.com/community/UFW

Vlad Gerasimov
fuente
1
Al trabajar con configuraciones de firewall, puede ser una buena idea crear un trabajo cron que desactive nuevamente el firewall. En caso de que te bloqueen.
pymkin
Tenga en cuenta que esto no funciona con ufw 0.35, arrojando errores como ERROR: Bad destination addressyERROR: Bad source address
Dave
¿Y cómo permitir todos los puertos excepto un puerto para una interfaz específica? Estoy usando la regla de denegación predeterminada y quiero bloquear el puerto DNS 53 en la interfaz de Ethernet para evitar fugas de DNS al usar una VPN. Actualmente tengo que permitir todos los puertos que quiero usar para rangos de IP privados, lo que no es muy conveniente.
baptx