ipfw
提供: セキュリティ
スポンサーリンク
ipfw (IP FireWall) とは、FreeBSD のパケットフィルタ型の ファイアーウォール です。また、ipfw ファイアーウォールを制御する ipfw コマンドです。
読み方
- ipfw
- あいぴー えふだぶりゅー
目次
概要
カーネル に組み込むことができます。ローダブルカーネルモジュールとして利用できます。 Windows には、wipfw として移植されています。
カーネルオプション
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
/etc/rc.conf のオプション
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"
- 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 をロードします。
sudo kldload ipfw
カーネルモジュール ipfw をアンロードします。
sudo kldunload ipfw
設定ファイル /etc/rc.firewall
使い方
% 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
デフォルトの状態は、下記の通りです。
# 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
関連項目
ツイート
スポンサーリンク