Centos

如何更新而不是刷新和重寫 iptables 規則

  • May 18, 2022

目前我正在iptables使用 bash 腳本更新我的規則,我在其中呼叫命令:

iptables -F

然後我應用規則。

問題是我需要更新規則以訪問埠 80,然後我每 10 分鐘在一個 cron 作業中刪除所有內容。所以每 10 分鐘我都會打電話iptables -F刪除舊規則並打開所有埠(我不想要的東西)。

我不想每 10 分鐘刷新一次規則,只需編輯或更新現有規則。

如果有需要定期更新的特定規則,我會將它們放在單獨的鏈中,從INPUT適當的插槽中呼叫該鏈

iptables -N mychain                # Create new chain "mychain"
iptables -A INPUT mychain          # Insert it into INPUT
iptables -A INPUT …other rules…    # Append other rules as before

mychain現在您可以在不影響規則的情況下刷新並添加經常更改的規則INPUT

iptables -F mychain
iptables -A mychain …rule…
iptables -A mychain …rule…
…

如果您真的希望將這些添加為單個實體,就好像它在事務中一樣,您可以創建鏈,將規則添加到該鏈,然後將該鏈插入到 中,然後INPUT立即刪除前一個實例。您可能需要動態鏈名稱。例如,

chain="mychain_$(date +%s)"    # One second granularity
iptables -N "$chain"           # Create the chain
iptables -A "$chain" …rule…    # and its rules
iptables -A "$chain" …rule…
iptables -A "$chain" …rule…
…

然後

old=$(iptables -L INPUT | awk '$1 ~ /^mychain_[0-9]+$/ {print $1; exit}')
iptables -I INPUT 1 -j "$chain"    # Add new chain in correct position
if [ -n "$old" ]
then
   iptables -D INPUT -j "$old"    # Remove old chain
   iptables -X "$old"             # Delete it
fi

另一方面,如果您的要求是阻止或允許大量 IP 地址,則最好查看IP 集

引用自:https://unix.stackexchange.com/questions/702891