Centos
如何更新而不是刷新和重寫 iptables 規則
目前我正在
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 集。