FreeBSD の ファイヤーウォールを設定する事にします。
ただ、FreeBSD の ファイヤーウォールには、以下の3種類ある事にびっくりしました。

  • ipfw(IP Firewall)
  • pf(Packet Filter)
  • IP Filter

今回は、ipfw を使用して設定した時のメモ書きです。

設定①

①.ファイヤーウォールの設定情報を作成する。

vi /etc/ipfw.rules

②.以下のルールを記入する。

#!/bin/bash
#

fwcmd="/sbin/ipfw -q"

# 全てのルールを破棄
${fwcmd} -f flush

# ループバックへの設定
${fwcmd} add allow all from any to any via lo0
${fwcmd} add deny all from any to 127.0.0.0/8
${fwcmd} add deny all from 127.0.0.0/8 to any

# 断片化されたパケットを許可.→許可しない
${fwcmd} add deny ip from any to any frag

# 動的ルールで許可された同一相手先を許可(ステートフルインスペクション)
${fwcmd} add check-state

# すでに接続が確立済みのパケットは通す
${fwcmd} add allow tcp from any to any established
${fwcmd} add allow all from any to any out keep-state

# SAMBA NETBIOS の接続を拒否
${fwcmd} add deny tcp  from any 135,137-139,445 to any
${fwcmd} add deny tcp  from any to any 135,137-139,445
${fwcmd} add deny udp  from any 135,137-139,445 to any
${fwcmd} add deny udp  from any to any 135,137-139,445

# 外部からのTCP20、21番ポート(FTP)へのアクセスを許可
# ※FTPサーバーを公開する場合のみ
#${fwcmd} add allow tcp from any to any 20 in
#${fwcmd} add allow tcp from any to any 20 out
#${fwcmd} add allow tcp from any to any 21 in
#${fwcmd} add allow tcp from any to any 21 out

# 外部からのTCP22番ポート(SSH)へのアクセスを許可
# ※SSHサーバーを公開する場合のみ
${fwcmd} add allow tcp from any to any 22 in
${fwcmd} add allow tcp from any to any 22 out

# 外部からのTCP/UDP53番ポート(DNS)へのアクセスを許可
# ※外部向けDNSサーバーを運用する場合のみ
${fwcmd} add allow udp from any to any 53 in
${fwcmd} add allow tcp from any to any 53 in
${fwcmd} add allow udp from any to any 53 out
${fwcmd} add allow tcp from any to any 53 out

# 外部からのTCP80番ポート(HTTP)へのアクセスを許可
# ※Webサーバーを公開する場合のみ
${fwcmd} add allow tcp from any to any 80 in
${fwcmd} add allow tcp from any to any 80 out

# 外部からのTCP443番ポート(HTTPS)へのアクセスを許可
# ※Webサーバーを公開する場合のみ
${fwcmd} add allow tcp from any to any 443 in
${fwcmd} add allow tcp from any to any 443 out

# 外部からのTCP587番ポート(SUBMISSION)へのアクセスを許可
# ※SMTPサーバーを公開する場合のみ
# ※SMTPSサーバー(TCP465番ポート)を公開する場合は不要
#${fwcmd} add allow tcp from any to any 587 in
#${fwcmd} add allow tcp from any to any 587 out

# 外部からのTCP465番ポート(SMTPS)へのアクセスを許可
# ※SMTPSサーバーを公開する場合のみ
${fwcmd} add allow tcp from any to any 465 in
${fwcmd} add allow tcp from any to any 465 out

# 外部からのTCP110番ポート(POP3)へのアクセスを許可
# ※POP3サーバーを公開する場合のみ
${fwcmd} add allow tcp from any to any 110 in
${fwcmd} add allow tcp from any to any 110 out

# 外部からのTCP995番ポート(POP3S)へのアクセスを許可
# ※POP3Sサーバーを公開する場合のみ
${fwcmd} add allow tcp from any to any 995 in
${fwcmd} add allow tcp from any to any 995 out

