IT pass HikiWiki - [Exp2024]最低限セキュリティ対策 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

[((<"2024 スケジュール表・各回資料(09/05)"|[Exp2024]スケジュール表・各回資料#09-2F05>))]


<目次>

{{toc_here}}

= 注意

このページの実習内容は, 自宅からのオンライン実習を想定しています.= ◎不要なサービスの停止

またネットワーク上の通信は「ポート」を通して行なわれます.
ポートは様々なネットワークサービスを提供するための窓口にあたり
, このページでは itpass サーバを ika と呼ぶことにします. つまり,
それぞれのネットワークサービスには固有のポート番号が割り付けられています.


  itpass サーバUNIX(Linux) の場合, ポートを監視し,
ネットワーク上にサービスを提供するプログラムを「デーモン」と呼びます.
ポートは
== ika == itpass.scitec.kobe-u.ac.jpTCP/IP における TCP 層で規定されるものですが,
デーモンは UNIX(Linux) 上のある特定の役割を持ったプログラムの名称です.


です. ("==" UNIX(Linux) 「同じ」の意味で書いています.)サーバとして様々なネットワークサービスを行なえるようになっています (例えばメール配送を行なう smtpd, Web を公開するための httpd, 遠隔ログインを可能にするための sshd 等).
セキュリティを高めるためには, 必要なネットワークサービス以外行なわないようにするのが良いでしょう.


必要のないネットワークサービスを提供しないようにするには, そのネットワークサービスを提供するデーモンを停止する, またはポートをふさぐことが必要となります.

= 遠隔ログインでの X の利用== ポート/デーモンの状況を調べる

ここでは現在稼働しているデーモンを調べるには,
システムで動いているプロセスの中から
, 遠隔ログインにおいて「X を飛ばす デーモンプロセスを探します
(ウィンドウを飛ばす)」方法について実習します. デーモンプロセス名は一般に最後に d が付くものが多いです).
ps コマンドを使うことでプロセスを一覧できます.


Linux では, 他の OS と同様に独自にウィンドウを開くアプリケーションがたくさん使われています (今となっては当たり前すぎるかもしれませんが).
しかし, ここまでに行ってきた遠隔ログインの実習では, 遠隔地の計算機でコマンドを実行したり, 遠隔地の計算機とファイルのやり取りをしましたが, 遠隔地の計算機で新しくウィンドウを開くようなアプリケーションを実行してはいません.
  $ ps aux        

Unix/Linux では X Window System あるいは X と呼ばれるウィンドウシステムを採用しまた, その機能を用いてウィンドウを描画してアプリケーションが動作しています現在のネットワーク状況を確認し,
パケットを待機しているポートを探すには
netstat コマンドを使用すると良いでしょう
.
ssh でログインした遠隔地にある計算機で新たにウィンドウを開くアプリケーションが実行されると, X によるウィンドウの情報が ssh の通信を通して伝達され, 手元の計算機上に遠隔地のアプリケーションが生成するウィンドウが開かれることになります (補足 2 参照).


なお, このとき遠隔地から新たにウィンドウを開いてアプリケーションを実行する (ウィンドウを飛ばして実行する) ことを「X を飛ばす」と表現することがあります (以下そのように略記します).$ netstat -an

コマンドがインストールされていないとのメッセージが出た場合は,

== ssh を用いたリモートログインで X を飛ばす$ sudo apt install net-tools

X を飛ばすためにはでインストールを行ってから, ssh のリモートログインにおいて -X オプションを付ける必要があります再度実行してください.
つまり,


tcp/udp 通信において, 状態が $ ssh -X -l [リモートホストのユーザ名] [サーバ名LISTEN になっているポートが外部に対して
開いているポートになります.
予期しないポートが
or IP アドレス]LISTEN 状態になっていたら,
そのポートを監視しているプロセスを止めましょう.


もしくは== inetd 経由で呼び出されるデーモンの設定

デーモンは担当のポートを常時監視し,
要求が来たときにサービスを提供するプログラムを起動します.
しかし多くのデーモンが常に存在していると
それだけメモリ等の計算機リソースを消費します.
そこで計算機リソースの節約のためにポート監視専用のデーモン
$ ssh -X [サーバ名 or IP アドレス] -l [リモートホストのユーザ名] inetd を用意し,
基本的なネットワークサービス(ftp, telnet 等)は
inetd から呼び出される仕組みになっています.


inetd から呼び出されるサービスは
/etc/inetd.conf や
もしくは/etc/services に記述されており,
不必要な個所をコメントアウトすることでサービスの提供を止めることが可能です.
/etc/inetd.conf でコメントアウトしたサービス (デーモン)
は inetd から呼び出されなくなります.
また, /etc/services でコメントアウトしたポートはふさがり,
(デーモンが起動していても) 外部/内部からの要求を受け入れなくなります.


$ ssh -X [リモートホストのユーザ名]@[サーバ名 or IP アドレス]inetd 経由で呼び出されるデーモンの設定については, ここでは行いませんが参考までに((<"こちらのページ"|URL:/~itpass/exp/fy2024/240905/practice_linuxConfig/>))の「不要なネットワークサービスを止める」を見ておいて下さい.

です.:実習その3 情報実験機の現在の状況を確認して下さい. 設定自体は, 既に前回の実習において行なっているはずです.

X を飛ばすためには, ssh == 不要なソフトウェア(デーモン)通信経路に X の情報を通さなければなりません. その指定のためのオプションが -X です. アンインストール

inetd から呼び出されるプログラム以外は,をそれぞれ独自の設定によってアク
セス制限を行ないます.  不要なソフトウェア(デーモン)はアンインストールし
ておくのが最も安全でしょう.


では実際に試してみましょう.#((*この節の作業は実際には行わないこと!*))

:実習その#Debian の場合,
#例えば
1: ika でportmap というソフトウェアをアンインストールする際は,
#先ず
xeyes portmap 実行する提供する Debian パッケージを検索します.
#
#  $ dpkg -S portmap
#  portmap: /etc/init.d/portmap      <-- コロンの左がパッケージ名.
#                                        コロンの右がパッケージの提供する
#                                        ファイル名
#
#検索に引っかかったパッケージをアンインストールします
.
#
#  $ dpkg -r portmap                 <-- 設定ファイルは残したまま, remove
#         もしくは
#  $ dpkg --purge portmap            <-- パッケージが提供する
#                                        全てのファイルを削除
#
#
== 主要なネットワークデーモン/ネットワークサービス一覧(参考)


自宅から ssh に -X オプションを付けて ika にログインしてくださいポート番号とサービス名の対応は, /etc/services で見ることができます.
(MobaXTerm を用いているならば -X オプションを付ける必要はなく, いつものようにログインしてください.)


  [ユーザ名]@ika-itpass:~$
$ less /etc/services        

ここで X を用いたアプリケーション (新しいウィンドウを開くアプリケーション) を実行してみましょう.
そのようなアプリケーションのうちで入門時によく使われる定番に xeyes があります. xeyes はウィンドウ上にカーソルがある方向を示してくれるアプリケーションです.
下のように実行してみましょう
主なポートとサービスは以下の通りです.

  [# RT
  ポート番号,  サービス名, 解説
#           9,     discard, 過去の遺物
#          13,     daytime, 過去の遺物
          21,         ftp, ftp サーバ. これはパスワードが平文(暗号化されない)ので非常に危険. ssh を使うならば ftp は不要です(scp を使う). もしくは OTP(使い捨てパスワード)を導入すべき.
          22,         ssh, ssh 接続を受けつけるサーバ.
          23,      telnet, telnet 接続を受け付けるサーバ. これはパスワードが平文(暗号化されない)ので非常に危険. ssh を使うならば telnet は不要. もしくは OTP(使い捨てパスワード)を導入すべき.
          25,        smtp, メール配信(転送)を行なう. メールを送信するだけならば smtp ポートを開く必要はない.
#          37,        time, 過去の遺物
          53,      domain, ホスト名を返す(いわゆる DNS サーバ).
          70,      gopher, 旧式の文献検索サーバ.
          79,      finger, ホストにログインしているユーザの情報を返す.ネットワーク攻撃を行う指針となるので絶対にこのサービスを提供してはいけない. 試しに "$ finger @(ホスト名)" もしくは "$ finger (
ユーザ名)@(ホスト]@ika-itpass:~$ xeyes &)" してみよ.
          80,        http, www サーバ.
#          98,   linuxconf, ネットワーク経由でシステムを設定するためのサーバ. GUIベースや Web ベースの設定インターフェースを提供する.
         110,       pop-3, メール受信サービス. パスワードを要求するがそのパスワードは平文のままなので危険.
         111,      sunrpc, UNIX のポート間通信メカニズム
         113,        auth, 接続相手の情報を得るために使われるサーバ(ident). anonymous ftp 等で用いられる.
         119,        nntp, NetNews の相互配送につかわれるサーバ.
         123,         ntp, コンピュータの内部時計をネットワークを介して正しく調整するのに用いられる.
         139, netbios-ssn, samba(window と UNIX でのファイル共有)に使われる.
         143,        imap, メールサーバからクライアントにメールを渡すために用いられる. これはパスワードを暗号化する.
#         512,        exec, 過去の遺物
#         513,       login, 過去の遺物
#         514,       shell, 過去の遺物
         515,     printer, 印刷サーバ(lpr)
#         613,        cups, 印刷サーバ(cups)
        1178,     skkserv, 漢字変換プログラム skk の辞書サーバ
        2401,  cvspserver, cvs サーバ. cvs のリポジトリを公開する場合に使用する.
#        5680,       canna, 漢字変換プログラム canna のサーバ
        6000,         X11, X サーバ
       22273,        wnn6, 漢字変換プログラム wnn サーバ


自分の PC に「目玉」が表示されましたか?
表示されれば成功です.
= △アクセス制限(ところで "&" はどういう意味だったでしょうね? 忘れてしまったならば調べてみましょう.)フィルタリング)

