linux - 从 bash 脚本中删除所有 DROP iptables 规则
问题描述
我想从 bash 脚本中删除所有 iptables DROP 规则。这是我的脚本:
#!/bin/bash
# Remove all DROPs.
######################################################################
#_____________________________________________________________________
iptables="/sbin/iptables"
######################################################################
#_____________________________________________________________________
echo "[*] Removing all DROPs ..."
IFS_OLD=$IFS
IFS=$'\n'
rule_list=$(${iptables} -S | grep 'DROP$')
for drop_rule in ${rule_list}; do
undrop_rule=$(printf -- "${drop_rule}\n" | sed 's@^-A@-D@')
printf "[-] ${iptables} ${undrop_rule}\n"
${iptables} -v ${undrop_rule}
[ $? == 1 ] && echo "[E] Unable to delete DROP rule." && exit 1
done
IFS=$IFS_OLD
######################################################################
#_____________________________________________________________________
printf '\n\n'
${iptables} -S
######################################################################
#_____________________________________________________________________
但输出是:
[*] Removing all DROPs ...
[-] /sbin/iptables -D INPUT -s 209.126.1.2/32 -i eth0 -j DROP
all opt -- in * out * 0.0.0.0/0 -> 0.0.0.0/0
iptables: Bad rule (does a matching rule exist in that chain?).
[E] Unable to delete DROP rule.
为什么 ?
如果我手动运行命令:
/sbin/iptables -D INPUT -s 209.126.1.2/32 -i eth0 -j DROP
这行得通。
谢谢,布杜斯。
解决方案
在您的脚本中,您在执行IFS
时仍设置为换行符iptables
。因此 bash 不能对命令参数进行分词。
IFS=$IFS_OLD
一旦不再需要修改后的值,我会立即回退,这可能是在分配给rule_list
.
推荐阅读
- ios - 出现键盘时调整IOS WKWebView的大小
- python - 从字符串中删除 shell 转义字符
- javascript - 知道如何解决这个问题,所以我没有得到 Javascript TypeError:'in' 的右侧应该是一个对象,得到字符串
- bash - Bash Shell计算MAC OS中文件夹内所有视频持续时间的总和
- flutter - 同时调用多个 http 端点,合并结果并返回到 dart 中的单个 futurebuilder
- reactjs - React 组件的类型声明首选项
- c - 表达式必须具有指向结构或联合的指针类型?
- c# - 在按钮单击事件中执行函数/方法
- matplotlib - Matplotlib 中的加色组合:将红色和绿色组合成黄色
- scala - 如何在对象中有一个setter?