*インターネットソフトウェア(3日目) セキュリティ演習(OS&サーバー編) [#w8cc808e]
 
 【目次】
 
 #contents
 
 **演習用仮想マシンの利用について [#yf987f2c]
 
 -今回の講義のために、受講生1人につき演習用VM(__V__irtual __M__achine)を1つ用意しています。
 
 -演習用VMの仕様は下記の通りです。
 
 --OS(Linuxディストリビューション): CentOS7
 --CPU: 1core
 --Memory: 1GB
 --HDD: 4GB
 
 -受講生ごとに割り当てる演習用VMは、下記の通りです。
 
 |No.|学籍番号|ホスト名(FQDN)|IPv4アドレス|
 |1|125761H|is2017-1.st.ie.u-ryukyu.ac.jp|10.0.6.1|
 |2|135753B|is2017-2.st.ie.u-ryukyu.ac.jp|10.0.6.2|
 |3|135771K|is2017-3.st.ie.u-ryukyu.ac.jp|10.0.6.3|
 |4|135772H|is2017-4.st.ie.u-ryukyu.ac.jp|10.0.6.4|
 |5|145165B|is2017-5.st.ie.u-ryukyu.ac.jp|10.0.6.5|
 |6|145702B|is2017-6.st.ie.u-ryukyu.ac.jp|10.0.6.6|
 |7|145705F|is2017-7.st.ie.u-ryukyu.ac.jp|10.0.6.7|
 |8|145707B|is2017-8.st.ie.u-ryukyu.ac.jp|10.0.6.8|
 |9|145723D|is2017-9.st.ie.u-ryukyu.ac.jp|10.0.6.9|
 |10|145724B|is2017-10.st.ie.u-ryukyu.ac.jp|10.0.6.10|
 |11|145726J|is2017-11.st.ie.u-ryukyu.ac.jp|10.0.6.11|
 |12|145741B|is2017-12.st.ie.u-ryukyu.ac.jp|10.0.6.12|
 |13|145760J|is2017-13.st.ie.u-ryukyu.ac.jp|10.0.6.13|
 |14|155701H|is2017-14.st.ie.u-ryukyu.ac.jp|10.0.6.14|
 |15|155702F|is2017-15.st.ie.u-ryukyu.ac.jp|10.0.6.15|
 |16|155703D|is2017-16.st.ie.u-ryukyu.ac.jp|10.0.6.16|
 |17|155712C|is2017-17.st.ie.u-ryukyu.ac.jp|10.0.6.17|
 |18|155719A|is2017-18.st.ie.u-ryukyu.ac.jp|10.0.6.18|
 |19|155723J|is2017-19.st.ie.u-ryukyu.ac.jp|10.0.6.19|
 |20|155728K|is2017-20.st.ie.u-ryukyu.ac.jp|10.0.6.20|
 |21|155738G|is2017-21.st.ie.u-ryukyu.ac.jp|10.0.6.21|
 |22|155743C|is2017-22.st.ie.u-ryukyu.ac.jp|10.0.6.22|
 |23|155765D|is2017-23.st.ie.u-ryukyu.ac.jp|10.0.6.23|
 |24|165711K|is2017-24.st.ie.u-ryukyu.ac.jp|10.0.6.24|
 |25|165714D|is2017-25.st.ie.u-ryukyu.ac.jp|10.0.6.25|
 |26|165719E|is2017-26.st.ie.u-ryukyu.ac.jp|10.0.6.26|
 |27|165721G|is2017-27.st.ie.u-ryukyu.ac.jp|10.0.6.27|
 |28|165726H|is2017-28.st.ie.u-ryukyu.ac.jp|10.0.6.28|
 |29|165730F|is2017-29.st.ie.u-ryukyu.ac.jp|10.0.6.29|
 |30|165734J|is2017-30.st.ie.u-ryukyu.ac.jp|10.0.6.30|
 |31|165741B|is2017-31.st.ie.u-ryukyu.ac.jp|10.0.6.31|
 |32|165748J|is2017-32.st.ie.u-ryukyu.ac.jp|10.0.6.32|
 |33|165754C|is2017-33.st.ie.u-ryukyu.ac.jp|10.0.6.33|
 |34|165759D|is2017-34.st.ie.u-ryukyu.ac.jp|10.0.6.34|
 
 
 -CentOS7に追加したパッケージ(この講義に関係あるもの)
 
 --サーバー系
 
 ---httpd *HTTPサーバー(Apache)
 ---dovecot *POP3/IMAPサーバー
 ---bind *DNSサーバー
 ---xinetd *インターネットスーパーサーバー
 
 --ツール・コマンド系
 
 ---nmap *ポートスキャンツール
 ---tcpdump *パケットキャプチャツール
 ---wireshark *パケットキャプチャツール
 ---net-tools *ifconfigなどの旧形式のネットワーク管理コマンド群
 ---bind-utils *hostコマンドなどのDNS(bind)クライアントコマンド群
 ---lsof *lsofコマンド
 
 -上記の追加パッケージは、以下のコマンドでインストールしました。
 
  # yum install (パッケージ名)
  (例)
  # yum install nmap
 
 -起動サービスについて
 
 --CentOS7の初期インストール後に、下記のコマンドを実行して、httpd(apache)、smtp(postfix)、pop3&imap(dovecot)、named(bind)、xinetdサービスを有効化し、OS起動時に自動起動するようにしています。
 
  # systemctl start httpd.service
  # systemctl start postfix.service
  # systemctl start dovecot.service
  # systemctl start named.service
  # systemctl start xinetd.service
  
  # systemctl enable httpd.service
  # systemctl enable postfix.service
  # systemctl enable dovecot.service
  # systemctl enable named.service
  # systemctl enable xinetd.service
 
 -管理者アカウント"root"について
 
 --演習用VMには管理者アカウント"root"があります。
 
 --"root"アカウントのパスワードは、講義中に示します。
 
 --__"root"アカウントのパスワードは、下記のコマンドを実行して、速やかに変更して下さい。__
 
  # passwd
 
 --変更するパスワードは、__半角の英文字(大文字)・英文字(小文字)・英数字・記号が全て含まれた8文字以上の文字列__にして下さい。(パスワード例: 5SPsh0s&)
 
 -講師用アカウント"auser"について
 
 --演習用VMには講師用アカウント"auser"があります。
 
 --"auser"アカウントのパスワードは非公開です。__勝手にパスワードを変更しないこと。__
 
 --"auser"アカウントは、講師(長田)が各自の演習用VMにアクセスするためのユーザーです。
 
 -ユーザーの作成について
 
 --下記のコマンドを実行して、ユーザーを作成して下さい。
 
 --作成するユーザーのユーザー名(ユーザーID)は、各自の学科システムアカウントと同じものとします。(例: e165700)
 
  # useradd (ユーザーID)
  (例)
  # useradd e165700
 
 --次に、下記のコマンドを実行して、作成したユーザーのパスワードを設定して下さい。
 
  # passwd (ユーザーID)
  (例)
  # passwd e165700
 
 -CentOS7のアップデートについて
 
 --CentOS7の初期インストール後に、下記のコマンドを実行してアップデートしています。
 
  # yum -y update
 
 --講義開始時点で最新アップデートがリリースされている可能性があるため、"root"アカウントでログイン後に、上記のコマンドを実行してアップデートして下さい。
 
 -その他
 
 --CentOS7にデフォルトで設定されているyumリポジトリ以外に、"EPEL"リポジトリを追加しています。
 
 --ここまでの作業を全て行ったら、下記のコマンドを実行してOSを再起動して下さい。
 
  # reboot
 
 **基本的なセキュリティ設定 [#pe06016b]
 
 ***不要サービスの停止とファイアウォールの設定 [#u8e46dfa]
 
 -OSが起動して"root"アカウントでログインしたら、下記のコマンドを実行して、現在オープンしているポートを確認します。
 
  # netstat -l
  または、
  # netstat -ln (ポート番号からサービス名の変換を行わない)
 
 -実行結果は下記の通りとなり、"pop3(tcp:110)","imap(tcp:143)","domain(tcp&udp:53)","ssh(tcp:22)","rndc(tcp&udp:953)","smtp(tcp:25)","imaps(tcp:993)","pop3s(tcp995)",その他いくつかのudpポートがオープンしていることが分かります。
 
 -また、演習用VMはIPv4, IPv6の両方に対応しているため、TCP/IPv4, TCP/IPv6の両方のポートがオープンしていることが分かります。
 
  [root@localhost ~]# netstat -l
  Active Internet connections (only servers)
  Proto Recv-Q Send-Q Local Address           Foreign Address         State
  tcp        0      0 0.0.0.0:pop3            0.0.0.0:*               LISTEN
  tcp        0      0 0.0.0.0:imap            0.0.0.0:*               LISTEN
  tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN
  tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
  tcp        0      0 localhost:rndc          0.0.0.0:*               LISTEN
  tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
  tcp        0      0 0.0.0.0:imaps           0.0.0.0:*               LISTEN
  tcp        0      0 0.0.0.0:pop3s           0.0.0.0:*               LISTEN
  tcp6       0      0 [::]:pop3               [::]:*                  LISTEN
  tcp6       0      0 [::]:imap               [::]:*                  LISTEN
  tcp6       0      0 [::]:http               [::]:*                  LISTEN
  tcp6       0      0 localhost:domain        [::]:*                  LISTEN
  tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
  tcp6       0      0 localhost:rndc          [::]:*                  LISTEN
  tcp6       0      0 localhost:smtp          [::]:*                  LISTEN
  tcp6       0      0 [::]:imaps              [::]:*                  LISTEN
  tcp6       0      0 [::]:pop3s              [::]:*                  LISTEN
  udp        0      0 localhost:323           0.0.0.0:*
  udp        0      0 localhost:domain        0.0.0.0:*
  udp        0      0 0.0.0.0:bootpc          0.0.0.0:*
  udp        0      0 0.0.0.0:13984           0.0.0.0:*
  udp6       0      0 [::]:50913              [::]:*
  udp6       0      0 localhost:323           [::]:*
  udp6       0      0 localhost:domain        [::]:*
 
 -ここで、上記のオープンしているポートが、どのプログラムから使用されているかを調べます。
 
 -例えば、pop3(tcp:110)を使用しているプログラムを調べる場合は、下記のコマンドを実行します。
 
  # lsof -i:110
 
 実行結果は下記の通りとなり、dovecotプロセスがポート(tcp:110)を使用していることが分かります。
 
  [root@localhost ~]# lsof -i :110
  COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  dovecot 13982 root   23u  IPv4  84492      0t0  TCP *:pop3 (LISTEN)
  dovecot 13982 root   24u  IPv6  84493      0t0  TCP *:pop3 (LISTEN)
 
 -ここで、オープンしているポート(サービス)が、必要であるかどうかを検討します。
 
 -もし、不要なポート(サービス)がオープンしているのであれば、そのポートはクローズする必要があります。
 
 -ポートをクローズする方法は、下記の2つがあります。
 
 --ポートを使用しているプロセスを停止する。
 
 --ファイアウォールを設定して、そのポートにアクセスできなくする。
 
 -まず、前者の方法は、下記のコマンドを実行してプロセスを停止するとともに、OS起動時に自動起動しないようにします。
 
  # systemctl stop dovecot.service
  # systemctl disable dovecot.service
 
 --ただし、上記の方法では、dovecotプロセスが提供しているpop3以外のサービス(pop3s,imap,imaps)も停止してしまいます。
 
 -次に、後者の方法は、CentOS7のファイアウォール機能を利用します。
 
 -まず、下記のコマンドを実行して、ファイアウォール機能が有効な状態であるか確認します。
 
  # systemctl status firewalld
 
 -下記の結果が返ってくれば、ファイアウォール機能は有効です。
 
  Active: active (running)
 
 -下記のコマンドを実行して、ファイアウォールの設定が適用されるゾーンを確認します。
 
  [root@localhost ~]# firewall-cmd --get-active-zones
  public
    interfaces: eth0
 
 -上記の結果より、"public"ゾーンが定義されており、"public"ゾーンの対象インタフェースは"eth0"であることが分かります。
 
 -下記のコマンドを実行して、"pubclic"ゾーンに定義されているサービスを確認します。
 
  [root@localhost ~]# firewall-cmd --list-services --zone=public
  http dns pop3s imaps pop3 ssh https imap
 
 -上記の結果より、表示された各サービスが公開されている(外部からアクセス可能)ことが分かります。
 
 -ここで、下記のコマンドを実行して、外部からのpop3サービスアクセスを拒否してみます。(注意:"ssh"を拒否するとVMにsshアクセスできなくなるので、sshは拒否しないこと)
 
  # firewall-cmd --remove-service=pop3 --zone=public
 
 -下記のコマンドを実行して、設定を有効化します。
 
  # firewall-cmd --reload
 
 -再び下記のコマンドを実行して、表示結果から"pop3"がなくなっていればok。
 
  [root@localhost ~]# firewall-cmd --list-services --zone=public
  http dns pop3s imaps ssh https imap
 
 -上記で設定したファイアウォール設定をOS再起動後も有効にしたい場合は、下記の通り、firewall-cmdに--permanentオプションをつけてを実行します。
 
  # firewall-cmd --permanent --add-service=(サービス名) --zone=public
  # firewall-cmd --permanent --remove-service=(サービス名) --zone=public
 
 -さらに、特定のソースアドレスからのアクセスを拒否するには、下記の通りコマンドを実行します。
 
  # firewall-cmd --zone=drop --add-source=192.168.0.0/24
 
 -この他に、ファイアウォール機能を利用することで、ゾーンごとに特定のソースアドレスから、特定のサービスへのアクセスを制限するなど、様々なアクセス制限を行うことができます。
 
 **サービスごとのセキュリティ設定 [#u1fc0397]
 
 ***その前に、sudoers設定 [#f017e443]
 
 -Linuxでは、一般ユーザーが管理者(root)権限でコマンド実行を行えるようにするための"sudo"コマンドがあります。
 
 -通常のOSのオペレーションでは、一般ユーザーでログインし、管理者権限でコマンドを実行する必要があるときのみ、必要に応じてsudoコマンドでコマンド実行します。
 
 -例えば、rootユーザーしか開けないファイルを一般ユーザーが開くには、下記の通り、実行したいコマンドの前にsudoコマンドを付けて実行します。
 
  # sudo vi hogehoge.txt
 
 -sudoコマンドを実行できる一般ユーザーは、/etc/sudoersで設定する必要があります。
 
 -例えば、"e165700"ユーザーに、管理者(root)権限で全てのコマンドを実行できるようにするには、/etc/sudoersに次の設定を加えます。
 
  e165700  ALL=(ALL)       ALL
 
 -この他に、/etc/sudoersの設定によって、特定のユーザーが管理者権限で実行を許可するコマンドを指定(限定)したり、グループ単位で制限をすることができます。
 
 ***SSH [#bf85ad86]
 
 -ssh(__S__ecure __SH__ell)は、Linuxにシェルログインするための仕組みで、sshサーバーとsshクライアントで構成されます。 
 
 -CentOS7では初期インストール後は、SSHサーバーが自動起動するようになっており、外部からsshアクセスできるようになっています。
 
 -しかし、SSHサーバーのデフォルト設定では、下記のようなセキュリティ上好ましくない設定があります。
 
 ++rootユーザーでアクセスができる。
 ++パスワード無しユーザーがアクセスできる。
 ++鍵認証のみでアクセスできるようになっていない(パスワード認証ができる)。(※)
 ++アクセスできるユーザーが制限されていない。(※)
 
 -/etc/ssh/sshd_config を下記の通り修正することで、上記の問題を解決できます。
 
  (i変更前)          
  PermitRootLogin yes
  (i変更後)
  PermitRootLogin no
  又は
  PermitRootLogin without-password
  
  (ii変更前)
  PermitEmptyPasswords yes
  (ii変更後)
  PermitEmptyPasswords no
  
  (iii変更前)
  PasswordAuthentication yes
  (iii変更後)
  PasswordAuthentication no
  
  (iv変更前)
  なし
  (iv変更後)
  AllowUsers (アクセスを許可するユーザーID)
 
 -ここで、iiiについて、鍵認証は、公開鍵暗号方式で行う認証のことです。
 
 -公開鍵暗号方式での認証を行うには、秘密鍵と公開鍵の2種類のペア鍵が必要です。(ペア鍵の作成方法は、講義中に実演しながら説明します)
 
 -鍵ペアの作成方法には、下記の2つのパターンがあります。
 
 --サーバー側又はクライアント側の一方で鍵ペアを作成し、もう一方に作成した秘密鍵を登録して使用するケース (※)
 --サーバー側又はクライアント側の一方で鍵ペアを作成し、もう一方に作成した秘密鍵を登録するケース (※)
 
 --サーバー側及びクライアント側の両方で鍵ペアを作成し、サーバー側にクライアントの公開鍵を登録して使用するケース
 --サーバー側及びクライアント側の両方で鍵ペアを作成し、サーバー側にクライアントの公開鍵を登録するケース
 
 -これで、クライアントからサーバーに、鍵認証でsshアクセスできるようになります。
 
 ***HTTP(Apache) [#f2312faf]
 
 -講義時間によって取り扱いを判断します。
 
 ***SMTP(Postfix) [#t5d9ae70]
 
 -講義時間によって取り扱いを判断します。
 
 ***POP3/IMAP(Dovecot) [#c1030529]
 
 -講義時間によって取り扱いを判断します。
 
 ***DNS(Bind) [#q619127f]
 
 -講義時間によって取り扱いを判断します。
 
 ***TCP Wrappers [#h40acd6c]
 
 -講義時間によって取り扱いを判断します。
 
 ***xinetd [#o6ae84a2]
 
 -講義時間によって取り扱いを判断します。
 
 #back(Back,right,0,)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS