tcp_wrappers(アクセスコントロールのために)
鯖へのアクセスをコントロールする最も簡単な方法。
実はtcp_wrappersをインストールするとできるtcpdは純正玄箱にも入っている・・・
入ってはいるが、機能していない。
hosts.allow/hosts.denyを読みに逝ってない。
ダメじゃんよ〜(;´Д`)
というわけで入れなおす。
えぇ、1から作り直しですよ( ̄ー ̄)ふ・・・
「入ってはいるが、機能していない」
私が思うに「入っていない」よりある意味悪質。
期待させておいて使えないんだから。
tcp_wrappersのほかにもいくつかのソフトで同様の状況が見受けられます。
wu-ftpdとか(うろ覚え)
かなり、ソースを弄ったんだろうなぁ・・・と思いますが。
でも、(tcp_wrappersは)便利なのに使えなくしてどうするんだ?と。
やること一覧 ・Makefileの修正:tcp_wrappers ・ソースファイルの修正:ふかふかの部屋 - Install Memo - jvim+onew ・インストール ・ログファイルの処理 ・hosts.allow/hosts.denyの書き方(簡単に)
tcp_wrappers_7.6-ipv6.4.tar.gzを探してくる。
Wietse's collection of tools and papers
Wietse's collection of tools and papers(FTP)
で、ユーザーのホームディレクトリにFFFTPで送る。
例のあれ(解凍まで)
$ tar xvfz tcp_wrappers_7.6-ipv6.4.tar.gz $ cd tcp_wrappers_7.6-ipv6.4そのままではアクセス権(w)が無いので変更
$ chmod 644 MakefileMakefileを弄る
$ vi Makefile
(変更)
┃STYLE = -DPROCESS_OPTIONS
┃FACILITY= LOG_AUTH
┃DOT= -DAPPEND_DOT
注:変更点のみ抽出。STYLE/DOTは#をはずす。
注:検索を駆使して修正する。
だから、viよりもWinで書き換えてUPが楽・・・
「Makefileの編集」
そのまま、コンパイルするとエラーが出るのでソースを弄る。
アクセス権・・・やっぱり無いので修正
$ chmod 644 percent_m.c実際に弄る
$ vi percent_m.c (変更) ┃/*extern char *sys_errlist[];*/ ┃extern __const char *__const _sys_errlist[]; 注:C言語のコメントは/*〜*/で囲むらしいよくわからないが、stdio.hファイルの記載が違うらしい。
tcp_wrappersは昔の流れを脈々と受け継ぐソフトだ(ホントか?)
なので、makeに引数がある・・・
まぁ、詳しくはMakefileに英文で書いてあるので地道に読むこと。
コンパイルを実行
$ make CC=gcc REAL_DAEMON_DIR=/usr/sbin linux 注:多分、CC=gcc は無くても大丈夫インストール(という名の手動コピー)
# cp tcpd tcpdchk tcpdmatch safe_finger try-from /usr/sbin/ # cp tcpd.h /usr/include/ # cp libwrap.a /usr/lib/おまじない
# cd /usr/sbin # strip -p tcpd tcpdchk tcpdmatch safe_finger try-from「おまじない」
ログの受け皿を作る。垂れ流しは良くないから。
今回作ったtcp_wrappersはsyslogdを経由してauthのログを吐き出す。
まぁ、なんにせよ、syslogdの設定を弄らないといけない。
ログファイルの設定
# vi /etc/syslog.conf (追加) ┃# tcpd and xinetd logs to auth.log ┃auth.* /var/log/auth.log 注:後述のxinetdもログファシリティをauthにしている 注:inetdの継続使用のときでも互換性がある(と思う) 注:タブを適当に減らしている(はみ出るから)ログファイル(空)の作成
# touch /var/log/auth.logsyslogdの再起動(設定を認識させる)
# killall -s HUP syslogd「syslog.conf」
hosts.allow/hosts.denyの書き方(簡単に)
注意
書式を間違えると玄箱が操作不能になります。
ターミナルを2つ立ち上げてログインしておいてください。
ひとつは設定用、ひとつは確認用です。
hosts.allow/hosts.denyの処理順序
適合処理は hosts.allow > hosts.deny の順で行われる。
1つでも適合する項目があると、それ以降のチェックはしない。
hosts.allow/hosts.denyの両方に記載の無いものは接続を許可される。
同一ファイル内では、シェルスクリプトのように上から順番に適合確認を行う。
だから、最初にhosts.denyではありとあらゆるものを禁止する。
hosts.denyの書き方
何も考えず、ただ一文・・・
# vi /etc/hosts.deny ┃ALL : ALLと書く。
# vi /etc/hosts.deny ┃# hosts.deny This file describes the names of the hosts which are ┃# *not* allowed to use the local INET services, as decided ┃# by the '/usr/sbin/tcpd' server. ┃# ┃# The portmap line is redundant, but it is left to remind you that ┃# the new secure portmap uses hosts.deny and hosts.allow. In particular ┃# you should know that NFS uses portmap! ┃ALL : ALL内容は変わってないけどね・・・(コメントが増えただけ)
# vi /etc/hosts.allow ┃# hosts.allow This file describes the names of the hosts which are ┃# allowed to use the local INET services, as decided ┃# by the '/usr/sbin/tcpd' server. ┃# ┃ALL : LOCAL ┃in.telnetd : 192.168.0.0/255.255.255.0 ┃in.ftpd : 192.168.0.0/255.255.255.0とか。
# vi /etc/hosts.allow ┃sshd : .hoge.ad.jp : deny ┃sshd : .jpsshdへの接続を.jpドメインならば許可するが、*.hoge.ad.jpであれば拒否。
ALL :全てのクライアント LOCAL :玄箱自身からの接続(一般に127.0.0.1となるもの) 192.168.0.0/255.255.255.0 :IP/サブネットマスク(192.168.0.1〜192.168.0.254まで) 192.168.0.1 :IPそのもの(192.168.0.1のみ) 192.168.0. :IPの頭のほう(192.168.0.1〜192.168.0.254まで) www.hoge.com :ドメイン名(www.hoge.comのみ) .hoge.com :ドメイン名の後ろのほう(*.hoge.comである全て) 複数指定可能(半角スペース区切り) 行を分けてもOK(ただし、サービス名を書く必要あり)設定の確認
# tcpdchk -v # tcpdchk -v | grep -v inet 注:下はgrepで「inet.confに記載されていないぞ」警告を消している(xinetd用)「hosts.allow/hosts.deny」
戻るなら押せ!