2011年12月6日火曜日

さくらVPSでOpenBSD (pfの設定)

さくらVPSにOpenBSDをインストールした訳だが、最初にフィルターリングの設定を行います。/etc/pf.confを下記のように設定しました。

########## Macro define
#ネットワークインターフェースの定義
ext_if="em0"

# 中継しないIPのテーブル
table <unroutable> const {127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 255.255.255.255/32}
# マルチキャストIPのテーブル
table <multicast>  const {224.0.0.1/32, 224.0.0.2/32}

# 許可するサービスの定義
services_udp="{ domain }"
services_tcp="{ ssh, smtp, domain, www, auth, imap, submission, smtps, imaps }"
icmp_types = "echoreq"

######## option
# ブロック時のポリシーは
# ブロックしたTCP パケットにTCP RST を返す
# ブロックしたUDP パケットに ICMP UNREACHABLEを返す
set block-policy return

########## normalize all packets
# パケットの正規化
match in all scrub (no-df)

########## Filtering rules
# 全てのパケットをブロック
block in log all
block out all 

# ループバックインタフェースはフィルター対象外
set  skip  on lo0

# 詐称されたパケットはブロック
antispoof quick for { lo0, $ext_if }

# URPFチェックに失敗するパケットはブロック
block in quick from urpf-failed

# 中継しないIPはブロック
block drop in  log quick on $ext_if from { <unroutable> <multicast> } to any
block drop out log quick on $ext_if from any to { <unroutable> <multicast> }

# 外向けパケット
pass out on $ext_if inet proto icmp all icmp-type 8 code 0 keep state
pass out on $ext_if proto tcp all modulate state flags S/SA
pass out on $ext_if proto udp all keep state

# 内向きパケット
pass in inet proto icmp all icmp-type $icmp_types keep state
pass in on $ext_if inet proto tcp from any to ($ext_if) port $services_tcp flags S/SA keep state
pass in on $ext_if inet proto udp from any to ($ext_if) port $services_udp keep state

pass in quick on $ext_if inet proto tcp from any to ($ext_if) port ssh flags S/SA synproxy state
pass in quick on $ext_if inet proto tcp from any to ($ext_if) port smtp flags S/SA synproxy state
pass in quick on $ext_if inet proto tcp from any to ($ext_if) port www flags S/SA synproxy state

設定したら、記述が正しいかチェックして、OKならばロードして終わり。

# pfctl -nf /etc/pf.conf   設定チェック
# pfctl -f  /etc/pf.conf   設定をロード

さくらVPSはコンソールからログイン出来るので、フィルタリングの設定に失敗してログイン出来なくなっても、コンソールから修正が出来るので安心ですね。

ついでに、SSHのブルートフォース攻撃が五月蠅いので/etc/hosts.denyと/etc/hosts.allowも設定しておく。

/etc/hosts.deny

sshd: ALL

/etc/hosts.allow

sshd : 127.0.0.1
sshd : .jp

取りあえず、jpドメイン以外からの攻撃は防御出来る。

0 コメント:

コメントを投稿