Comment configurer un pare-feu simple sur Ubuntu?

18

Quelqu'un pourrait-il donner quelques étapes simples avec un exemple de configuration pour configurer un pare-feu simple sur Ubuntu (en utilisant la console uniquement)? Seuls les accès ssh, http et https doivent être autorisés.

klew
la source
Parlez-vous d'un pare-feu réseau ou simplement d'un pare-feu système?
Brad Gilbert
Qu'entendez-vous par pare-feu réseau? Est-ce un pare-feu sur un routeur? Si oui, alors je parlais du pare-feu système.
klew

Réponses:

20

sudo ufw par défaut deny

sudo ufw autorise http

sudo ufw autorise https

sudo ufw autorise ssh

sudo ufw enable

Nerdfest
la source
Si j'appelais ces commandes en séquence via ssh, cela rompra-t-il ma connexion?
klew
Je ne le crois pas, mais vous devriez vous en assurer. Cela conserve également son statut entre les redémarrages, vous ne devez donc le faire qu'une seule fois.
Nerdfest
Je le vérifierai quand je serai près de cet ordinateur ...
klew
Vous pouvez le mettre dans un script et l'exécuter, puis même si vous êtes déconnecté, vous pourrez vous reconnecter par la suite. Voir ma réponse ci-dessous pour le script.
Hamish Downer le
2
Le commentaire précédent est correct. Fondamentalement, exécutez la première commande dans le script ci-dessus en dernier.
Nerdfest
14

Utilisez ce script.

Décidez simplement si vous souhaitez autoriser ICMP entrant (ping) ou non.

# 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
la source
8

Comme indiqué dans les commentaires d'une autre réponse, vous ne voulez pas perdre votre connexion avant d'autoriser le port ssh. Depuis la page de manuel:

"GESTION À DISTANCE

Lorsque vous exécutez ufw enable ou démarrez ufw via son script, ufw videra ses chaînes. Ceci est nécessaire pour que ufw puisse maintenir un état cohérent, mais il peut supprimer les connexions existantes (par exemple ssh). ufw prend en charge l'ajout de règles avant d'activer le pare-feu, les administrateurs peuvent donc:

ufw allow proto tcp from any to any port 22

avant d'exécuter «ufw enable». Les règles seront toujours vidées, mais le port ssh sera ouvert après l'activation du pare-feu. Veuillez noter qu'une fois que ufw est "activé", ufw ne videra pas les chaînes lors de l'ajout ou de la suppression de règles (mais le sera lors de la modification d'une règle ou de la modification de la stratégie par défaut). "

Voici donc une approche qui utilise un script pour le définir. Vous serez déconnecté lorsque vous exécuterez ce script, mais après l'avoir exécuté, vous pourrez vous reconnecter via ssh.

Mettez ce qui suit dans un script et appelez-le start-firewall.sh

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

Et puis le rendre exécutable et l'exécuter en faisant

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

Pour en savoir plus, lisez la page de manuel .

Hamish Downer
la source
2

Si vous vous familiarisez avec les scripts iptables, vous aurez un contrôle total sur toutes les capacités du pare-feu. Il est loin d'être aussi convivial que Firestarter, mais cela peut être fait sur la console avec nano/ vieditors. Découvrez ce tutoriel destiné à Ubuntu.

spoulson
la source
1

Quicktables m'a aidé à apprendre les règles iptables. Exécutez simplement le script et il générera un script iptables pour vous ... puis vous pourrez l'ouvrir et afficher les commandes associées générées par les questions qu'il vous a posées. C'est une excellente ressource d'apprentissage.

Malheureusement, il n'est plus maintenu.

http://qtables.radom.org/

JP Richardson
la source
1

J'aime vraiment utiliser firehol ( package ).

Pour créer des règles de configuration que vous aimez, vous devez modifier le fichier / etc / default / firehol et changer START_FIREHOL = YES

Et vous voudriez que votre /etc/firehol/firehol.conf ressemble à ceci.

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"

L'une des grandes choses à propos de firehol est la commande «try». Vous pouvez ajuster votre fichier de configuration et faire un «essai de firehol», si vous étiez connecté via ssh, et quelque chose sur ce que vous avez changé a tué votre accès réseau, alors firehol annulera les changements. Pour que les modifications entrent en vigueur, vous devez dire commit.

Zoredache
la source
1
Firehol est génial pour manipuler les règles iptables. '$ firehol try' "Active le pare-feu, mais attend que l'utilisateur tape le mot commit. Si ce mot n'est pas saisi dans les 30 secondes, le pare-feu précédent est restauré."
Gareth
Sooo vous pouvez ajouter / modifier / supprimer des règles, puis les tester. Si vous le faites à distance via SSH, cela ne vous bloquera pas sur votre propre serveur!
Gareth
1

Je préférerais Shorewall . Il est facile à configurer mais flexible en même temps.

Artyom Sokolov
la source
-1

sudo apt-get install firestarter

Ensuite, regardez dans le menu Système-> Administration.

spoulson
la source
questionneur veut utiliser la console uniquement
Mikeage
Ahh, mon erreur. Alternativement. l'administrateur peut toujours ssh -X sur le serveur et exécuter le démarreur à distance.
spoulson le
1
J'aurais également besoin d'installer un serveur X pour démarrer ssh -X :).
klew
@klew, vous n'avez pas besoin d'installer un serveur X complet pour exécuter des applications X sur ssh. Vous avez besoin de plusieurs bibliothèques, mais vous n'avez pas besoin de tout. Pour le strict minimum, vous n'avez besoin que des packages xauth et xbase-clients.
Zoredache