# 外部からのTCP143番ポート(IMAP)へのアクセスを許可
# ※IMAPサーバーを公開する場合のみ
${fwcmd} add allow tcp from any to any 143 in
${fwcmd} add allow tcp from any to any 143 out

# 外部からのTCP993番ポート(IMAPS)へのアクセスを許可
# ※IMAPSサーバーを公開する場合のみ
${fwcmd} add allow tcp from any to any 993 in
${fwcmd} add allow tcp from any to any 993 out

# 外部からのTCP123番ポート(NTP)へのアクセスを許可
#${fwcmd} add allow tcp from any to any 123 in
#${fwcmd} add allow tcp from any to any 123 out

# 外部からのUDP1701番ポート(L2TP(Layer 2 Tunneling Protocol))へのアクセスを許可
# ※VPN L2TP/IPsecサーバーを公開する場合のみ
#${fwcmd} add allow udp from any to any 1701 in
#${fwcmd} add allow udp from any to any 1701 out

# 外部からのUDP500番ポート(IKE : ISAKMP)へのアクセスを許可
# ※VPN L2TP/IPsecサーバーを公開する場合のみ
#${fwcmd} add allow udp from any to any 500 in
#${fwcmd} add allow udp from any to any 500 out

# 外部からのUDP4500番ポート(IPSec NAT Traversal)へのアクセスを許可
# ※VPN L2TP/IPsecサーバーを公開する場合のみ
#${fwcmd} add allow udp from any to any 4500 in
#${fwcmd} add allow udp from any to any 4500 out

# 外部からのUDP1194番ポート(OpenVPN)へのアクセスを許可
# ※OpenVPNサーバーを公開する場合のみ
#${fwcmd} add allow udp from any to any 1194 in
#${fwcmd} add allow udp from any to any 1194 out

# 内部から外部への ping とその応答のみ許可
${fwcmd} allow icmp from any to any in icmptypes 0,3,4,11,12
${fwcmd} allow icmp from any to any out icmptypes 3,4,8,11,12

# 上記以外はログして拒否
${fwcmd} add deny log all from any to any

#(コメントアウト)部分は、後ほど設定する部分です。

設定②

①.再起動後も ipfw が自動起動するように設定する。

vi /etc/rc.conf

②.以下の内容を追記する。

firewall_enable="YES"
firewall_script="/etc/ipfw.rules"
firewall_logging="YES"

firewall_logging は、ログの保存を有効にする設定です。
また、ログの保存先は、「/var/log/security」に保存される。

③.ipfw を起動する。

service ipfw start

ipfw起動後に、SSHでの接続が出来ない場合は、コンソール接続から復旧する必要があります。

④.設定情報が反映されている事を確認する。

ipfw list

⑤.以下のように、正しく設定されている事を確認する。

00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
00400 deny ip from any to any frag
00500 check-state :default
00600 allow tcp from any to any established
00700 allow ip from any to any out keep-state :default
00800 deny tcp from any 135,137-139,445 to any
00900 deny tcp from any to any 135,137-139,445
01000 deny udp from any 135,137-139,445 to any
01100 deny udp from any to any 135,137-139,445
01200 allow tcp from any to any 22 in
01300 allow tcp from any to any 22 out
01400 allow udp from any to any 53 in
01500 allow tcp from any to any 53 in
01600 allow udp from any to any 53 out
01700 allow tcp from any to any 53 out
01800 allow tcp from any to any 80 in
01900 allow tcp from any to any 80 out
02000 allow tcp from any to any 443 in
02100 allow tcp from any to any 443 out
02200 allow tcp from any to any 465 in
02300 allow tcp from any to any 465 out
02400 allow tcp from any to any 110 in
02500 allow tcp from any to any 110 out
02600 allow tcp from any to any 995 in
02700 allow tcp from any to any 995 out
02800 allow tcp from any to any 143 in
02900 allow tcp from any to any 143 out
03000 allow tcp from any to any 993 in
03100 allow tcp from any to any 993 out
03200 deny log ip from any to any
65535 deny ip from any to any

⑥.再起動

reboot

⑦.再起動後も ipfw が有効である事を確認する。