FreeBSD 4/5

FreeBSD 4.1X / 5.X を対象にしています。
[最終更新日: 2007/09/13]

1. 管理メニュー

| INDEX

> /stand/sysinstall で管理メニューが起動できる。設定類はここにまとまっているので、それほど困ることはないか。

2. suできるユーザを設定する

| | INDEX

デフォルトで su できるユーザがいないので、/etc/group を編集する。(簡易)

# /etc/group [一部]
wheel:root,[USER]

3. 基本設定 /etc/rc.conf

| | INDEX

以下、/etc/rc.conf の個人的な設定例。/etc/hosts に freeb 192.168.1.17 が設定されている。コメントアウトされているものが多い。

hostname="freeb"
ifconfig_de0="inet 192.168.1.17 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
syslogd_flags="-s -s"
ipv6_enable="NO"
keymap="jp.106"
#kern_securelevel_enable="YES"
#kern_securelevel="2"

サービス類の設定。

#moused_enable="YES"
sshd_enable="YES"
inetd_enable="NO"
portmap_enable="NO"
named_enable="NO"
xntpd_enable="NO"
nfs_server_enable="NO"
nfs_client_enable="NO"
lpd_enable="NO"
sendmail_enable="NONE" # sendmailの完全停止は NONE

ファイアウォールなどの設定。

# ipfw ----------------------
firewall_enable="YES"
firewall_logging="YES"
firewall_script="/etc/rc.ipfw"
# ipfilter ------------------
#ipfilter_enable="YES"
#ipfilter_rules="/etc/ipf.rules"
#ipmon_enable="YES"
#ipmon_flags="-D /var/log/ipflog"
# other network security ----
#tcp_drop_synfin="YES"

4. ext2ファイルシステムのマウント

| | INDEX

Linuxでよく使われているext2(ext3)ファイルシステムのマウント。カーネルに options EXT2FS がされているか、カーネルモジュール(ext2fs.ko)が使用できればOKかと。以下は例。

mount_ext2fs /dev/ad1s1 /mnt

デバイス名(ハードディスクのパーティション名)がわからなければ、dmesg でも見て探すとする。

まぁ、IDEだと ad0 ad1 というカンジのディスク名?に、s1 とかパーティション名?がつくようだ 例:ad1s1)

dmesg | less

5. カーネルの再構築

| | INDEX

※ FreeBSD 4.10 での話。5系 では、GENERIC.hints (デバイスまわりの設定)という設定ファイルが増えている。

カーネル再構築(i386)。ここでの目的は、カーネルモジュールで使用している機能の組み込み。あと、不要なデバイスはついでに削除する。

まずは使用しているカーネルモジュールを確認。以下は実行例。

> kldstat                              
Id Refs Address    Size     Name       
1    3 0xc0100000 44ff80   kernel     
2    1 0xc0aa1000 7000     ipfw.ko    
3    1 0xc0b6b000 d000     ext2fs.ko  

ipfw と Linuxのファイルシステム(ext2)の対応のためのモジュールが使われていることがわかる。

では、それを組み込む場合。

  1. はじめにカーネルのソースをインストール。

    /stand/sysinstall の Configuration -> Package -> Distribution から、src -> sys をインストール。

  2. /usr/src/sys/i386/conf のなかにあるカーネルの設定ファイルを編集する(原本は残してコピーを編集)

    > cd /usr/src/sys/i386/conf
    > cp GENERIC MYKERNEL
    
  3. MYKERNEL の内容を編集する

    # /usr/src/sys/i386/conf/MYKERNEL [一部]
    ident MYKERNEL
    # IPFW / IPFW Logging_
    optinos IPFIREWALL
    options IPFIREWALL_VERBOSE
    options IPFIREWALL_VERBOSE_LIMIT=100   # ログ数のリミット
    # Linux EXT2 FileSystem
    options  EXT2FS
    

    あと、不要なデバイスをコメントアウトしたりする。

  4. カーネルのコンパイルを実行する。この際、組み込まれなかった機能はカーネルモジュールとしてコンパイルされる。

    > make depend
    > make
    > make install
    > make clean
    

    以下はカーネルのみのコンパイル例。組み込まなかった機能を完全に無視するので、コンパイル時間は短縮される。(もちろん、組み込まなかった機能は使えなくなる)

    > make kernel-depend
    > make kernel
    > make kernel-install
    > make kernel-clean
    

6. portsの導入

| | INDEX
  1. /stand/sysinstall のメニューから、Configuration -> Package -> net -> cvsup (noGUI) をインストールする。
  2. ベースとなる設定ファイルをコピーする。

    > cp /usr/share/examples/cvsup/ports-supfile /etc/supfile
    
  3. /etc/supfile を編集(例)

    # /etc/supfile [一部]
    *default host=cvsup3.jp.FreeBSD.org
    *default base=/usr
    *default prefix=/usr
    *default release=cvs tag=.
    *default delete use-rel-suffix
    *default compress # 圧縮転送を有効にする
    ports-all # 全指定。 ジャンルごとに導入する場合、コメントにする
    #ports-base # ジャンルごとに導入する場合、必須
    #ports-archivers
    #ports-astro
    #ports-audio
    
  4. 以下のコマンドでportsを更新する。(パイプ以降はログを残すため)

    > cvsup -g -L 2 /etc/supfile | tee -a /var/log/ports/cvsup.log
    

    ※ ポート番号:5999への通信を許可しておく必要がある。

    portsの更新状態を確認するには、更新後に

    > portversion -v
    
  5. コンパイル時に最適化がかかるようにするには、/etc/make.conf を修正する。

    # /etc/make.conf [一部]
    CPUTYPE=i686
    CFLAGS= -O -pipe
    COPTFLAGS= -O -pipe
    

