ようこそNICのホームページへ(なが〜い試運転中)   
HP パソコン 健康 落語 海外 思うまま 電子工作

サーバーのセキュリティー対策 (2017/8/17)

Last update:2017/09/20    Build:2017/08/17

ubuntuサーバー(xs36v4)のセキュリティ対策をメモしておく。
設定した時期がばらばらなので、概ねの時期を明示しておく。

大まかなネットワーク構成 詳しくはここ(リンク)

 インターネット <−−> NTTルーター <−−> サーバー
                      <−−> buffaloルーター <−−> (有線)メインPC
                      <−−> ソフトバンクルーター(主としてWIFI)
 
 サーバーxs36v4導入 2015/11/15

 ネット接続変更      2016/02/10
  NTT西フレッツ光プレミアム
    →  ソフトバンク光IPv6高速ハイブリッド IPv6 IPoE + IPv4(回線:NTT西フレッツ光隼2)


1.NTTルーターのアクセス制限(2016/02/10〜)

 1)IPv6
  ソフトバンクのルーターがこの下にあるため全て通過。
  ソフトバンクの契約 IPv6(IPoE)+IPv4
  回線:NTT西フレッツ光隼2 光電話あり

 2)IPv4
  サーバーのダイナミックDNSの関係があり、NTTルーターの設定は
   メイン回線 ソフトバンクへ接続
   サブ回線2 niftyに接続(サーバーへの接続関係のみ使用に)

  外部から内部へ HTTP、HTTPS、sshのポートを開ける
  これらのポート経由のアクセスは全てサーバー宛てとする
  内部から外部へ 基本的に全て通過 (netBIOS等不通過)

2.サーバーの設定(2016/02/10〜)

 IPv4のみ受け付ける設定とした(下記、トラブル参照)
 データリンク層での設定 ・・ ebtables       ・・ 導入していない
 ネットワーク層での設定 ・・ iptables ip6tables  ・・ 今後導入
 スーパーサーバー(xinetd)の設定 hosts.allow hosts.denyの設定
 sshの認証  公開鍵認証導入 及びユーザー限定

1)hosts.allowの設定

# /etc/hosts.allow: list of hosts that are allowed to access the system.
#                   See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: LOCAL @some_netgroup
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
#
# If you're going to protect the portmapper use the name "rpcbind" for the
# daemon name. See rpcbind(8) and rpc.mountd(8) for further information.
#
all : 127.0.0.1             #ローカルホストからはすべて許可
in.telnetd : 192.168.0.0/255.255.0.0   #イントラネットからのみアクセス可能


# 2017/7/28 changed
sshd:all

2)hosts.denyの設定

# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: some.host.name, .some.domain
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# If you're going to protect the portmapper use the name "rpcbind" for the
# daemon name. See rpcbind(8) and rpc.mountd(8) for further information.
#
# The PARANOID wildcard matches any host whose name does not match its
# address.
#
# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
 ALL: PARANOID
ALL : ALL

3)公開鍵認証(2017/7/26頃)別途


4)sshのユーザー制限とポート番号変更

  /etc/ssh/sshd_config に
   AllowUser user1 user2 user3
   と限定した。
  /etc/services ファイルのsshのポート番号変更

   22 → ○○○ へ変更

5)xinetdの導入(2015/10/27頃)

  xinetd経由(別途)で起動することでhosts.allow hosts.denyを
  参照することとした。
           

6)iptables ip6tables 設定(2017/07/30頃〜2017/8/19頃)

  IPv6は全てDROP
root@ubuntu-server-nic:/etc/iptables# ip6tables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all      anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
DROP       all      anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all      anywhere             anywhere            

(追記 2017/09/20 ここから)
IPv6はディフォルトでDROPすることとした。
root@ubuntu-server-nic:/etc/iptables# ip6tables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
(追記 2017/09/20 ここまで)

  IPv4はHTTP、HTTPS、sshのポート通過させる
  転送はしない、全てDROP
