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

中級編

近日追記予定

IT/インフラエンジニアの地位とスキル向上のために

関連記事

IT 技術の進化はとどまることを知りません。矢継ぎ早に新たな技術が出てきたり、数年前の技術が時代遅れになったりと、IT エンジニアは勉強し続ける運命のようです。 それをどう思うかはあなた次第。 ビジネスの基本は『付加価値を与える[…]

IMG
関連記事

nesuke の考える NW エンジニアの2つの道 ネットワークエンジニアには 2 つの道があります。 1 つはネットワーク構築一筋で、L4 までをひたすらきっちりと構築していく道。 もう 1 つはネットワークを軸として深堀し[…]

IMG