7. ipfwの設定

| INDEX

以下、個人的に使っている設定スクリプトの内容抜粋。

#!/bin/sh
###############################################################################
# INIT_SECTION
###############################################################################
# ** Notice **
# if your Server has over 2 ip_address , 
# you may set "me" instead of setting "$SERVER" .
IPFW='/sbin/ipfw'
SERVER='192.168.1.18'
LOCALNET='192.168.1.0/24'
LOCALHOST='127.0.0.1'
ANY='0.0.0.0/0'
#sysctl -w net.inet.ip.fw.verbose=1
${IPFW} -f flush
###############################################################################
# DENY_HOST
###############################################################################
# Deny broardcast packets.
${IPFW} -q add 10001 deny all from ${ANY} to 192.168.1.255
${IPFW} -q add 10002 deny all from 192.168.2.0/24 to ${SERVER}
###############################################################################
# RULE_SECTION
###############################################################################
# "lo" LOOPBACK -----------------------
${IPFW} -q add 00010 allow all from ${ANY} to ${ANY} via lo0
# ICMP_Packets
${IPFW} -q add 30000 allow icmp from ${SERVER} to ${ANY} icmptype 0,3,4,8,11,12
${IPFW} -q add 30001 allow icmp from ${ANY} to ${SERVER} icmptype 0,3,4,8,11,12
# +-+- INPUT_RULES -+-+---------------------------------
# ESTABLISHED_PACKET ALLOW...
${IPFW} -q add 50000 allow tcp from ${ANY} to ${ANY} established
# HTTP tcp:80
${IPFW} -q add 00050 allow tcp from ${ANY} to ${SERVER} 80
# HTTP tcp:8080
${IPFW} -q add 00055 allow tcp from ${LOCALNET} to ${SERVER} 8080
# HTTPS tcp:443
#${IPFW} -q add 00060 allow tcp from ${ANY} to ${SERVER} 443
# SMTP tcp:25
${IPFW} -q add 00075 allow tcp from ${ANY} to ${SERVER} 25
# IMAP tcp:143
${IPFW} -q add 00070 allow tcp from ${LOCALNET} to ${SERVER} 143
# DNS return...
${IPFW} -q add 01000 allow udp from ${ANY} 53 to ${SERVER} 1024-65535
# NTP return
${IPFW} -q add 01100 allow udp from ${ANY} 123 to ${SERVER} 1024-65535
# SSH tcp:22 lan
${IPFW} -q add 00090 allow tcp from ${LOCALNET} to ${SERVER} 22
# Samba tcp:139 (udp:137,138) lan
${IPFW} -q add 00100 allow tcp from ${LOCALNET} to ${SERVER} 139
${IPFW} -q add 00101 allow udp from ${LOCALNET} to ${SERVER} 137-138
${IPFW} -q add 00103 allow udp from ${SERVER} to ${LOCALNET} 137-138
${IPFW} -q add 00104 deny tcp from ${LOCALNET} to ${SERVER} 445
# +-+- OUTPUT_RULES -+-+---------------------------------
# HTTP tcp:80
${IPFW} -q add 60010 allow tcp from ${SERVER} to ${ANY} 80
# DNS_Client udp:53
${IPFW} -q add 60011 allow udp from ${SERVER} to ${ANY} 53
# SSH tcp:22
${IPFW} -q add 60020 allow tcp from ${SERVER} to ${ANY} 22
# SMTP tcp:25
#${IPFW} -q add 60030 allow tcp from ${SERVER} to ${ANY} 25
# NTP_Client
${IPFW} -q add 60040 allow udp from ${SERVER} to ${ANY} 123
# == MAINTAINANCE =====
# FTP tcp:21
# ${IPFW} -q add 61000 allow tcp from ${SERVER} to ${ANY} 21
# ${IPFW} -q add 61001 allow tcp from ${ANY} to ${ANY} 1024-65535
# CVS tcp:5999
# ${IPFW} -q add 61100 allow tcp from ${SERVER} to ${ANY} 5999
# ${IPFW} -q add 61101 allow udp from ${SERVER} to ${ANY} 5999
# == /MAINTAINANCE =====
###############################################################################
# OTHER_DROP_RULES
###############################################################################
# DENY not match above rules...and LOGGING
${IPFW} -q add 65000 deny log udp from ${ANY} to ${ANY}
${IPFW} -q add 65001 deny log tcp from ${ANY} to ${ANY}
${IPFW} -q add 65002 deny log icmp from ${ANY} to ${ANY}
###############################################################################
# END_SECTION
###############################################################################
# COUNTER_RESET
${IPFW} zero
.