もし「目玉」が表示されずにエラーが表示されるならばセキュリティ対策として, X を飛ばす設定ができていないことになります
アクセスできるホストを制限してみましょう
.
ssh に

ここでは設定が比較的簡単な
-X オプションを付けましたか?tcp_wrapper を用いてアクセス制限を行ないます.

tcp_wrapper は inetd 経由で呼び出されるサービスについて
アクセス制限を行なうためのプログラムです.
例えば /etc/inetd.conf に


:実習その  skkserv 2: 情報実験機でstream  tcp  nowait  nobody  /usr/sbin/tcpd xeyes を実行する./usr/sbin/dbskkd-cdb

自宅から ssh に -X オプションを付けて ika にログインしてください.と記述されている時に
(MobaXTerm を用いているならばinetd が -X オプションを付ける必要はなくskk サービスを呼び出す場合は, いつものようにログインしてください.)

  [ユーザ名]@ika-itpass:~$(1) skk サービス要求があると, inetd は tcpd を起動する.
  (2) tcpd は接続要求元が接続許可されているか判断する.
  (3) 許可されているならば, /usr/sbin/dbskkd-cdb を起動する
  (4) dbskkd-cdb が接続要求元に対して skk サービスを提供する


ここからさらに ssh に -X オプションを付けて情報実験機にログインしてみましょう.という手続きを踏んでいます.
その上で, 情報実験機で xeyes この時に「tcpd 実行してみましょう起動」し「接続の許可・不許可を判断する」プログラムが
tcp_wrapper です
.

  [ユーザ名]@johoXX-itpass:~$ xeyes &== △tcp_wrapper の設定

