read -p "Please enter date 'yyyymmdd':" dat
yy=`echo $dat|cut -c 1-4`
mm=`echo $dat|cut -c 5-6`
case $mm in
01|02|03)
mm=12
yy=`expr $yy - 1`
dd=`cal $mm $yy|awk -F " " '{print $6}'|grep -v ^$|tail -1`
echo $yy$mm$dd
;;
04|05|06)
mm=03
dd=`cal $mm $yy|awk -F " " '{print $6}'|grep -v ^$|tail -1`
echo $yy$mm$dd
;;
07|08|09)
mm=06
dd=`cal $mm $yy|awk -F " " '{print $6}'|grep -v ^$|tail -1`
echo $yy$mm$dd
;;
10|11|12)
mm=09
dd=`cal $mm $yy|awk -F " " '{print $6}'|grep -v ^$|tail -1`
echo $yy$mm$dd
;;
*) echo "Invalid month"
exit;;
esac
На случай, если кто-то еще столкнется с той же проблемой, моя основная проблема заключалась в том, что я использовал правила в неправильном порядке.
Я добавлял правило отбрасывания перед правилом принятия, а это, кажется, работает наоборот.
Это пример правила для удаления всех IP-адресов, кроме 2:
ip saddr 1.1.1.1 tcp dport 6379 accept
ip saddr 2.2.2.2 tcp dport 6379 accept
tcp dport 6379 drop
Полный файл правил:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0;
# allow connection to redis from
ip saddr 1.1.1.1 tcp dport 6379 accept
ip saddr 2.2.2.2 tcp dport 6379 accept
tcp dport 6379 drop
}
chain forward {
type filter hook forward priority 0;
}
chain output {
type filter hook output priority 0;
}
}
Настоятельно рекомендуется
chain input {
type filter hook input priority 0;
policy drop;
# required items below
}
Обратите внимание, что все удалено. Это самый безопасный способ управления брандмауэром. Все удалено, если это явно не разрешено.