ufwでiptablesルールを設定しようとしていますが、どのように機能するか誤解しているようです。説明されている一般的な構文に加えて、信頼できる文書が見つかりません。ここ。これは私の問題の単純化されたバージョンです。
追加後/etc/ufw/after.rules
:
*filter
:ufw-user-input - [0:0]
:FOO-CHAIN - [0:0]
-A FOO-CHAIN -j ufw-user-input
-A FOO-CHAIN -j DROP
COMMIT
アイデアは、FOO-CHAIN
許可されたパケットだけが許可されufw allow
、そうでなければ廃棄されるということです。
問題 -ufw reload
一度ロードするとルールが適用されますが、2番目のリロードでは定数が始まりますERROR: Could not load logging rules
。私が見つけた唯一の解決策は、テーブル全体(iptables -F && iptables -X
)を更新することです。
フォローアップの質問:
- 代わりにそれを使用すると、
ufw-user-forward
再読み込み時にエラーは発生しません。なぜそんなことですか? - なぜ軽油または他の側面を介して
:ufw-user-input - [0:0]
チェーンを定義する必要がありますかERROR: No such file or directory
?after.rules
ファイルなので、次に実行する必要がありますuser.rules
。つまり、ufw-user-input
すでに定義されていなければならないという意味です。ジャンプをに変更すると定義を省略でき、ufw-before-input
エラーは表示されません。
答え1
私は同じ問題があり、UFWがufw-user-input
ufwが有効かどうかを知るためにiptablesにチェーンが存在するかどうかを内部的にチェックすることを発見しました。
ufw-user-input
inを使用すると、orを実行したときにdoが削除されるのを-A FOO-CHAIN -j ufw-user-input
防ぎます。 iptablesは変更を許可しないので、チェーンは存在し続けます。これにより、UFWの状態は混乱するか、さらには崩壊します。ufw-user-input
ufw reload
ufw disable
ufw status
ufw disable
またはそれ以降にルールが正しくクリーンアップされていることを確認する必要がありますufw reload
。
最も簡単な方法は、上記のチェーンのすべての行を追加するか、iptables -F FOO-CHAIN || true
同様に削除することです。ufw-user-input
/etc/ufw/before.init
/etc/ufw/before.init
set -e
case "$1" in
start)
# typically required
;;
stop)
# typically required
iptables -F FOO-CHAIN || true
# You may want to add other lines here to reset your chain in a desirable state if UFW is disabled like
# iptables -A FOO-CHAIN -j RETURN || true
;;
status)
# optional
;;
flush-all)
# optional
;;
*)
echo "'$1' not supported"
echo "Usage: before.init {start|stop|flush-all|status}"
;;
esac
before.init
を使用することを忘れないでくださいchmod +x /etc/ufw/before.init
。
私はそれを必要とすることを確かめます。:ufw-user-input - [0:0]
これはUFWの内部によるものであり、私の考えufw-user-input
ではafter.rules
。