¿Cómo configurar un firewall simple en Ubuntu?

18

¿Alguien podría dar algunos pasos simples con un ejemplo de configuración de cómo configurar un firewall simple en Ubuntu (usando solo la consola)? Solo se debe permitir el acceso ssh, http y https.

klew
fuente
¿Estás hablando de un firewall de red, o simplemente un firewall del sistema?
Brad Gilbert el
¿Qué quieres decir con firewall de red? ¿Es un firewall en el enrutador? En caso afirmativo, estaba hablando del firewall del sistema.
klew el

Respuestas:

20

sudo ufw predeterminado negar

sudo ufw permitir http

sudo ufw permite https

sudo ufw permitir ssh

sudo ufw enable

Nerdfest
fuente
Si llamaría a estos comandos en secuencia a través de ssh, ¿rompería mi conexión?
klew el
No lo creo, pero debes verificar para asegurarte. Esto también mantiene su estado entre reinicios, por lo que solo debería hacerlo una vez.
Nerdfest el
Lo comprobaré cuando esté cerca de esta computadora ...
klew
Puede ponerlo en un script y ejecutarlo y luego, incluso si se desconecta, podrá volver a conectarse después. Vea mi respuesta a continuación para el guión.
Hamish Downer
2
El comentario anterior es correcto. Básicamente, ejecute el primer comando en el script anterior.
Nerdfest el
14

Usa este script.

Simplemente decida si desea permitir ICMP entrante (ping) o no.

# Clear any existing firewall stuff before we start
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush

# As the default policies, drop all incoming traffic but allow all
# outgoing traffic.  This will allow us to make outgoing connections
# from any port, but will only allow incoming connections on the ports
# specified below.
iptables --policy INPUT DROP
iptables --policy OUTPUT ACCEPT

# Allow all incoming traffic if it is coming from the local loopback device
iptables -A INPUT -i lo -j ACCEPT

# Accept all incoming traffic associated with an established
# connection, or a "related" connection
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow incoming connections
# SSH
iptables -A INPUT -p tcp -i eth0 --dport 22 -m state --state NEW -j ACCEPT
# HTTP
iptables -A INPUT -p tcp -i eth0 --dport 80 -m state --state NEW -j ACCEPT
# HTTPS
iptables -A INPUT -p tcp -i eth0 --dport 443 -m state --state NEW -j ACCEPT

# Allow icmp input so that people can ping us
iptables -A INPUT -p icmp -j ACCEPT

# Reject all other incoming packets
iptables -A INPUT -j REJECT
Mikeage
fuente
8

Como se señaló en los comentarios a otra respuesta, no desea perder su conexión antes de permitir el puerto ssh. Desde la página del manual:

"GESTIÓN REMOTA

Al ejecutar ufw enable o iniciar ufw a través de su initscript, ufw vaciará sus cadenas. Esto es necesario para que ufw pueda mantener un estado consistente, pero puede desconectar las conexiones existentes (por ejemplo, ssh). ufw admite agregar reglas antes de habilitar el firewall, por lo que los administradores pueden hacer:

ufw allow proto tcp from any to any port 22

antes de ejecutar 'ufw enable'. Las reglas aún se eliminarán, pero el puerto ssh se abrirá después de habilitar el firewall. Tenga en cuenta que una vez que ufw esté 'habilitado', ufw no vaciará las cadenas al agregar o quitar reglas (pero lo hará al modificar una regla o cambiar la política predeterminada) ".

Así que aquí hay un enfoque que utiliza un script para configurarlo. Se cerrará la sesión cuando ejecute este script, pero una vez ejecutado, puede iniciar sesión nuevamente a través de ssh.

Ponga lo siguiente en un script y llámelo start-firewall.sh

#!/bin/sh
ufw allow ssh
ufw enable
ufw default deny
ufw allow http
ufw allow https

Y luego hazlo ejecutable y ejecútalo haciendo

$ chmod + x start-firewall.sh
$ sudo ./start-firewall.sh

Para obtener más información, lea la página del manual .

Hamish Downer
fuente
2

Si se familiariza con las secuencias de comandos iptables, tendrá control total sobre todas las capacidades de firewall. No es tan amigable como Firestarter, pero se puede hacer en la consola con nano/ vieditores. Echa un vistazo a este tutorial dirigido a Ubuntu.

Spoulson
fuente
1

Quicktables me ayudó a aprender las reglas de iptables. Simplemente ejecute el script y generará un script de iptables para usted ... luego puede abrirlo y ver los comandos asociados generados por las preguntas que le hizo. Es un gran recurso de aprendizaje.

Lamentablemente, ya no se mantiene.

http://qtables.radom.org/

JP Richardson
fuente
1

Realmente me gusta usar firehol ( paquete ).

Para crear las reglas de configuración que desee, deberá editar el archivo / etc / default / firehol y cambiar START_FIREHOL = YES

Y usted querría hacer que su /etc/firehol/firehol.conf se vea así.

version 5

interface any IfAll
    client any AnyClient accept
    server "ssh http https" accept
    # Accept everything from trusted networks
    server anystateless AllInside accept src "10.3.27.0/24"

Una de las mejores cosas de firehol es el comando 'probar'. Puede ajustar su archivo de configuración y hacer un 'intento de firehol', si se conectó a través de ssh, y algo sobre lo que cambió mató su acceso a la red, entonces firehol revertirá los cambios. Para que los cambios entren en vigencia, debe decir commit.

Zoredache
fuente
1
Firehol es brillante para manipular las reglas de iptables. '$ firehol try' "Activa el firewall, pero espera hasta que el usuario escriba la palabra commit. Si esta palabra no se escribe en 30 segundos, se restaura el firewall anterior".
Gareth
Así que puedes agregar / editar / eliminar reglas y luego probarlas. Si está haciendo esto a través de SSH de forma remota, ¡entonces no lo bloqueará de su propio servidor!
Gareth
1

Preferiría Shorewall . Es fácil de configurar pero flexible al mismo tiempo.

Artyom Sokolov
fuente
-1

sudo apt-get install firestarter

Luego, busque en el menú Sistema-> Administración.

Spoulson
fuente
el interlocutor solo quiere usar la consola
Mikeage
Ahh, mi error. Alternativamente. el administrador aún puede enviar ssh -X al servidor y ejecutar firestarter de forma remota.
spoulson el
1
También necesitaría instalar un servidor X para iniciar ssh -X :).
klew el
@klew, no necesita instalar un servidor X completo para ejecutar aplicaciones X sobre ssh. Necesita varias bibliotecas, pero no necesita todo. Por lo mínimo, solo necesita los paquetes xauth y xbase-clients.
Zoredache