「ipfw」の版間の差分

提供: セキュリティ
移動: 案内検索
 
(同じ利用者による、間の1版が非表示)
行1: 行1:
<!--
 
vim: filetype=mediawiki
 
-->
 
 
[[ipfw]] (IP FireWall) とは、[[FreeBSD]] のパケットフィルタ型の [[ファイアーウォール]] です。また、[[ipfw]] ファイアーウォールを制御する [[ipfw]] コマンドです。
 
[[ipfw]] (IP FireWall) とは、[[FreeBSD]] のパケットフィルタ型の [[ファイアーウォール]] です。また、[[ipfw]] ファイアーウォールを制御する [[ipfw]] コマンドです。
  
行9: 行6:
  
 
== 概要 ==
 
== 概要 ==
 
 
[[カーネル]] に組み込むことができます。[[ローダブルカーネルモジュール]]として利用できます。
 
[[カーネル]] に組み込むことができます。[[ローダブルカーネルモジュール]]として利用できます。
 
[[Windows]] には、[[wipfw]] として移植されています。
 
[[Windows]] には、[[wipfw]] として移植されています。
 
  
 
* [[ipfw カーネルモジュール]]
 
* [[ipfw カーネルモジュール]]
 
* [[ipfw のコマンドラインオプション]]
 
* [[ipfw のコマンドラインオプション]]
 
* [[ipfw rc.confの設定]]
 
* [[ipfw rc.confの設定]]
* [[ipfw ログを出力する]]
+
* ipfw ログを出力する
* [[ipfw ステートフルを利用する]]
+
* ipfw ステートフルを利用する
* [[ipfw Webサーバへのアクセスを許可する]]
+
* ipfw Webサーバへのアクセスを許可する
* [[ipfw ICMPを許可する]]
+
* ipfw ICMPを許可する
* [[ipfw DNS問い合わせを許可する]]
+
* ipfw DNS問い合わせを許可する
* [[ipfw NTPを許可する]]
+
* ipfw NTPを許可する
 
+
== カーネルオプション ==
+
 
+
<syntaxhighlight lang="bash">
+
options    IPFIREWALL
+
 
+
# This option enables IPFW as part of the kernel.
+
options    IPFIREWALL_VERBOSE
+
 
+
#This option enables logging of packets that pass through IPFW and have the log keyword specified in the ruleset.
+
options    IPFIREWALL_VERBOSE_LIMIT=5
+
 
+
#This option limits the number of packets logged through syslogd(8), on a per-entry basis. This option may be used in hostile environments, when firewall activity logging is desired. This will close a possible denial of service attack via syslog flooding.
+
options    IPFIREWALL_DEFAULT_TO_ACCEPT
+
 
+
# This option allows everything to pass through the firewall by default, which is a good idea when the firewall is being set up for the first time.
+
options    IPDIVERT
+
</syntaxhighlight>
+
 
+
== /etc/rc.conf のオプション ==
+
 
+
<syntaxhighlight lang="bash">
+
firewall_enable="YES"
+
 
+
# To select one of the default firewall types provided by FreeBSD, select one by reading /etc/rc.firewall and specify it in the following:
+
firewall_type="open"
+
 
+
# Enabled logging
+
firewall_logging="YES"
+
</syntaxhighlight>
+
 
+
 
+
* open: すべてのトラフィックをパスします。
+
* client: protects only this machine.
+
* simple: protects the whole network.
+
* closed: entirely disables IP traffic except for the loopback interface.
+
* UNKNOWN: disables the loading of firewall rules.
+
* filename: absolute path of the file containing the firewall rules.
+
 
+
== カーネルモジュール ==
+
 
+
[[カーネルモジュール]] [[ipfw]] をロードします。
+
<syntaxhighlight lang="bash">
+
sudo kldload ipfw
+
</syntaxhighlight>
+
 
+
[[カーネルモジュール]] [[ipfw]] をアンロードします。
+
<syntaxhighlight lang="bash">
+
sudo kldunload ipfw
+
</syntaxhighlight>
+
 
+
== 設定ファイル /etc/rc.firewall ==
+
 
+
 
+
 
+
 
== 使い方 ==
 
== 使い方 ==
<syntaxhighlight lang="bash">
 
% ipfw -h
 
ipfw syntax summary (but please do read the ipfw(8) manpage):
 
 
        ipfw [-abcdefhnNqStTv] <command>
 
 
where <command> is one of the following:
 
 
add [num] [set N] [prob x] RULE-BODY
 
{pipe|queue} N config PIPE-BODY
 
[pipe|queue] {zero|delete|show} [N{,N}]
 
nat N config {ip IPADDR|if IFNAME|log|deny_in|same_ports|unreg_only|reset|
 
                reverse|proxy_only|redirect_addr linkspec|
 
                redirect_port linkspec|redirect_proto linkspec}
 
set [disable N... enable N...] | move [rule] X to Y | swap X Y | show
 
set N {show|list|zero|resetlog|delete} [N{,N}] | flush
 
table N {add ip[/bits] [value] | delete ip[/bits] | flush | list}
 
table all {flush | list}
 
 
RULE-BODY:      check-state [PARAMS] | ACTION [PARAMS] ADDR [OPTION_LIST]
 
ACTION: check-state | allow | count | deny | unreach{,6} CODE |
 
              skipto N | {divert|tee} PORT | forward ADDR |
 
              pipe N | queue N | nat N | setfib FIB | reass
 
