3階のゲートウェイマシン作成方針
【目次】
 
はじめに
パソコンを,3階のゲートウェイマシンになるように設定したい. 現在は,yoda.db.is.kyushu-u.ac.jp/luke.4f.db.is.kyushu-u.ac.jp (133.xxx.yyy.166/192.168.33.1)が3階のゲートウェイである。 なお、「local.db.is.kyushu-u.ac.jp」とあるのは、「内部ネットマシ ン」の意味です.
3階のゲートウェイは, (xxx, yyy の部分は、適切なアドレスを記入してください)。
- host名 yoda/luke
- IPアドレス 133.xxx.yyy.166/192.168.33.1
として設置するが,設置する前に必ず「テスト」を行なうこと. また、作業内容は詳細にメモしておくこと。
関連する設定については,DNSセカンダリサーバ,
NISスレーブサーバ,
NAT,ipfw, dhcp サーバ,および ntpd の各ページを参照する.
 
インストール準備
- FreeBSD のインストールと基本設定を行なう. 導入する版は,FreeBSD 14.4-RELEASE(2026年3月10日公開)または FreeBSD 15.1-RELEASE(2026年6月16日公開)のような,サポート期間内の Production Release とする
- 牧之内研ネットワーク設定を行なう
- システムの更新を行なう. 更新にはバイナリ更新の freebsd-update を使う. ソースからの更新を行う場合は git で src リポジトリを取得する (CVSup は廃止されており使用しない)
- FreeBSD牧之内研設定を行なう
- rootパスワードを確認せよ.周りの修士学生に聞くこと
- host名を決めよ(例えば,gate.4f.db.is.kyushu-u.ac.jp).
- IPアドレスを決めよ(例えば,192.168.33.75).IPアドレスやインターフェイス名 の情報は,ifconfig -a で調べることができる.インターフェイス名は ネットワークカードの種類で決まる(例:em0, igb0, re0)ので,実機で確認すること.
 
3階ゲートウェイマシンが提供すべき機能
- DNSセカンダリサーバ
3階内部ネットにサービスを提供
.local.db.is.kyushu-u.ac.jpを管理
権威DNSサーバは FreeBSD の基本システムには含まれないので, ports/packages の BIND(dns/bind920)または NSD(dns/nsd)を導入する. 基本システムの unbound はキャッシュDNSサーバであり,ゾーン転送による セカンダリサーバの用途には使わない - NISスレーブサーバ
3階内部ネットにサービスを提供
NIS は通信を暗号化しない旧来の方式である.新規に構築する場合は LDAP over TLS(openldap サーバ + sssd や nss_ldap)による アカウント共有を選ぶ.既存環境との互換のために NIS を使う場合は, 内部ネット(192.168.33.0/24)からのアクセスだけに限定する - NAT
ネットワークインターフェイスが2つあるので、どちらかを外部に、どちらかを内部にする
アドレス変換は,pf の nat-to か,ipfw の カーネル内 NAT(rc.conf の firewall_nat_enable="YES")を使う. ユーザランドの natd は divert ソケットを経由するため性能が低く,現在は使わない - ipfw
フィルタの設定(ipfw).FreeBSD には ipfw のほかに pf,ipfilter が あるが,1台のマシンで複数のパケットフィルタを同時に有効にしない - dhcpサーバ
3階内部ネットにサービスを提供
ISC DHCP は 2022年10月5日で開発終了(EOL)となったので, 後継の Kea DHCP(net/kea,デーモンは kea-dhcp4)を使う
払い出すIPアドレスの範囲は,現在の yoda/luke の設定ファイルを読んで,同じ範囲を指定する - 時刻同期
基本システムの ntpd を使う./etc/rc.conf に ntpd_enable="YES" と ntpd_sync_on_start="YES" を記述する
 
