Linux (CentOS7) のセキュリティのチェックと設定

初級編

アンチウィルスは効いている?

# curl https://www.eicar.org/download/eicar.com > test.txt

上記コマンドにより、eicar というテストウィルス(無害だけどウィルスとして扱われる)をダウンロードし、Diskに書き込みます。このときアンチウィルスソフトのリアルタイムスキャンが効いていれば何かしら反応があるはずです。

なお、http://としてしまうと、社内NWだと UTM のアンチウィルス機能により eicar を駆除される可能性がありますので、https://として通信を暗号化し、UTM をすり抜けましょう。

余計なTCP/UDPポートは開いてない?

# ss -nltu

ss コマンドで、開放しているTCP/UDPポートを確認できます。

CentOS 7.4.1708 の minimum install だとデフォルトで以下が開放されています。

[root@localhost ~]# ss -nltu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:48798 *:*
udp UNCONN 0 0 *:68 *:*
udp UNCONN 0 0 127.0.0.1:323 *:*
udp UNCONN 0 0 :::50926 :::*
udp UNCONN 0 0 ::1:323 :::*
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 100 127.0.0.1:25 *:*
tcp LISTEN 0 128 :::22 :::*
tcp LISTEN 0 100 ::1:25

これだとどのプロセスがLISTENしているのか不明なので、以下コマンドで lsof コマンドをインストールし、

[root@localhost ~]# yum -y install lsof

以下コマンドでプロセスを確認します。

[root@localhost ~]# lsof -i -n -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 711 chrony 1u IPv4 16941 0t0 UDP 127.0.0.1:323
chronyd 711 chrony 2u IPv6 16942 0t0 UDP [::1]:323
sshd 1001 root 3u IPv4 19425 0t0 TCP *:22 (LISTEN)
sshd 1001 root 4u IPv6 19432 0t0 TCP *:22 (LISTEN)
master 1450 root 13u IPv4 19830 0t0 TCP 127.0.0.1:25 (LISTEN)
master 1450 root 14u IPv6 19831 0t0 TCP [::1]:25 (LISTEN)
dhclient 11356 root 6u IPv4 29681 0t0 UDP *:68
dhclient 11356 root 20u IPv4 29671 0t0 UDP *:48798
dhclient 11356 root 21u IPv6 29672 0t0 UDP *:50926
sshd 11420 root 3u IPv4 30690 0t0 TCP 192.168.169.128:22->192.168.169.1:63512 (ESTABLISHED)
sshd 11424 t.yamada 3u IPv4 30690 0t0 TCP 192.168.169.128:22->192.168.169.1:63512 (ESTABLISHED)
[root@localhost ~]#

オプション -i でIPアドレスとバインドされているプロセスを表示できます。-n はIPアドレスの名前解決(逆引き)をしない、-P はポート番号の変換をしない、という意味です。

ssh は *:22 と表示されていますが、これは全てのNICインタフェースのIPアドレスでLISTENする、という意味です。

例えば2つのNICがあり、1つはWebサービス用IP(10.1.1.1/24)、もう1つは管理用IP(192.168.10.1/24)がアサインされていた場合、本来であれば SSH アクセスは管理用IPのみで LISTEN すればよいところを、色々なクライアントがアクセス可能な Webサービス用IP(10.1.1.1) でもSSHが許可されてしまいます。

この是正は次の項目で説明します。

SSH のセキュリティ設定は問題ない?

SSHは強力なツールである分、セキュリティには気を付けなければなりません。

# vi /etc/ssh/sshd_config
[修正前] #ListenAddress 0.0.0.0  ---> [修正後] ListenAddress 192.168.10.1

この設定を加え、sshd を再起動 (# systemctl restart sshd ) することで、ss -nltu の SSH の箇所が *:22 から 192.168.10.1:22 と変更され、Webサービス用IP(10.1.1.1)からSSHアクセスを受け付けないようになります。

このような設定は Apache(httpd)の httpd.conf の Listen や、Postfix の main.cf の inet_interfaces にて同様に必要なインタフェースのIPを設定すれば、ss -nltu の *:80 や *:25 が10.1.1.1:80 や 10.1.1.1:25 と受付IPが限定されます。さらにPostfix に関しては :::1:25 とIPv6のループバックアドレスがListenになっていますので、inet_protocols = ipv4 と設定します。

また、SSHのポート番号も22番だと攻撃されやすいので、変更したほうがよいでしょう。

[修正前] #Port 22  ---> [修正後] Port 10022

なお、SELinuxを有効にしている場合はそのままではできませんので、無効化するか、以下を実施することで対応できます。

# yum -y install policycoreutils-python
# semanage port -a -t ssh_port_t -p tcp 10022

また、SSHはデフォルトでrootによるログインが許可されていますが、不許可にしましょう。

[修正前] #PermitRootLogin yes  ---> [修正後] PermitRootLogin no

また、SSHアクセスを許可するユーザを限定し、さらにそのユーザがどのNWセグメントからアクセスしてよいかを限定する設定ができます。例えば t.yamada というユーザは全てのNWセグメントから許可しつつ、h.suzuki というユーザは 172.16.1.0/24 と 172.16.3.0/24 からのみアクセスを許可する場合は /etc/ssh/sshd_config の最下部に以下を設定します。

AllowUsers t.yamada  h.suzuki@172.16.1.0/24  h.suzuki@172.16.3.0/24

パッケージは最新版?

以下コマンドでパッケージが最新版かどうかを確認できます。

# yum check-update

また、確認ではなく実際に最新版に更新するには以下コマンドを使います。

# yum update

脆弱性情報やパッチ情報を定期的にチェックしてる?

JP CERT

https://www.jpcert.or.jp/

US CERT

https://www.us-cert.gov/

RedHat

https://access.redhat.com/security/security-updates/#/cve

中級編

近日追記予定

シェアする

  • このエントリーをはてなブックマークに追加

フォローする