PARAMS:        [log [logamount LOGLIMIT]] [altq QUEUE_NAME]
 
ADDR:          [ MAC dst src ether_type ]
 
                [ ip from IPADDR [ PORT ] to IPADDR [ PORTLIST ] ]
 
                [ ipv6|ip6 from IP6ADDR [ PORT ] to IP6ADDR [ PORTLIST ] ]
 
IPADDR: [not] { any | me | ip/bits{x,y,z} | table(t[,v]) | IPLIST }
 
IP6ADDR:        [not] { any | me | me6 | ip6/bits | IP6LIST }
 
IP6LIST:        { ip6 | ip6/bits }[,IP6LIST]
 
IPLIST: { ip | ip/bits | ip:mask }[,IPLIST]
 
OPTION_LIST:    OPTION [OPTION_LIST]
 
OPTION: bridged | diverted | diverted-loopback | diverted-output |
 
        {dst-ip|src-ip} IPADDR | {dst-ip6|src-ip6|dst-ipv6|src-ipv6} IP6ADDR |
 
        {dst-port|src-port} LIST |
 
        estab | frag | {gid|uid} N | icmptypes LIST | in | out | ipid LIST |
 
        iplen LIST | ipoptions SPEC | ipprecedence | ipsec | iptos SPEC |
 
        ipttl LIST | ipversion VER | keep-state | layer2 | limit ... |
 
        icmp6types LIST | ext6hdr LIST | flow-id N[,N] | fib FIB |
 
        mac ... | mac-type LIST | proto LIST | {recv|xmit|via} {IF|IPADDR} |
 
        setup | {tcpack|tcpseq|tcpwin} NN | tcpflags SPEC | tcpoptions SPEC |
 
        tcpdatalen LIST | verrevpath | versrcreach | antispoof
 
</syntaxhighlight>
 
 
 
デフォルトの状態は、下記の通りです。
 
デフォルトの状態は、下記の通りです。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行130: 行26:
 
65535 deny ip from any to any
 
65535 deny ip from any to any
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== ipfw getsockeopt IP_FW_GET Protocol not available ===
 
=== ipfw getsockeopt IP_FW_GET Protocol not available ===
 
 
[[ipfw]] がロードされていない場合、下記のエラーがでます。
 
[[ipfw]] がロードされていない場合、下記のエラーがでます。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行143: 行37:
 
# kldload ipfw
 
# kldload ipfw
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== ステートフル ===
 
=== ステートフル ===
 
 
keep-state は、 check-stateとセットで使用します。
 
keep-state は、 check-stateとセットで使用します。
  
行153: 行45:
 
add pass tcp from any to any 80 setup keep-state
 
add pass tcp from any to any 80 setup keep-state
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
 
=== ICMP を許可する ===
 
=== ICMP を許可する ===
 
 
[[ICMP]] を許可する例です。
 
[[ICMP]] を許可する例です。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
add allow icmp from any to any
 
add allow icmp from any to any
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== Webサーバへのアクセスを許可する ===
 
=== Webサーバへのアクセスを許可する ===
 
 
[[Webサーバ]] を起動して、サービスを提供している場合に ポート番号 80 にアクセスを許可する例です。
 
[[Webサーバ]] を起動して、サービスを提供している場合に ポート番号 80 にアクセスを許可する例です。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
add allow pass tcp from any to me 80 setup
 
add allow pass tcp from any to me 80 setup
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== DNS問い合わせを許可する ===
 
=== DNS問い合わせを許可する ===
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行177: 行63:
 
add allow udp from me to any 123 keep-state
 
add allow udp from me to any 123 keep-state
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== 関連項目 ==
 
== 関連項目 ==
 
* [[ファイアーウォール]]
 
* [[ファイアーウォール]]
 
* [[FreeBSD]]
 
* [[FreeBSD]]
* [[pf]]
+
* pf
 
* [[wipfw]]
 
* [[wipfw]]
 
* [[iptables]]
 
* [[iptables]]
 +
<!-- vim: filetype=mediawiki
 +
-->

2015年9月22日 (火) 13:48時点における最新版

ipfw (IP FireWall) とは、FreeBSD のパケットフィルタ型の ファイアーウォール です。また、ipfw ファイアーウォールを制御する ipfw コマンドです。

読み方

ipfw
あいぴー えふだぶりゅー

概要

カーネル に組み込むことができます。ローダブルカーネルモジュールとして利用できます。 Windows には、wipfw として移植されています。

使い方

デフォルトの状態は、下記の通りです。

# kldload ipfw
ipfw2 (+ipv6) initialized, divert loadable, nat loadable, default to deny, logging disabled
# ipfw list
65535 deny ip from any to any

ipfw getsockeopt IP_FW_GET Protocol not available

ipfw がロードされていない場合、下記のエラーがでます。

# ipfw list
ipfw: getsockeopt(IP_FW_GET): Protocol not available

ipfw をロードします。

# kldload ipfw

ステートフル

keep-state は、 check-stateとセットで使用します。

add check-state
add deny tcp from any to any established
add pass tcp from any to any 80 setup keep-state

ICMP を許可する

ICMP を許可する例です。

add allow icmp from any to any

Webサーバへのアクセスを許可する

Webサーバ を起動して、サービスを提供している場合に ポート番号 80 にアクセスを許可する例です。

add allow pass tcp from any to me 80 setup

DNS問い合わせを許可する

add allow udp from me to any 53 keep-state

NTP を許可する

add allow udp from me to any 123 keep-state

関連項目