セキュリティ上の方針
- NFSマウントはしない
(NFS クライアントにならない.もちろんautofsも起動しない) - NFSサーバにならない
- inetdは起動しない
/etc/rc.conf でinetd_enable="NO"
- メール転送エージェントを外部に対して待ち受けさせない
FreeBSD 14 以降の基本システムの MTA は dma(Dragonfly Mail Agent)であり, sendmail は FreeBSD 15 で基本システムから削除された. dma はネットワークからの接続を待ち受けないので,cron などが出すローカルのメールは そのまま dma で処理し,/etc/dma/dma.conf に研究室のスマートホストを記述する. sendmail が入っている旧版では /etc/rc.conf でsendmail_enable="NONE"
- ipfw(またはpf)を使用する
- 禁止されたパケットについてのログを録ること
動作確認中は許可したパケットのログも録った方がよい - telnet,ftp,rsh など,パスワードを平文で流すプロトコルは内外とも禁止し, ssh,sftp,https を使う
- 133.xxx.yyy.* に向けての接続は,平文プロトコルを除いて全て許可
- tcpで外部に接続するのは,平文プロトコルを除いて全て許可
- udpで133.xxx.yyy.* 以外への接続はDNS(port番号 53)とNTP(port番号 123)のみ許可
- icmpは,echo request/echo reply(type 8/0),destination unreachable(type 3), time exceeded(type 11)を許可する. 特に type 3 code 4(fragmentation needed) は Path MTU Discovery に 必要であり,これを落とすと通信が途中で止まる
- 許可していないものは全部禁止
- 禁止されたパケットについてのログを録ること
- パスワードの盗聴に関して
- sudo を導入し、rootのパスワードを打つ機会を無くす. sudoers では実行できるコマンドを必要なものに限定する
- ssh は 公開鍵認証 を使い、/etc/ssh/sshd_config で PasswordAuthentication no,PermitRootLogin no を設定する. ワンタイムパスワードの OPIE(S/Key) は FreeBSD の基本システムから 削除されているので使わない
% sudo su
はダメ。一般ユーザがのっとられると、簡単にrootになれてしまうので。 - sftp は OpenSSH に含まれており、sshd を動かせば利用できる
- 動かすべきデーモン
- ypbind
- syslogd
- sshd
- rpcbind(かつての portmap)
- cron
- moused
- 他にNISスレーブサーバ関連(ypserv)、 NAT・フィルタ関連(pf または ipfw)、dhcp関連(kea-dhcp4)、DNS関連(named)、 時刻同期関連(ntpd)のデーモンが動く
- アクセス制御はパケットフィルタで行う
かつては TCP ラッパー(/etc/hosts.allow,libwrap)でsshd : ALL : allow ALL : ALL : deny
のような制御を行っていたが,OpenSSH は 6.7 で libwrap 対応を削除しており, 現在の基本システムの sshd に /etc/hosts.allow の設定は効かない. サービスごとのアクセス制御は,pf または ipfw のルールと, 各デーモンの設定ファイル(sshd_config の AllowUsers/ListenAddress, named.conf の allow-transfer/allow-query など)で行う.- あるプログラムが libwrap を使っているかどうかは,次のコマンドで確認できる
% ldd hogehoge
- /etc/hosts.allow を使うプログラムが残っている場合,その設定は「first match」である.
最初に記述したものにマッチするのに注意.よって、
ALL:ALL:allow sshd:xxx:deny
と書いたら、先に「ALL:ALL:allow」に引っ掛かるので2行目は意味がない。 設定したら、tcpdchkやtcpdmatchといったコマンドで確認をする。
- あるプログラムが libwrap を使っているかどうかは,次のコマンドで確認できる
- システムは更新された版を利用する
- RELEASE 版を使い,freebsd-update fetch install でセキュリティパッチを適用する. ソースから運用する場合は git で releng ブランチを追跡し, make buildworld / buildkernel を行う
- セキュリティ勧告(FreeBSD Security Advisories)と errata は freebsd-announce および freebsd-security メーリングリストで配布される. 運用マシンではこれらを購読し,該当する勧告が出たときに更新する
- 更新の前に,稼働中の設定ファイル(/etc 以下)とゾーンファイルのバックアップを取る
 
参考資料
- 研究室ホームページ
https://www.kkaneko.jp/sitemap-j.html
から様々な資料を見つけることができる.
https://www.kkaneko.jp/tools/freebsd/FreeBSD_lab.html
など。 - FreeBSD ハンドブック(日本語)
https://docs.freebsd.org/ja/books/handbook/ - FreeBSD セキュリティ勧告
https://www.freebsd.org/security/