如何解决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 举报,一经查实,本站将立刻删除。