自分のtcp_wrapper によるアクセス制限は PC に「目玉」が表示されましたか?/etc/hosts.allow もしくは /etc/hosts.deny
によって設定します. どちらも書き方は以下の通りです.


もし表示されれば, 文字情報だけでなく X   デーモン名: アクセスを許可(ウィンドウ) の情報が, まずは情報実験機から itpass サーバに ssh を通して伝達され, そこからさらに ssh を通して自宅のもしくは禁止する)ホスト名(もしくは PC に無事に伝達されたわけです.IP アドレス).

例えば, /etc/hosts.allow(許可する内容を記述) において,

:実習その  # vi /etc/hosts.allow
  ALL: 127.0.0.1               <- [localhost からは全てのアクセスを許可]
  sshd: 10.35.19.x           <- [10.35.19.x からの
3: -X オプションの効果を確かめる.ssh 接続を許可]

自宅からつぎに ssh に -X オプションを付けて ika にログインしてください.
(MobaXTerm を用いているならば -X オプションを付ける必要はなく, いつものようにログインしてください.)
/etc/hosts.deny(許可しない内容記述) において

  # vi /etc/hosts.deny
  ALL: ALL                     <-
[ユーザ名]@ika-itpass:~$全てアクセスを禁止]

それから ssh に -X オプションを((*付けずに*))情報実験機にログインしてみましょう.
その上で, 情報実験機で xeyes を実行してみましょう.
と設定することで,

  [ユーザ名]@johoXX-itpass:~$ xeyes &* localhost からは全てアクセス許可
  * 10.35.19.x からの sshd へのアクセスは許可
  * それ以外のアクセスは全て拒否


自分のとなります.
hosts.allow と
PC に「目玉」hosts.deny で重複する内容がある場合は, hosts.allow 表示されましたか?優先されます.
また, hosts.allow と hosts.deny の両方に記述がないホストは, 接続が許可されます.


ここでは「目玉」は表示されないはずです.
どのようなエラーメッセージが表示されましたか?

