По сетям мы немного прошлись, давай побашим. Накидаем скрипт автоматизации к предыдущему посту. Чтобы проверялись iptables правила и если их перетер docker, то они бы восстанавливались.



Назовем скрипт check_iptables.sh и закинем его в /usr/local/sbin. Башник максимально упрощаю, оставляю лишь суть. Поняв суть, ты сможешь самостоятельно сообразить нужную тебе логику.



#!/usr/bin/bash



ips=("1.1.1.1" "2.2.2.2" "3.3.3.3")

IT=`which iptables`



$IT -C DOCKER-USER -j RETURN 2>> /dev/null

if [[ $? -eq 0 ]]

then $IT -D DOCKER-USER -j RETURN

fi



$IT -C DOCKER-USER -i eth0 -j DROP 2>> /dev/null

if [[ $? -eq 1 ]]

then $IT -A DOCKER-USER -i eth0 -j DROP

fi



for ip in ${ips[@]}; do

$IT -C DOCKER-USER -s $ip/32 -i eth0 -j RETURN 2>> /dev/null

if [[ $? -eq 1 ]]

then $IT -I DOCKER-USER 1 -s $ip -i eth0 -j RETURN

fi

done

exit 0



Тут всё максимально просто. Есть массив айпишников в переменной ips. А далее просто проверяются iptables правила на их наличие. Ключ -C как раз то самое, необходимое чтобы определить не перетерлось ли что-то. Ну а если перетерлось, то оно само восстановится.



--check -C chain = Check for the existence of a rule



Последний блок прокручивает массив айпишников в цикле. Это весьма гибко, если тебе захочется добавить новых allow ip в свой массив. Ну а дальше кидаешь на всё это дело болт крон и радуешься 😮‍💨 Славьте меня! Я великий!



Еще если не знаешь полный путь до какой либо утилиты. Можешь применить конструкцию IT=`which iptables`. Нужный путь к утилите подставится автоматически. Указывать полный путь до утилиты очень важно если вешаешь скрипт на cron.



Потому что, cron может и не понять что ты от него хочешь. И просто сказать — у меня все ок! Но на неделе ничего не отработает как нужно. Про логирование крона я писал
в этом посте, можешь там поглядеть как дебажить эту штуку.



Для неопытных: чтобы повесить скрипт на cron, нужно выполнить команду crontab -e и вставить туда нужное. В моем случае получилось такое:



*/1 * * * * /usr/local/sbin/check_iptables.sh



Когда ты запускаешь команду crontab -e, открывается файл /var/spool/cron/crontabs/root. Все таски хранятся в нем. Естественно если у тебя другой пользователь, то замени root на него.



Можно и руками отредактировать типа: vim /var/spool/cron/crontabs/root но тогда если ты допустишь ошибку в синтаксисе cron, то оно тебе про это не сообщит. А вот если через crontab -e накосячишь, то сообщит мол — ты чо ваще? дурной? Ну это так математика, чтобы ты понимал откуда что берется и почему.



Ну а если у тебя сложности с пониманием cron синтаксиса, есть прекрасный сервис, там всё наглядно и для человеков, отвечаю! 😮‍💨



Полезного много я сегодня тебе принес. Переваривай потихоньку и забирай себе в копилочку. А я пойду дальше думать, чем же тебя еще удивить. Завтра кстати снова пятница, пора готовиться к выходным. Давай, увидимся!



tags: #bash #linux #networks



🟢 Подпишись: @bashdays