【问题标题】:BASH script to modify /etc/ufw/before.rules修改 /etc/ufw/before.rules 的 BASH 脚本
【发布时间】:2020-04-07 00:38:47
【问题描述】:

我正在尝试编写一个 Bash 脚本来自动化在 Ubuntu Server 18.04 中修改 /etc/ufw/before.rules 的过程

基本上我想在某些行中将 ACCEPT 替换为 DROP。

我尝试将原始字符串分配给一个变量,然后将其替换为具有所需输出的第二个变量。

我失败得很惨,所以我在这里寻求帮助:)

这是我写的,它完全没有任何作用,但我希望你能明白:

#!/bin/bash

# makes a backup of the original before.rules file
sudo cp /etc/ufw/before.rules /etc/ufw/before.rules.bak

# ok icmp codes for INPUT
# Replaces ACCEPT for DROP

duA1="-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT"
duD1="-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP"

teA1="-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT"
teD1="-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP"

ppA1="-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT"
ppD1="-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP"

erA1="-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT"
erD1="-A ufw-before-input -p icmp --icmp-type echo-request -j DROP"

sudo sed -i -e 's/$duA1/$duD1/g' /etc/ufw/before.rules
sudo sed -i -e 's/$teA1/$teD1/g' /etc/ufw/before.rules
sudo sed -i -e 's/$ppA1/$ppD1/g' /etc/ufw/before.rules
sudo sed -i -e 's/$erA1/$erD1/g' /etc/ufw/before.rules


# ok icmp code for FORWARD
duA2="-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT"
duD2="-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j DROP"

teA2="-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT"
teD2="-A ufw-before-forward -p icmp --icmp-type time-exceeded -j DROP"

ppA2="-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT"
ppD2="-A ufw-before-forward -p icmp --icmp-type parameter-problem -j DROP"

erA2="-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT"
erD2="-A ufw-before-forward -p icmp --icmp-type echo-request -j DROP"

sudo sed -i -e 's/$duA2/$duD2/g' /etc/ufw/before.rules
sudo sed -i -e 's/$teA2/$teD2/g' /etc/ufw/before.rules
sudo sed -i -e 's/$ppA2/$ppD2/g' /etc/ufw/before.rules
sudo sed -i -e 's/$erA2/$erD2/g' /etc/ufw/before.rules

【问题讨论】:

  • Shell 变量不会在初学者的单引号内展开。

标签: bash ubuntu ufw


【解决方案1】:

将最后 4 行中的 ' 替换为 "。在评估之前查看 shell 如何处理命令行。在这种情况下,单引号会阻止 shell 扩展字符串中包含的变量。

【讨论】:

  • 那是错误,谢谢你们。更正版本: sudo sed -i -e "s/$duA2/$duD2/g" /etc/ufw/before.rules sudo sed -i -e "s/$teA2/$teD2/g" /etc/ufw/ before.rules sudo sed -i -e "s/$ppA2/$ppD2/g" /etc/ufw/before.rules sudo sed -i -e "s/$erA2/$erD2/g" /etc/ufw/ before.rules
  • 请考虑将答案标记为有用(向上箭头)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 2012-10-18
  • 1970-01-01
  • 2012-07-16
  • 2018-01-20
  • 2011-09-09
相关资源
最近更新 更多