SSH経由でサーバーにログインしているとします。セッション中にすべてのトラフィックをブロックするようにファイアウォール設定を変更します。
以前FreeBSDとpfでこれを試したとき、現在の接続が失われました。今すぐ試してみると、現在の接続はアクティブのままですが、ping(および新しい接続)は機能しません。また、何か抜けたものがあるかどうかはわかりません。
予想される動作は何ですか?これは現在のセッションを中断しますか?
ベストアンサー1
block all
「進行中のSSHセッションを中断するには、ファイアウォール設定を変更する必要があります。」
答えは「おそらく」です。時によって異なります。正確なルール、表示される内容、および既存のSSH接続が(または)block all
で管理されているかどうか。さらに、積極的なクリーンアップに設定されたファイアウォールは、ファイアウォールルールの変更中にセッションを削除する可能性があります。状態が維持されるかどうかに影響を与える可能性がある他の関連設定があります。たとえば、設定でき、いくつかのルーティングの理由により、SSHパケットが別のインターフェイスに表示され始めます。keep state
modulate state
set optimization
set state-policy
if-bound
pf
内部最後quick
ルールに追加しないと、一致ルールが適用されます。これは他のファイアウォールルールシステム、特にLinuxのiptablesとは対照的です。したがって、ルールの正確な順序は、quick
使用するかどうかのように重要です。
状態が有効になっている場合、既存の接続はルール変更によって保存する必要があります(set optimization
タイムアウトのために終了しない限り)。
例:block all
最後の一致ルールが追加適用されるため、適用されず、既存の SSH 接続状態が維持されます。
block all
pass out on $ext_if proto tcp all modulate state
pass in on $ext_if proto tcp from any to any port ssh modulate state
次のルールセットはセキュリティファイアウォールです。既存のSSH接続はセッションがタイムアウトするまで維持する必要がありますが、すべてがすばやくブロックされます。
block quick all
pass out proto tcp all modulate state
pass in proto tcp from any to any port ssh modulate state
上記を作成するもう1つの方法は、最後の一致規則が基本的に勝つので、これをblock all
最終規則にすることです(他の規則がない限り)。quick
flags any
(新しい状態の一致方法も複雑です。新しい接続のデフォルト値だけでなく、TCP接続のすべての部分に対して状態を生成できるように制限を減らすことができます。flags S/SA
非対称ルーティングなどの他の複雑な問題もあります。)
ファイアウォールルールを変更するときにシステムがロックされないように、ロールバックやリカバリオプションの種類を使用することも一般的に非常に良い考えです。
# pfctl -f pf.conf; sleep 30; cp pf.conf.bak pf.conf; pfctl -f pf.conf
jfkd^C
ルールの変更(設定block return quick
)によって既存のセッションが終了しなかったため、control+c
数回キーを押してクリックして端末がその内容を反映していることを確認しました。