フラッシュや書き換えなしでiptablesルールを更新する方法

フラッシュや書き換えなしでiptablesルールを更新する方法

現在、私はiptablesルールを更新するためにbashスクリプトを使用しています。ここで次のコマンドを呼び出します。

iptables -F

次にルールを適用します。

問題は、ポート80にアクセスするためにルールを更新し、10分ごとにcronジョブのすべてのエントリを削除する必要があることです。そのため、10分ごとにiptables -F電話をかけて前のルールを削除し(不要)、すべてのポートを開きます。

10分ごとにルールを更新したくなく、既存のルールを編集または更新するだけです。

答え1

定期的に更新する必要がある特定の規則がある場合は、それらを別々のチェーンに入れて、適切な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設定

答え2

ルール変更が可能です。

例は次のとおりです。

まず、次を使用して上部(最初の)位置にルールを作成できます。

iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

チェーン内の既存のルールを置き換えるルールを指定できます。

場所1に与えられた最初の規則は、どこからでもhttpポート(ポート80)への接続を許可することです。

次のiptablesコマンドは、ネットワークアドレス範囲192.168.0.0/24でのみ標準httpポート(ポート80)への接続を制限するルールを上書きします。

iptables -R INPUT 1 -p tcp -s 192.168.0.0/24 --dport 80 -j ACCEPT

したがって、すべてのルールを削除する必要はなく、ルールを置き換える場所を知るだけです。

これが完全なコース方法です源泉

関連情報