微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iptables -mac 地址接受循环

如何解决iptables -mac 地址接受循环

我正在尝试制定一个 iptables 规则,以便只接受一些 mac 地址。为此,首先,我向端点 api 发出 get 请求以获取 mac 地址,并将 mac 地址存储在数组中。

示例:

declare -a MAC_ADDRESS=()

MAC_ADDRESS+=($(curl -sb "Application: accept/json" "https://myurl/endpoint_api"))

#(这不是真的正确,但我的 get 请求确实有效)。

然后我创建一个循环来为存储在我的数组中的所有项目应用一个 iptable 规则,就像这样:

for element in $MAC_ADDRESS
do
iptables -A INPUT -i enp0s7 -p tcp --dport 8080 -m --mac-source ${element} -j ACCEPT

done

这不起作用..我不知道为什么。

我只想将此规则(以及许多其他规则)应用于我数组中的所有项目,但这样就行不通了,您知道它是否可行以及如何实现吗?

非常感谢 莫

解决方法

TIL bash 做数组!这很有帮助。

https://opensource.com/article/18/5/you-dont-know-bash-intro-bash-arrays

您用来调用数组项的语法似乎不正确。要调用数组元素,您需要使用 ${ARRAY_NAME[@]}。

for element in ${MAC_ADDRESS[@]}; do 
    iptables -A INPUT -i enp0s7 -p tcp --dport 8080 -m --mac-source ${element} -j ACCEPT
done

我没有方便的 JSON 来测试,所以我只是在我自己的 HTP 主机上使用了一个带有平面文件的模拟。

$ cat test1.sh
#!/bin/bash
unset LIST
declare -a LIST=( $( curl -s http://www.someurl.tld/z0th/file ) )
for item in ${LIST[@]} ; do
        echo "some text" ${item} "more text"
done

当你运行它时;

$ sh test1.sh
some text one more text
some text two more text
some text three more text
some text four more text
some text five more text

我测试了数组;

$ echo $LIST
$ echo -e "${LIST[@]} \n"

第一个 echo 命令,如果是数组,将只输出第一个元素。第二个将交还整个阵列。将@ 替换为元素编号以专门调用它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。