フォローするこれUbuntu 12.04でIPルール設定のチュートリアル。設定時にはすべてうまくいきましたが、ファイアウォールを変更したので、その変更は再起動後も保持されません。なぜこれが起こるのか理解できません。以下は、iptables-persistの使い方のデモです。私は何が間違っていましたか?
$ sudo service iptables-persistent start
* Loading iptables rules... * IPv4... * IPv6...
$ sudo iptables -L //shows a certain rule
$ iptables -D INPUT ... //command successfully drops the rule
$ sudo iptables -L //shows rule has been deleted
$ sudo service iptables-persistent restart
* Loading iptables rules... * IPv4... * IPv6... [ OK ]
$ sudo iptables -L //rule is back
答え1
iptables-persistent
これではありません。 「サービス」を再起動しても、iptables-persistent
iptablesの現在の状態はキャプチャされ保存されません。パッケージが最後に設定されたときに保存されたiptablesルールのみが復元されます。
を設定するには、iptables-persistent
現在のiptablesルールセットを教えてください。
これを達成する1つの方法は次のとおりです。
iptables-save >/etc/iptables/rules.v4
ip6tables-save >/etc/iptables/rules.v6
または、同等にiptables-persistent
パッケージは、以下も提供します。
dpkg-reconfigure iptables-persistent
(ルールを保存するかどうかを尋ねる質問に「はい」と答える必要があります。)
その後、iptables-persistent
次のブート/再起動時に予想されるiptablesルールセットがロードされます。
答え2
現在のiptablesルールを保存する非常に簡単な方法は、次のコマンドを使用することです。
sudo service netfilter-persistent save
上記の方法(少なくともUbuntuにパッケージをインストールしnetfilter-persistent
た後に動作iptables-persistent
)を使用すると、iptablesコマンドを手動で実行したりパッケージを再構成したりする必要はありません(上記の回答で提案されているように)。
答え3
$ iptables ... DROP //command successfully drops the rule
$ sudo iptables -L //shows rule has been deleted
それはそれがDROP
意味したりすることではありません。からman iptables
:
...特別な値が許可されます。減らす、キューまたは戻り。 ACCEPT は、パケットが通過できるようにすることを意味します。拒絶とは次のことを意味します。パケットを床に投げます。 キューの意味は...
したがって、あなたがすべきことは新しいルールを追加することだけです。これは他の多くのルールを効果的に置き換えますが、まだそのまま残ります。
このようなもの(あなたのiptables -L
出力)を調べるとき、私はあなたの目を使うのではなく供給しますgrep "string unique to this rule"
。より簡単で高速で、エラーが発生する可能性も少なくなります。
iptables -L | grep "some unique string"
ルールを削除するには、スイッチを使用してください-D
。マニュアルページには2つの形式が記載されています。
-D, --delete チェーンルール仕様
-D, --チェーンルール番号の削除
選択したチェーンから1つ以上のルールを削除します。このコマンドには2つのバージョンがあります。ルールはチェーンの数(最初のルールは1から始まる)として指定することも、一致するルールとして指定することもできます。
答え4
説明どおり@スティーブンマンデー、適切なディレクトリ(たとえば/etc/iptables/rules.v{4,6}
)にルールセットを直接保存できます。
しかし、@OpenITeXそうです:呼び出されたsave
操作がservice netfilter-persistent
良いです。
今日(18.10)現在、iptables-saveが組み込まれていiptables-persistent
ますが、いいえインストールする。したがって、呼び出されるプラグインディレクトリservice netfilter-persistent
は空であり、サービスはルールセットが保存されたことを印刷しますが、これは真ではありません。
TLDR:iptables-persistent
プラグインディレクトリに/usr/share/netfilter-persistent/plugins.d
プラグインが含まれていることをインストールして確認してください。
これが私が思いついた方法です。
$ cat /etc/init.d/netfilter-persistent
...
case "$1" in
...
save)
log_action_begin_msg "Saving netfilter rules"
/usr/sbin/netfilter-persistent save
log_action_end_msg $?
;;
次にスクリプトを確認し、/usr/sbin/netfilter-persistent
外部スクリプトを呼び出すことを確認します。
$ cat /usr/sbin/netfilter-persistent
...
PLUGINS=/usr/share/netfilter-persistent/plugins.d
...
run_plugins () {
if [ -d ${PLUGINS} ]; then
run-parts -v -a ${1} ${PLUGINS}
fi
}
case $1 in
start|save|flush)
run_plugins ${1}
;;
/usr/share/netfilter-persistent/plugins.d
それからそれが空であることがわかりました。