ファイアーウオールの設定


  1. シャドウパスワード
    RedHat 6.1以降にはシャドウパスワードがデフォルトで有効になっており, /etc/passwdにパスワードを記述しないようになっている. pwconvコマンドとpwunconvコマンドによりシャドウパスワードと通常のパスワードを 切り替えることができる.

  2. ネットワークサービス
    不必要なサービスを起動していると,CPUパワーを無駄に消費するだけでなく, それだけ外部から攻撃される危険性が高くなる. 特にrloginとrshは非常にセキュリティが甘いので,使用できないようにするのが無難である. また,ネットワークファイルシステム(NFS)とネットワーク情報システム(NIS)を インターネットに接続しているサーバーで起動していると,ファイルシステムや情報の 共有が外部のユーザでもできてしまうので,大変危険である. インターネットサーバーでは,NFSとNISは原則として使用しない.

    OS起動時に起動されるサービスは/etc/inetd.confに記述されている. 起動しないサービスには,行の先頭に#を記入する.

    ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l -a
    telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
    #
    # Shell, login, exec, comsat and talk are BSD protocols.
    #
    #shell  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd
    #login  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
    #exec   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rexecd
    #comsat dgram   udp     wait    root    /usr/sbin/tcpd  in.comsat
    talk    dgram   udp     wait    nobody.tty      /usr/sbin/tcpd  in.talkd
    ntalk   dgram   udp     wait    nobody.tty      /usr/sbin/tcpd  in.ntalkd
    #dtalk  stream  tcp     wait    nobody.tty      /usr/sbin/tcpd  in.dtalkd
    
    なお,/etc/inetd.confを変更した場合,必ずinetdをkill -HUPして変更を反映させなければならない.
    % ps ax | grep inetd
      458 ? S    0:00 inetd
    % kill -HUP 458
    

  3. アクセス制御
    inetdから起動するサービスはTCP Wrapperというプログラムによってアクセスを制限することができる. TCP Wrapper(/usr/sbin/tcpd)は,指定したサービス(ftpdやpop-3)などに対し, アクセスを許可するネットワークアドレスやIPアドレスを指定し, それ以外からのアクセスは拒否するように設定できる. また,アクセスについてのログを残す機能も持っている.

    ここでは,ftpとtelnetをローカルのネットワークだけに提供する設定を示す. tcpdはこれらのプロトコルで接続要求が発生した場合に起動され, /etc/hosts.deny/etc/hosts.allowという二つのファイルを参照して,接続の許可・不許可を決定する. RedHatの場合,デフォルトではこの二つのファイルは空である(コメントのみ書かれている).

    まず,hosts.denyですべてのアクセスを不許可にする.

    ALL: ALL
    

    次に,hosts.allowをローカルネットワークからのアクセスだけ許可するように編集する.

    in.ftpd: 133.***.***.0/255.255.255.0
    in.telnetd: 133.***.***.0/255.255.255.0
    

    これで,ftpとtelnetは133.***.***.1から133.***.***.254までのIPアドレスからしか受け付けなくなる. tcpdは接続要求の度に起動されるので,host.denyおよびhost.allowを変更しても tcpdを再起動する必要はない.

    tcpdchk(/usr/sbin/tcpdchk)はinetd.conf,host.allowおよびhost.denyの正当性をチェックする. tcpdchkを実行し,何も表示されなければ問題ないが,errorやwarningが表示された場合は 記述に矛盾がある.

    tcpdを使った場合,アクセス要求のあったホストに関するログが/var/log/secureに記録される (デフォルトでこのファイルはroot以外見ることはできない).

    Oct 12 10:00:25 fukunm12 in.ftpd[12980]: connect from 133.***.***.xxx
    Oct 12 11:41:32 fukunm12 in.telnetd[999]: connect from 133.***.***.yyy
    Oct 12 11:41:44 fukunm12 login: LOGIN ON 0 BY akasaka FROM mech3
    
    アクセスが拒否された場合は,次のようなログが残る.
    Oct 12 09:41:01 fukunm12 in.telnetd[12873]: refused connect from 133.15.***.***
    
    しかしながら,実際にアクセスしてみないと許可/拒否がわからないのでは少々心もとない. そこでtcpdmatch(/usr/sbin/tcpdmatch)というプログラムが用意されている. これを使うと,引数として指定したアドレスからのアクセスが可能であるかを調べることができる. 以下は,in.telnetdサービスが133.5.145.100からアクセス可能かを調べた例である.
    % tcpdmatch in.telnetd 133.5.145.100
    client:   address  133.5.145.100
    server:   process  in.telnetd
    matched:  /etc/hosts.deny line 10
    access:   denied
    
    最後のaccessがdeniedの場合,アクセス不可能である. アクセス可能な場合は,
    % tcpdmatch in.telnetd 133.***.***.zzz
    client:   address  133.***.***.zzz
    server:   process  in.telnetd
    matched:  /etc/hosts.allow line 8
    access:   granted
    
    のようになる.

お問い合わせはメールにて: akasaka@klc.ac.jp

戻る
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送