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 inseq 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_starttrap 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;
fidone
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.