[JAVA] Spark API

  • Auteur de la discussion Auteur de la discussion Kenda
  • Date de début Date de début
Pour gérer le pare-feu Linux c'est traditionnellement iptables, qui fonctionne par chaînes avec des règles ; une règle est un filtre qui amène à une décision, au choix :
  • ACCEPT pour laisser passer le message ;
  • DROP pour jeter le message aux oubliettes ;
  • REJECT pour jeter le message aux oubliettes, mais en disant à l'émetteur que l'on a jeté le message aux oubliettes.
REJECT est généralement préférable à DROP ; l'utilisateur aura instantanément un message d'erreur « connexion refusée », là où DROP ne répondra pas et il se fera timed out après quelques minutes.

Il y a deux chaînes par défaut, INPUT et OUTPUT pour respectivement les messages entrants et sortants. Les chaînes ont aussi une décision par défaut si aucune règle ne correspond, généralement on ACCEPT pour OUTPUT (e.g. toutes les connexions sortantes sont autorisées), et on DROP pour INPUT (e.g. toutes les connexions entrantes sont refusées).

Il y a aussi une troisième chaîne par défaut FORWARD, mais c'est plus destiné aux routeurs, on la mettra à DROP.

Du coup pour les règles en INPUT, l'on a :
  1. On accepte tous les messages venant de connexions déjà établies ;
  2. On accepte tous les messages venant de localhost ;
  3. On jette tous les messages invalides ;
  4. On accepte les pings ;
  5. On applique la chaîne UDP pour les connexions UDP entrantes ;
  6. On rejette les connexions UDP entrantes qui n'ont pas été acceptées ;
  7. On applique la chaîne TCP pour les connexions TCP entrantes ;
  8. On rejette les connexions TCP entrantes qui n'ont pas été acceptées ;
  9. On rejette les connexions entrantes qui ne sont ni TCP, ni UDP.
L'on ne met rien dans la chaîne UDP ; dans la chaîne TCP, on autorise les connexions sur le port SSH, et les serveurs webs.


Des robots scannent les serveurs accessibles depuis Internet afin de les zombifier, donc il faut :
  • Mettre un mot de passe costaud, ou mieux désactiver la connexion par mot de passe et utiliser un certificat à la place ;
  • Éviter d'utiliser les ports par défaut (e.g. changer le port SSH). Ça permet surtout de réduire le traffic vu que t'auras moins de bots pour bruteforce le mdp.
Une fausse bonne idée est d'autoriser uniquement les connexions venant de ton IP, mais c'est plutôt simple de forger des messages venant de n'importe quelle adresse IP.



Du coup pour mettre en place ça ;
Code:
apt update
apt upgrade
apt install iptables-persistent
systemctl stop netfilter-persistent.service
mv /etc/iptables/rules.v4 ~
mv /etc/iptables/rules.v6 ~
export EDITOR=nano
sudoedit /etc/iptables/rules.v4
Si t'as jamais utilisé Nano les raccourcis clavier sont écrits en bas, ^ correspond à CTRL et M- à la touche méta (Windows, à gauche de la barre espace).
Copie-colle ça dedans (clique droit > Coller, ou CTRL SHIFT V) :
INI:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]

# Les nombres entre crochets sont juste des stats (messages reçus:octets reçus).
# J'ai utilisé les options --longues, sauf pour -m qui est utilisé pour charger des modules
#  afin d'avoir des filtres plus précis ;
#     -m, --match match
#                Specifies a match to use, that is, an extension module that tests for a specific property.
# Vu que `--match` ne matchait pas vraiment, il rajoute juste des options pour matcher.

# Internet a tendance à utiliser les options courtes incompréhensibles, tu peux chercher la description des options
#  en ouvrant le manuel (`man iptables`) et en écrivant `/ -m` pour faire une recherche (`/` = search forward,
#  je rajoute une espace avant l'option pour pas tomber sur des mots composés). Tape `n` pour le résultat suivant (next),
#  ou `p` pour le résultat précédent (previous). Taper `h` affiche l'aide des commandes du `man` / de `less`.

# Accepte les connexions déjà établies.
--append INPUT -m conntrack --ctstate RELATED,ESTABLISHED --jump ACCEPT

