FreeBSD 10.3 p4を実行していますが、奇妙な動作が観察されました。
機械を再起動すると、/etc/rc.conf
入力によってpfが始まります。
# JAILS
cloned_interfaces="${cloned_interfaces} lo1"
gateway_enable="YES"
ipv6_gateway_enable="YES"
# OPENVPN -> jails
cloned_interfaces="${cloned_interfaces} tun0"
# FIREWALL
pf_enable="YES"
pf_rules="/etc/pf.conf"
fail2ban_enable="YES"
# ... other services ...
# load ezjail
ezjail_enable="YES"
しかし、刑務所に関するすべての規則を無視してください。したがって、開始するにはルールを手動で再ロードする必要があります。
sudo pfctl -f /etc/pf.conf
私のpf.confの内容は次のとおりです。
#external interface
ext_if = "bge0"
myserver_v4 = "xxx.xxx.xxx.xxx"
# internal interfaces
set skip on lo0
set skip on lo1
# nat all jails
jails_net = "127.0.1.1/24"
nat on $ext_if inet from $jails_net to any -> $ext_if
# nat and redirect openvpn
vpn_if = "tun0"
vpn_jail = "127.0.1.2"
vpn_ports = "{8080}"
vpn_proto = "{tcp}"
vpn_network = "10.8.0.0/24"
vpn_network_v6 = "fe80:dead:beef::1/64"
nat on $ext_if inet from $vpn_network to any -> $ext_if
rdr pass on $ext_if proto $vpn_proto from any to $myserver_v4 port $vpn_ports -> $vpn_jail
# nsupdate jail
nsupdate_jail="127.0.1.3"
nsupdate_ports="{http, https}"
rdr pass on $ext_if proto {tcp} from any to $myserver_v4 port $nsupdate_ports -> $nsupdate_jail
# ... other yails ...
# block all incoming traffic
#block in
# pass out
pass out
# block fail2ban
table <fail2ban> persist
block quick proto tcp from <fail2ban> to any port ssh
# ssh
pass in on $ext_if proto tcp from any to any port ssh keep state
IPv6を介したSSHが機能しなくなったため、すべての着信トラフィックブロックを無効にする必要がありました。
この問題を解決する方法について提案がありますか?
答え1
ここでの問題は、/etc/rc.d/pf
以前に実行されていて、/usr/local/etc/rc.d/ezjail
ファイアウォールルールをロードしようとしたときにカーネルがまだ刑務所に閉じ込められたネットワークを構成していないことです。pf
スクリプトをafter bootに変更したいかもしれませんが、ezjail
これは良い考えではありません。ファイアウォールは起動プロセスの初期に開始し、刑務所は遅く開始したいと考えています。service -r
rc スクリプトの実行順序を表示します。
どのルールも表示しませんが、pf.conf
静的インターフェイス設定を使用しているようです。通常、ホスト名のルックアップとインターフェイス名 - アドレス変換は、ルールがロードされたときに実行されます。ホスト名またはIPアドレスが変更された場合は、ルールを再ロードしてカーネルを更新する必要があります。ただし、インターフェイス名(およびオプションの修飾子)を括弧で囲むことでこの動作を変更できます。これにより、インターフェイスアドレスが変更されたときにルールが自動的に更新されます。単純だがあまり役に立たない例は次のとおりです。
ext_if="em0"
pass in log on $ext_if to ($ext_if) keep state
マニュアルpf.conf
ページは非常に徹底しています。特に、「パラメータ」セクションはここに関連しています。