X を飛ばす設定 (ssh に -X オプションを付ける) を忘れることは良くやってしまうミスです.
ここで表示されるエラーメッセージを是非頭の片隅に置いておきましょう.


:実習その4 同じ班の情報実験機からの 4: gnuplot でグラフを描く.

((<惑星学実験実習の基礎II|URL:https://itpass.scitec.kobe-u.ac.jp/hiki/hiki.cgi?惑星学実験実習の基礎II>)) では, gnuplot を使ってグラフを描く方法を学びました.
ここでは,
ssh で情報実験機にログインし gnuplot を使ってグラフを描いてみましょう.

gnuplot はインストールされていないと思いますので, まずはインストールしなければなりません.
下のようにしてインストールしましょう.

  $ sudo apt install gnuplot

インストール出来たら, 例えば「gnuplot 練習問題」から自分の好きなデータを選んでグラフを描いてみましょう.
上で実習したことを使えば, 自分の PC でそのグラフを見ることができるはずです.

gnuplot の使い方は, ((<<こちら>|URL:https://itpass.scitec.kobe-u.ac.jp/hiki/hiki.cgi?惑星学実験実習の基礎II>)) を見て思い出しましょう.


= 補足 1

本実習では, Windows PC を用いている人は MobaXTerm を用いて ika へログインすることを推奨しています.
そして, 上では, ssh のログインでは -X オプションを付ける必要があると書いている一方で, MobaXTerm
でのログインでは特別な指定は必要ないと書いています.
これは, MobaXTerm が ssh ログインの際に標準的に内部で -X オプション (に相当するもの) を使用しているためです.

= 補足 2

ここまでの説明では, ssh に -X を付けることで X を飛ばすことができると説明してきました.
しかし, X を飛ばす仕組みのすべてを説明してはいません.

Unix/Linux で採用している X Window System はサーバ・クライアント方式で動作しています. 「X サーバ」はディスプレイ・スピーカー・キーボード・マウスといった当該計算機の入出力を統括するソフトウェアです. これらの入出力機器を利用する個々のアプリケーションを, X サーバに対して依頼を出すものという意味で「X クライアント」と言います. 個々のアプリケーション, すなわち, X クライアントは X サーバに対してウィンドウをこれこれの位置にこれこれの大きさで表示しろだのキーボードからの入力を受け付けろだのの依頼を出すわけです. X サーバと X クライアントとのこういった様々な情報のやり取りを記すための手順を X プロトコルと言います. X Window System の特徴は, 手元の計算機内のみならず遠隔計算機との間でも区別なく情報のやりとりを行えるように X プロトコルを設計した, すなわち, ネットワーク透過な設計を実現した点にあります.

遠隔計算機上のアプリケーションが手元計算機のディスプレイにウィンドウを表示する場合には以下の三つの要素で構成されることになります.
* 遠隔計算機でアプリケーション, すなわち, X クライアントが動作する.
* 手元計算機でディスプレイを制御統括する X サーバが動作する.
* 手元計算機のサーバと遠隔計算機のクライアントとの間で X の通信が行われる.
遠隔計算機としての情報実験機や ika では, X クライアント (アプリケーション) が動作します.
ssh の -X オプションは, 手元計算機と遠隔計算機との ssh による安全な接続を介して, サーバとクライアントの間の X の通信を確立します. ssh は, X クライアントに対して, X サーバが動作する機材のIPアドレスやディスプレイ情報などを自動的に送ってくれます.  
しかし, X を飛ばすためにはもう一つの要素, 自分の PC 上で X サーバが動作していることが必要です.

macOS はそのベースが Unix に類する OS のため, X サーバがそもそも動作しています.
したがって, macOS から ssh に -X オプションを付けて情報実験機や ika にログインする場合には, 上の三つの要素が揃っています.

一方, Windows は Unix とは独自に作られた OS であり, それ自体では X サーバが動作していません (Windows は X プロトコルを解釈できません).
MobaXTerm は X サーバに相当する機能をあわせ持っていて, 遠隔計算機上のクライアントからの X サーバへの依頼を Windows が解釈できる依頼に翻訳してくれるため, それを用いることで上の三つの要素を揃えることができ, X を飛ばすことができるのです.

Windows 用のアプリケーションには, MobaXTerm 以外にも ssh で X の通信を伝達できるものがあります. 例えば ((<TeraTerm|URL:https://ttssh2.osdn.jp/>)) や ((<Putty|URL:https://www.putty.org/>)) というアプリケーションは, 設定によって ssh を通した X の通信が可能です.
しかし, TeraTerm や Putty は, それ自身が X サーバの機能を持つわけではないため, それだけでは X を飛ばすための三つの要素を揃えることができません.
三つの要素を揃えるためには, Windows 上で X サーバの機能を実現する別のアプリケーションが必要です.

X サーバの機能を果たす Windows 用のアプリケーションもいくつか作られています. ((<Xming|URL:http://www.straightrunning.com/XmingNotes/>)) はその一つです.
したがって, Xming を使いつつ, X の通信を伝達できる設定で TeraTerm や Putty を使えば三つの要素を揃えることができて X を飛ばすことができます.

(TeraTerm + Xming や Putty + Xming より MobaXTerm 一つのみで済む方が簡単なので, 本実習では MobaXTerm の利用を推奨しています.)


#= 補足 3
#
#上で, X Window System がサーバ・クライアント方式で動作していることを書きました.
#例えば, 手元の PC (Windows でも macOS でも) から ika に ssh でログインして, ika で xeyes を実行することを考えましょう.
#このとき, 手元の PC と ika のどちらがサーバでどちらがクライアントでしょうか?
#
#多くの人は, xeyes が動作する ika がサーバで, その動作の結果である「目玉」が表示される手元の PC がクライアントと考えるでしょう.
#多くのサーバ・クライアント方式の考え方ではその通りで, サービスを提供する側 (上の場合は xeyes が動作している計算機) をサーバ, サービスを提供されている側 (上の場合は「目玉」が表示されている計算機) をクライアントと呼びます.
#
#しかし, X Window System の設計では逆です.
#上の例では, 手元の PC がサーバで, ika がクライアントとなります.
#これは, 手元の PC で X が動作しており, ika は X のアプリケーションを提供しているからです.
#
#詳しくは, 例えば((<<ここ>|URL:http://www.astec-x.com/FAQ/aboutx.html>))を参照すると良いかもしれません
アクセスを制限してみて下さい.

実習その4 では, 以下の手順で実習を行ないます.

= 補足 3(1) ssh で同じ班の情報実験機からログインを試みてもらう. 成功したらログアウトしてもらう.
(2) いま使っている情報実験機において, sshd に対してアクセス制限を設定する.
(3) 同じ班の情報実験機からのログインが禁止されていることを確認する


上の説明では((*実習その4 が終了した後, 手元の PC から情報実験機や ika に遠隔ログインする状況を想定しています.
つまり, X Window System
sshd サーバとクライアントが別の計算機にある状況です. アクセス制限を解除しておいて下さい.*))

しかし, 仕組みとしては, このサーバとクライアントは別の計算機にある必要は無く, 同じ計算機上にある場合でも全く同様に「通信」して機能しています.
#実際, 一つの計算機の中でも X のサーバとクライアントは別のアプリケーション (プロセス) として起動していて, 一つの計算機の中でサーバとクライアントが通信することでウィンドウが動作しています.

もちろん, この時にはサーバとクライアントの間の通信は ssh を通す必要はありませんので, その分だけ動作が少し「簡単」かもしれませんね.== △さらに進んだ情報: xinetd, iptables(Linux), ipfw(FreeBSD)

ここでは inetd 経由で呼び出されるデーモンについてのアクセス制限を行ないました.
ですが, inetd を介さないデーモンについては,
各々のデーモン毎にアクセス制限を行う必要があり,
tcp_wrapper によるアクセス制限を行なう事ができません.
inetd から呼びだされないデーモンについても
tcp_wrapper によるアクセス制限を行ないたい場合には,
inetd の発展版である xinetd を用います.
#xinetd については ((<http://www.xinetd.org/|URL:http://www.xinetd.org/>)) を参照して下さい.
## ページが閉鎖されてしまったようなのでコメントアウト
#((<"xinetd FAQ の日本語訳"|URL:http://www.yamdas.org/column/technique/xinetd_faqj.html>)) も参考になるでしょう.
((<"xinetd FAQ の日本語訳"|URL:http://www.yamdas.org/column/technique/xinetd_faqj.html>)) などを参考にしてください.


また, inetd や xinetd といったプログラムレベルでのアクセス制限ではなく,
カーネルレベルでアクセス制限を行なう(パケットをフィルタリングする)仕組みとして,
Linux では iptables, FreeBSD では ipfw などがあります.
iptables や ipfw は大変高機能ですが, ここでは詳しくは触れません.
詳細については
((<"netfilter/iptables project homepage"|URL:http://www.netfilter.org/>))
等を参照して下さい.



[((<"2024 スケジュール表・各回資料(09/05)"|[Exp2024]スケジュール表・各回資料#09-2F05>))]