这是我的规则:
iptables -A INPUT -m mac --mac-source 40:e2:30:f4:00:04 -m time --timestart 18:00:00 --timestop 23:59:59 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
iptables -A INPUT -m mac --mac-source 40:e2:30:f4:00:04 -j DROP
它在 20.04 (iptables v1.8.4) 中不起作用。有什么帮助吗?
PD:这里作者说这是因为 iptables 不读取系统时间而是 UTC。我尝试了该规则,但它也不起作用
iptables -A INPUT -m mac --mac-source 40:e2:30:f4:00:04 --match time --weekdays Mon,Tue,Wed,Thu,Fri --timestart $(date -u -d @$(date "+%s" -d "18:00") +%H:%M) --timestop $(date -u -d @$(date "+%s" -d "23:00") +%H:%M) -j ACCEPT
iptables -A INPUT -m mac --mac-source 40:e2:30:f4:00:04 -j DROP
PD:我已经使用了--kerneltz
(这里解释)参数,据说使用内核时区,而不是 UTC,但两者都不是(并且使用--kerneltz 非常气馁)
我的电脑时间:
timedatectl status
Local time: sáb 2021-08-28 12:42:49 -05
Universal time: sáb 2021-08-28 17:42:49 UTC
RTC time: sáb 2021-08-28 17:42:48
Time zone: America/Bogota (-05, -0500)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
date --utc
sáb 28 ago 2021 17:44:23 UTC
如果解决方案不是在我的计算机上设置 UTC 时间,我将不胜感激,因为这可能会影响其他应用程序
另一条规则不起作用(maclist.txt内容40:e2:30:f4:00:04等)
current_time=$(date +%H) # actual 13
allowed_time=08
denied_time=12
maclist=$(awk '{print $1}' maclist.txt)
if [ \( $current_time -ge $allowed_time -a $current_time -lt $denied_time \) ]; then
for mac in $(echo -e "$maclist"); do
iptables -I INPUT -m mac --mac-source $mac -j NFLOG --nflog-prefix 'macblock'
iptables -I INPUT -m mac --mac-source $mac -j ACCEPT
iptables -I FORWARD -m mac --mac-source $mac -j NFLOG --nflog-prefix 'macblock'
iptables -I FORWARD -m mac --mac-source $mac -j ACCEPT
done
fi
出去sudo iptables -nvL
0 0 NFLOG tcp -- eno2 * 0.0.0.0/0 0.0.0.0/0 MAC 40:e2:30:f4:00:04 TIME from 08:00:00 to 17:59:59 UTC nflog-prefix blockports
0 0 DROP tcp -- eno2 * 0.0.0.0/0 0.0.0.0/0 MAC 40:e2:30:f4:00:04 TIME from 08:00:00 to 17:59:59 UTC
0 0 ACCEPT tcp -- eno2 * 0.0.0.0/0 0.0.0.0/0 MAC 40:e2:30:f4:00:04