bash trap

Itt az ünnepek alatt, iptables állítgatás közben, eszembe jutott, hogy nem lenne jo ha kizárnám magam valami elírás miatt. Akkor leltem rá a bash trap-re. Ez azt eredményezi, hogy a ^C-re nem fogja megszakítani a scriptet, hanem tetszőleges parancsokat tudunk futtatni a hatására.

Lényegében erről van szó:


trap bashtrap INT
bashtrap()
{
echo -n "\n^C Detected! Problem?\n"
}
for a in seq 1 15; do
if [ "$a" -gt "3" ]; then
echo -n "\rProbably you can press ^C ($a/15)"
sleep 1
fi
if [ "$a" -lt "3" ]; then
echo "$a/15"
sleep 1;
fi
done
echo -n "\nThe end of the BASH trap example\n"

Ha lenyomjuk a ^C-t akkor lefut az

echo -n “\n^C Detected! Problem?\n”

15 másodperc múlva pedig az

echo -n “\nThe end of the BASH trap example\n”.

Ezt fölhasználva pedig egyszerűen elkészülhet a script (csak úgy összedobva a teljesség igénye nélkül):

drestart)
echo “Delayed restart…”
iptables -F
do_start

trap bashtrap INT
bashtrap()
{
echo -n “\n^C Detected !…applying new rule\n”
exit
}

for a in seq 1 15; do
if [ “$a” -gt “3” ]; then
echo -n “\rProbably you can press ^C ($a/15)”
sleep 1
fi
if [ “$a” -lt “3” ]; then
echo “$a/15 secs to default rule.”
sleep 1;
fi

done
do_ssh
echo -n “\nAre you still there?\n”
echo “Default rule has been applied.”
;;

A do_start() fv. futtatja az iptables szabályokat a do_ssh() pedig egy biztosan működő minimal konfig (ssh). Ezt sosem változtatjuk.
!!!Fontos!!!
Nézzük meg, hogy a tűzfalon az ESTABLISHED, RELATED kapcsolatok ha ACCEPT-eli azonnal, az INPUT láncon, akkor hiába rontjuk el, mondjuk, az SSH portot a kapcsolat élni fog. Ergo: a drestart kapcsoló olyan eredménnyel fog lefutni, mintha minden rendben lenne, de új kapcsolatot már nem tudunk létrehozni.

This entry was posted in Uncategorized. Bookmark the permalink.