# Accepte les connexions venant du loopback (i.e. de soi-même).
--append INPUT --in-interface lo --jump ACCEPT

# Jette les messages erronés.
--append INPUT -m conntrack --ctstate INVALID --jump DROP

# Accepte les pings.
--append INPUT --protocol icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW --jump ACCEPT

# Redirige les nouvelles connexions UDP vers la chaîne UDP.
--append INPUT --protocol udp -m conntrack --ctstate NEW --jump UDP

# ...qui est actuellement vide.

# Sinon, rejette la connexion UDP.
--append INPUT --protocol udp --jump REJECT --reject-with icmp-port-unreachable

# Redrigier les nouvelles connexions TCP vers la chaîne TCP.
--append INPUT --protocol tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW --jump TCP

# Notre chaîne TCP (dport = destination port, i.e. le port de notre machine)
# Ports standardisés: 20 (ftp), 22 (ssh), 80 (http), 443 (https)
--append TCP --protocol tcp -m tcp --dport 22 --jump ACCEPT # ssh
--append TCP --protocol tcp -m tcp --dport 80 --jump ACCEPT # pterodactyl (http)
--append TCP --protocol tcp -m tcp --dport 4574 --jump ACCEPT # spark (http)

# Sinon, rejette la connexion TCP.
--append INPUT --protocol tcp --jump REJECT --reject-with tcp-reset

# Rejette toutes les connexions qui ne sont ni TCP, ni UDP, ni ICMP.
--append INPUT --jump REJECT --reject-with icmp-proto-unreachable

# On a terminé nos chaînes.
COMMIT
Sauvegarde ^O + y, puis ferme ^X.



Pour IPv6 :
Code:
cp /etc/iptables/rules.v4 /etc/iptables/rules.v6
sudoedit /etc/iptables/rules.v6
Et modifie-le comme ceci :
Diff:
  # Accepte les pings.
- --append INPUT --protocol icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW --jump ACCEPT
+ --append INPUT --protocol ipv6-icmp --icmpv6-type 128 -m conntrack --ctstate NEW --jump ACCEPT

  # Redirige les nouvelles connexions UDP vers la chaîne UDP.
  --append INPUT --protocol udp -m conntrack --ctstate NEW --jump UDP

+# Neighbor Discovery Protocol
+ --append INPUT --source fe80::/10 --protocol ipv6-icmp --jump ACCEPT

+# Dynamic Host Configuration Protocol
+ --append INPUT --protocl udp --sport 547 --dport 546 -j ACCEPT

  # Sinon, rejette la connexion UDP.
- --append INPUT --protocol udp --jump REJECT --reject-with icmp-port-unreachable
+ --append INPUT --protocol udp --jump REJECT --reject-with icmp6-adm-prohibited

 [ ... ]

  # Rejette toutes les connexions qui ne sont ni TCP, ni UDP, ni ICMP.
- --append INPUT --jump REJECT --reject-with icmp-proto-unreachable
+ --append INPUT --jump REJECT --reject-with icmp6-adm-prohibited
Ensuite sauvegarde (^O + y, ^X).


Applique les changements :
Code:
systemctl enable netfilter-persistent.service --now
systemctl status netfilter-persistent.service
Ça devrait être vert (“Active: active (exited)”).

Ouvre un autre terminal et vérifie que tu peux toujours te connecter en ssh (lol). Dans tous les cas OVH propose un terminal sur leur site, mais il est pas très pratique.

Tu devrais pouvoir accéder à http://ipv4:4574.
 
Bonjour,

je viens de suivre tes explications, et même après ça, je n'ai toujours rien.

J'ai remarquer que, sans le service web avec pterodactyl, ma requete marche avec apache. Je pense que le problème vient de la
 
Le serveur fonctionne-t-il en localhost ?
Code:
$ telnet --ipv4 localhost 4574
GET / HTTP/1.1
HOST: localhost

HTTP/1.1 200 OK [...]
 
Je viens de trouver le problème en fait sur Pterodactyl il y a une fonction additionnelle port pour autoriser les ports de la connexion du serveur Minecraft.

Merci quand même de la réponse et du temps mais voilà ta solution n'était pas celle que j'attendais mais merci quand même