root@ubuntu-server-nic:/etc/iptables# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:telnet
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:pop3s
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:imap2
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:imaps
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     udp  --  anywhere             anywhere             udp spt:domain
ACCEPT     udp  --  anywhere             anywhere             udp spt:ntp
DROP       all  --  anywhere             anywhere              <= ここ

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
root@ubuntu-server-nic:/etc/iptables#
iptablesを操作するために iptables-persistent を導入する。
apt-get install iptables-persistent
/etc/iptables にファイルが2つ作成される。IPv4用とIPv6用のファイル。
-rw-r--r--   1 root root 1729  8月 17 21:33 rules.v4
-rw-r--r--   1 root root  238  8月 17 18:43 rules.v6
設定ファイル /etc/iptables/rules.v4は
cat rules.v4
# Generated by iptables-save v1.4.21 on Thu Aug 17 17:11:08 2017
*filter
:INPUT ACCEPT [62058:43579543]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [164298:29854704]
-A FORWARD -j DROP
# Completed on Thu Aug 17 17:11:08 2017
# Allows local I/O access
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
# Allows established access
-A INPUT -m state --state ESTABLISHED,RELATED -j  ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j  ACCEPT
# Allows HTTP HTTPS access
-A INPUT -p tcp -m state --state NEW --dport 80  -j  ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 443  -j  ACCEPT
# Allows telnet access
-A INPUT -p tcp -m state --state NEW --dport 23  -j  ACCEPT
# Allows SSH access
-A INPUT -p tcp -m state --state NEW --dport ○○  -j  ACCEPT
# Allows pop3 & pops
-A INPUT -p tcp -m state --state NEW --dport 110  -j  ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 995  -j  ACCEPT
# Allow IMAP & IMAP(SSL)
-A INPUT -p tcp -m state --state NEW --dport 143  -j  ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 993  -j  ACCEPT
# Allows ping access
-A INPUT -p icmp -j ACCEPT
# Allows DNS access
#-A INPUT -p udp -s <送信元dnsサーバー名> --sport 53  -j  ACCEPT
#-A OUTPUT -p udp -d <宛先dnsサーバー名> --dport 53  -j  ACCEPT
-A INPUT -p udp  --sport 53  -j  ACCEPT
#-A OUTPUT -p udp  --dport 53  -j  ACCEPT
# Allows NTP access
#-A INPUT -p udp -s <送信元NTPサーバー名> --sport 123  -j  ACCEPT
#-A OUTPUT -p udp -d <宛先NTPサーバー名> --dport 123  -j  ACCEPT
-A INPUT -p udp  --sport 123  -j  ACCEPT
#-A OUTPUT -p udp  --dport 123  -j  ACCEPT

# Allows MySQL access
#-I INPUT 6 -m state --state NEW -p tcp --dport ○○ -j ACCEPT

# deny access
-A INPUT -j DROP
COMMIT
設定ファイル /etc/iptables/rules.v6は
cat rules.v6
# Generated by ip6tables-save v1.4.21 on Thu Aug 17 18:43:05 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j DROP
COMMIT
(追記 2017/09/20 ここから)
IPv6はディフォルトでDROPすることとした。そのファイル
root@ubuntu-server-nic:/etc/iptables# cat rules.v6
# Generated by ip6tables-save v1.4.21 on Thu Aug 17 18:43:05 2017
*filter
#:INPUT ACCEPT [0:0]
#:FORWARD ACCEPT [0:0]
#:OUTPUT ACCEPT [0:0]
#-A INPUT -j DROP
#-A FORWARD -j DROP
#-A OUTPUT -j DROP
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
COMMIT
(追記 2017/09/20 ここまで)


iptables をリスタートするには
service iptables-persistent restart
設定を保存するには
/etc/init.d/iptables-persistent save
設定をリロードするには
/etc/init.d/iptables-persistent reload
この場合エラーがあっても警告されなかった。始めわからず、うまくiptablesが動作しなかった。 下の直接リロードする方法だとエラーが警告され、しかも行番号まででた。その箇所をチェックすると空白が 半角ではなくて全角で入力されていた。修正してOK。

直接リロードするするには
iptables-restore < /etc/iptables/rules.v4
iptables を表示するには
iptables --list   または iptables -L
ip6tables --list  または ip6tables -L

7)/etc/pam.d/ pam認証しないものを全て拒否する設定にする  ??

  r系コマンドのための認証設定 pamを通さないもの全て拒否

  /etc/pam.d/other というファイルがあり、ここで全て拒否するようだが、現時点で未設定。
  
root@ubuntu-server-nic:/etc/pam.d# ll
drwxr-xr-x   2 root root 4096  6月 20 22:40 ./
drwxr-xr-x 101 root root 4096  8月 15 00:21 ../
-rw-r--r--   1 root root  179  5月 14  2015 accountsservice
-rw-rw-r--   1 root root  220 10月 21  2013 atd
-rw-r--r--   1 root root  384  2月 17  2014 chfn
-rw-r--r--   1 root root   92  2月 17  2014 chpasswd
-rw-r--r--   1 root root  581  2月 17  2014 chsh
-rw-r--r--   1 root root 1208  6月 20 22:19 common-account
-rw-r--r--   1 root root 1249  6月 20 22:19 common-auth
-rw-r--r--   1 root root 1440  6月 20 22:19 common-password
-rw-r--r--   1 root root 1470  6月 20 22:19 common-session
-rw-r--r--   1 root root 1435  6月 20 22:19 common-session-noninteractive
-rw-r--r--   1 root root  527  2月  9  2013 cron
-rw-r--r--   1 root root   81  3月  7  2014 dovecot
-rw-r--r--   1 root root   70  1月 24  2014 kermit
-rw-r--r--   1 root root 4788  2月 17  2014 login
-rw-r--r--   1 root root   92  2月 17  2014 newusers
-rw-r--r--   1 root root  520  2月  1  2014 other   <== ここ
-rw-r--r--   1 root root   92  2月 17  2014 passwd
-rw-r--r--   1 root root  255  3月  5  2015 polkit-1
-rw-r--r--   1 root root  168  4月 22  2015 ppp
-rw-r--r--   1 root root 2139  5月  2  2014 sshd
-rw-r--r--   1 root root 2305  2月 17  2014 su
-rw-r--r--   1 root root  239  2月 11  2014 sudo
  
