IPTables: autoriser uniquement l'accès SSH, rien d'autre vers l'intérieur ou vers l'extérieur

11

Comment configurer iptables afin qu'il ne permettra SSH et permettre à aucun autre trafic ou à l' extérieur ?

Des précautions de sécurité que n'importe qui peut recommander?

J'ai un serveur qui, je crois, a été migré avec succès de GoDaddy et je crois qu'il n'est plus utilisé.

Mais je veux m'en assurer juste parce que ... on ne sait jamais. :)

Notez qu'il s'agit d'un serveur virtuel dédié de GoDaddy ... Cela signifie aucune sauvegarde et pratiquement aucun support.

Disco
la source

Réponses:

13

Vous devez simplement définir la stratégie par défaut sur DROP sur les chaînes INPUT et OUTPUT.

Pour autoriser SSH, vous avez besoin des commandes suivantes:

$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Les deux dernières commandes autorisent le trafic de bouclage car certaines applications l'exigent pour fonctionner correctement. Vous pouvez restreindre l'accès SSH à partir d'une adresse IP spécifique à l'aide de l' -s source_ipoption.

L'exécution des commandes dans l'ordre indiqué ci-dessus entraînera le blocage de votre session SSH actuelle. En effet, les commandes iptables prennent effet immédiatement. Vous devez les exécuter dans un script shell pour éviter de perdre la possibilité de vous connecter à votre machine lors de leur exécution à distance.

Khaled
la source
4
--state RELATEDsur la dernière règle est inutile; --state ESTABLISHEDest assez. Vous pouvez également souhaiter autoriser le trafic DNS et probablement autoriser tout ce qui se trouve sur l'interface de bouclage, ou toutes sortes de choses peuvent se comporter de manière très étrange.
MadHatter
@MadHatter: Oui, vous avez raison, surtout en ce qui concerne le bouclage :)
Khaled
Merci, serait-il possible de vous obtenir l'intégralité du dossier? c'est-à-dire quelque chose que je peux copier et coller directement dans / etc / sysconfig / iptables? Je n'ai pas assez d'expérience avec cela pour faire confiance à mon intuition pour effectuer les modifications appropriées.
Disco
2
ps. établir la connexion sera forcée après la première commande
user956584
3
Vous devez vraiment changer l'ordre de ces commandes. Les lignes de politique doivent apparaître comme les dernières. N'importe qui copypastant ceci dans une session ssh sera HUPed et exclu immédiatement
AndreasT
4

Quelque chose comme ça:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT  # or iptables -P INPUT DROP

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT # or iptables -P OUTPUT DROP
Mikel
la source
1
Je pense que tu -i lone veux pas dire -s lo; encore une fois, seulement ESTABLISHEDest nécessaire dans les règles de l'État, et il devrait probablement y en avoir un --sport 22aussi. Pourquoi tout le monde est-il si désireux de permettre RELATED?
MadHatter
@MadHatter: À propos RELATED: il est en fait utile pour faire correspondre des éléments non TCP, comme les réponses ping et les réponses DNS. Du moins, c'est ce que j'avais toujours supposé.
Steven lundi
2
Ma conviction est que cela ne correspondra à aucun de ces éléments. Cela correspondrait, par exemple, à une réponse ICMP interdite par l'administrateur, mais c'est à peu près aussi utile que possible; et s'il n'est pas qualifié, il correspondra à tout trafic associé, et pas seulement au trafic lié à la ligne précédente.
MadHatter
@MadHatter: Je suppose que je vais devoir exécuter quelques tests pour voir si vous avez raison. Merci d'avoir contesté mon hypothèse.
Steven lundi
Oui, l'état ESTABLISHED est tout ce qui est nécessaire pour faire correspondre les réponses DNS UDP et les réponses d'écho ICMP.
Steven lundi