Ben il suffit de prendre un peu de temps ...
Voila sans sudo :
Ton démon :
cat watch-iptrusted.sh
#!/bin/bash
watchdir=/var/www/monsite/data/
basedir=/var/www/monsite
while : ; do
inotifywait $watchdir|while read path action file; do
if [ ! -z "$file" ]; then
echo "file : "$file
if [ -a $watchdir/addip.txt ]; then
ip="$(cat $watchdir/$file)"
[[ "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] || { rm
$watchdir/$file;break; }
echo "ipset add trusted-ip "$ip >>
/var/www/html/site/vpn/trusted-ip.sh
ipset add trusted-ip $ip 2>&1
elif [ -a $watchdir/removeip.txt ]; then
ip="$(cat $watchdir/$file)"
[[ "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] || { rm
$watchdir/$file;break; }
sed -i "/$ip$/d" /var/www/html/site/vpn/trusted-ip.sh
ipset del trusted-ip $ip 2>&1
elif [ -a $watchdir/cleanip.txt ]; then
echo "file2 : "$file
> /var/www/html/site/vpn/trusted-ip2.sh
ipset flush trusted-ip 2>&1
fi
rm $watchdir/$file
ipset list trusted-ip > $basedir/current_trusted.txt
fi
done
done
exit 0
Ton script php :
cat index.php
<html>
<body>
IP Detection :
<a href="http://checkip.dyndns.org"
target="popup"
onclick="window.open('http://checkip.dyndns.org/','popup','width=400,height=100');
return false;">
Verify on checkip site
</a>
<br>
<?php
$ip = $_SERVER['REMOTE_ADDR'];
echo "<br>";
echo "<form method='post' action='index.php'>";
echo " <label for='fname'>IP address detected : </label>";
echo " <input type='text' id='fname' name='fname' value='$ip'
maxlength='15' size='15'>";
echo " <input type='submit' NAME='validation' value='Trust it !'>";
echo "</form>";
echo "<form method='post' action='index.php'>";
echo " <label for='fname'>IP address to remove : </label>";
echo " <input type='text' id='fname' name='fname' value=''
maxlength='15' size='15'>";
echo " <input type='submit' NAME='removing' value='Remove it !'>";
echo "</form>";
if (isset($_POST['validation'])) {
$ip = $_POST['fname'];
file_put_contents('data/addip.txt', $ip);
echo "$ip is trusted now";
}
if (isset($_POST['removing'])) {
$ip = $_POST['fname'];
file_put_contents('data/removeip.txt', $ip);
echo "$ip is delete now";
}
if (isset($_POST['clean'])) {
file_put_contents('data/cleanip.txt', '');
}
echo "<br><br>";
sleep(1);
echo nl2br(file_get_contents("current_trusted.txt"));
echo "<br>";
echo "<form method='post' action='index.php'>";
echo " <input type='submit' NAME='clean' value='Clear all !'>";
echo "</form><br>";
?>
<BR> <BR>
<CENTER><input type="button" value="Refresh Page"
onClick="location.replace('index.php');"></CENTER>
<BR> <BR>
</body>
</html>
Seul une ip dans le fichier fait réagir le démon puis le fichier est
détruit.
Ludo.
Le 02/05/2024 à 18:30, Vincent Tondellier via FRsAG a écrit :
On jeudi 2 mai 2024 18 h 11 min 34 s CEST, Ludovic Levet via FRsAG wrote:
J'ai jamais dit que cela est parfait, mais je laisse pas un démon dès
plus sensible ouvert à tout-va ...
sudo me semble pire ...
Après t'as plein d'autres solutions , comme passer par un VPN
temporairement pour accéder a ton serveur et mettre ta règle iptable,
ou via un shellinabox, ou un gacamole, ou un wireguard, ou tout
combiner ensemble ou...
Bref plein de choses possibles mais pas de sshd direct sur le net.
La sécurité d'un ensemble n'est pas pas la somme, mais le minimum de
la sécurité de chaque pièce.
C'est certainement possible de faire quelque chose pour ajouter de la
sécurité sans ouvrir de failles béantes, mais ce n'est pas le cas ici
: script php troué, serveur troué ...
Vincent.
Le 02/05/2024 à 17:47, Vincent Tondellier via FRsAG a écrit :
Hello,
mod_security ou pas, il n'empêche que ce bout de code est un bon
exemple de ce qu'il ne faut surtout pas faire.
Aucune validation des entrées, exécution de commandes a travers un
shell et pas de quote des entrées, sudo depuis l'utilisateur
www-data ...
https://xkcd.com/327/ version shell
Et la surface d'exposition devient apache + php + sh + sudo + ipset
+ ssh au lieu d'un ssh bien audité, très peu pour moi. ...
_______________________________________________
Liste de diffusion du %(real_name)s
http://www.frsag.org/
--
-------------------------------------------------------------------------------------------------------------------------
Ce message inclut une signature numérique. Il certifie que l'expéditeur et le
contenue du message sont authentiques.
Si votre logiciel de messagerie est compatible, Il doit garantir que le
document n'a pas été altéré entre l'instant où
l'auteur l'a signé et le moment où le lecteur le consulte.
Loi n°2000-230 du 13 mars 2000 Art. 1316, 1316-1, 1316-2, 1316-3, 1316-4 du
Code civil.
La présence d'un fichier joint 'smime.p7s' (fichier signature) indique que
votre client messagerie n'est pas compatible.
-------------------------------------------------------------------------------------------------------------------------
_______________________________________________
Liste de diffusion du %(real_name)s
http://www.frsag.org/