root@ubuntu-server-nic:/etc/pam.d# cat other
#
# /etc/pam.d/other - specify the PAM fallback behaviour
#
# Note that this file is used for any unspecified service; for example
#if /etc/pam.d/cron  specifies no session modules but cron calls
#pam_open_session, the session module out of /etc/pam.d/other is
#used.  If you really want nothing to happen then use pam_permit.so or
#pam_deny.so as appropriate.

# We fall back to the system default in /etc/pam.d/common-*
# 

@include common-auth
@include common-account
@include common-password
@include common-session

8)トラブル対応(2016/04/09頃)

 サーバー(xs36v4)がIPv6で繋がっている。→ ダイナミックDNSが使えない。
 == 現象 ==
 ダイナミックDNSが使えない現象が発生。現在3種のダイナミックDNSをつかっているが、  niftyのダイナミックDNSのみ使えない。調べていくとIPv6のアドレスが表示される。

 これが原因のようだ。
 最初原因がわからなくてniftyに問い合わせたところ、IPv6で繋がっているのでそのような設定をしているのではないかとの回答。  よく思い返すと、
 最初、NTTのルーターでniftyにIPv4のPPPoEで接続した。このときIPv6のPPPoEも自動設定された。  この時点でIPv6のアドレスが自動で与えられたようだ。ダイナミックDNSの関係があり、ソフトバンクへ変更後も  niftyのインターネット接続もそのまま継続している。  メインプロバイダー接続をソフトバンクの回線に切替PPPoE(IPv4)接続をしても同じ現象がでる。  ソフトバンクの指示通り、NTTルーターの設定を
メイン    ソフトバンクへ    IPv4    PPPoE    接続設定
   IPv6    PPPoE    接続しない
   IPv6    IPoE    接続設定
サブ2    niftyへ    IPv4    PPPoE    接続設定
 のように設定した。
 また、サーバーがIPv6対応になっていたので、IPv6対応を止めた。
 これでniftyもIPv4接続するようになり、ダイナミックDNSも使えるようになった。


   メインで使っているPCはNTTルーターの下にbuffaloのルーターを配した下に繋いでいて、いわゆる二重ルーターになっている。  あるときメインのPCのアドレスを見ると、一時アドレスも含めてIPv6のアドレスを持っている。  windows7はデフォルトでIPv6対応になっているようだ。しかし  buffaloのルーターはIPv6はパススルーしない設定になっている。いろいろと設定を探したが、これしかないようだ。  どの設定にしても、IPv6で繋がってしまう。
 buffaloのサポートにメールで設定を問い合わせた時の回答がこれ。
 
IPv4/IPv6デュアルスタック環境下でのIPv6の透過について

 誠に恐れ入りますが、ご利用いただいておられます、
 通信回線やプロバイダ機器側の仕様で、
 IPv4/IPv6デュアルスタックに対応するなど、
 IPv6のアドレス情報をパケット化し、
 IPv4で動作するネットワークに透過させることが可能な
 回線機器(プロバイダ提供のモデム/ルーター機器)や通信回線をご利用の場合、
 回線機器側で、IPv6を停止する、「IPv6ブリッジ、IPv6ルーターの停止」が行えない場合は、
 弊社の「WZR-HP-G300NH」などの配下のルーター機器も、
 IPv6のルーター機器ではないことから、
 IPv6パススルー機能を停止されても、
 IPv4の情報として届けられたIPv6アドレスを、
 配下のネットワークに届ける動作となりますので、
 パソコン側で、IPv6を取得することとなるようでございます。

 ※弊社でお調べできました範囲での内容となりますが、
  NTT東日本/西日本(NTT東西)の
  「フレッツ 光ネクスト」や「Bフレッツ」などをご利用の場合、
  IPv4インターネット接続サービスだけを契約しているユーザーに対しても、
  「フレッツ網内のサービスだけに利用する、
  IPv6インターネットには接続できないIPv6アドレス」を
  割り当てするために、発生している内容のようでございます。
  なお、本件につきましては、弊社提供の通信サービスではございませんので、
  より具体的なご案内などは致しかねますこと、
  何卒ご理解とご了承をいただきたく存じます。

 このため、フレッツ光回線などの、特定回線、特定のプロバイダ機器をご利用の場合に、
 弊社製品のように、IPv6ルーターとして
 IPv6アドレスをコントロールできない機器では、
 IPv6アドレスの透過を制限できませんので
 パソコンなどの端末機器で、IPv6を取得したくないとのことでございます場合は、
 端末ごとで、IPv6に関する接続を外していただければと存じます。

このようなご案内となり、大変申し訳ございませんが、
何卒、ご了承下さいます様、お願い申し上げます。
との丁寧な回答を頂きました。つまりbuffaloのルーターではだめなようです。IPv4のルーターであり、IPv6のルーターにはなっていないようです。

   


電子工作へ     HomePage このページのトップ