目标是修改iptables文件中的某些连续规则,并在bash数组中收集一些新规则(如有必要,可以将其保存到临时文件中。)
在rules.v4
中修改的规则:
-A ufw-user-input -s <ip_address_1>/<mask_1> -j ufw-logging-input
-A ufw-user-input -s <ip_address_2>/<mask_2> -j ufw-logging-input
-A ufw-user-input -s <ip_address_3>/<mask_3> -j ufw-logging-input
这些行可以与-A ufw-user-input -s [0-9./]+ -j ufw-logging-input
匹配,或者可以在数组iptables_ipv4_user_input_rules[@]
中使用
在iptables文件rules.v4
中,它们必须全部替换为另一个数组的内容,该数组包含一组不同的可变数目的规则:online_ipv4_user_input_rules[@]
,或者从包含相同行的文件中替换:>
-A ufw-user-input -s <ip_address_4>/<mask_4> -j ufw-logging-input
-A ufw-user-input -s <ip_address_5>/<mask_5> -j ufw-logging-input
-A ufw-user-input -s <ip_address_6>/<mask_6> -j ufw-logging-input
-A ufw-user-input -s <ip_address_7>/<mask_7> -j ufw-logging-input
我不知道如何用sed或awk实现它。
要修改的规则具有可变行号和可变行号,因此以下文章不适用于此处:
答案 0 :(得分:0)
不清楚要实现的目标,所以也许您正在查看将数组内容粘贴到文件中。
假设该数组是bash
数组,则可以使用以下方法:
printf "%s\n" "${online_ipv4_user_input_rules[@]}" > rules.v4
这将使用数组的所有元素(每行1个元素)覆盖文件的内容。
答案 1 :(得分:0)
答案很简单:
从rules.v4中删除第一组规则
sed -Ei '/-A ufw-user-input -s [0-9./]+ -j ufw-logging-input/d' rules.v4
在右行之后插入第二组规则(以前保存到rules.tmp中):v4:
sed -i '/-A ufw-skip-to-policy-output -j DROP/r rules.tmp' rules.v4