CentOS6/7 サーバー初期設定

Pocket

CentOS6及びCentOS7対象。レンタルサーバー等、外部に公開するサーバーに行う最低限の初期設定です。
詳しい人はもっと色々設定するかと思います。

色々なサイトを巡りながら作業しました。最初に参考にしたサイトは以下。
wheel グループを活用する – いますぐ実践! Linuxシステム管理 / Vol.104
CentOSをサーバーとして活用するための基本的な設定
他、色々です。

主に以下の対応を行っています。
ネットワーク(IPアドレスやゲートウェイ等)の設定は環境によって設定すべき内容がかなり違うので、今回省略しています。

①ユーザ作成 管理用ユーザを作成
②ユーザ管理設定 wheelグループに追加、visudo設定等
③SSH設定 ポート番号変更、rootログイン禁止
④パッケージ更新 yumパッケージ更新
⑤ファイアウォール設定 HTTP、HTTPS、SSHのみ許可
⑥鍵作成 秘密鍵/公開鍵作成、権限変更
⑦SSH設定 鍵認証のみ許可
⑧時刻設定 chronyによる時刻同期

※注意事項
SSHやパスワードの設定を間違ったり、SSHポート番号、パスワードを忘れるとリモートログインできなくなります。VPS等であれば管理コンソールからログインするか、管理コンソール等がない場合は最悪サーバを初期化する羽目に陥ります。

私がやってしまった例は以下。
・ネットワーク環境(社内のルータ等)でポート22以外でSSH通信が拒否されていて、設定後にSSH接続できなくなった
・ネットワーク設定(CentOS6ならifcfg-eth0のONBOOT=yesがない、CentOS7ならnmtuiで設定するデバイスのAutomaticaly Connectが有効になっていない)で再起動後にネットワークが繋がらなくなった

さて、手順は以下です。
①ユーザ作成
 管理用のユーザを作成します。

adduser ユーザーID
passwd ユーザーID

※一定以上難解なパスワードとすること

②ユーザ管理設定
 管理用ユーザをwheelグループ(sudo実行できるグループ)に追加します。

usermod -G wheel ユーザーID

 wheelグループのみsudo可能に設定します。

visudo

 以下を設定して保存。

%wheel   ALL=(ALL)      ALL

 PAM(認証)を設定。

vi /etc/pam.d/su

 以下を設定して保存。

auth            required        pam_wheel.so use_uid

※この設定以降、上記管理用ユーザ以外sudoが使えなくなる

③SSH設定
 SSH設定を変更します。

vi /etc/ssh/sshd_config

 以下を設定して保存。

PermitRootLogin no
...
Port XXXX

※ポート番号(XXXX)はデフォルト22を使うと攻撃者にバレバレのため、適当なエフェメラルポートを割り当てる
※エフェメラルポートはファイル「/proc/sys/net/ipv4/ip_local_port_range」に書かれている(私の環境では32768 – 61000)

 SSH再起動。
 (1)CentOS6の場合

/etc/init.d/sshd restart

 (2)CentOS7の場合

systemctl restart sshd.service

④パッケージ更新

yum update

⑤ファイアウォール設定
 ファイアウォールはCentOS6ならiptablesで、CentOS7ならfirewalldで行うので、以下2パターンそれぞれ別手順を記載します。
 (1)CentOS6の場合(iptables)
  ファイアウォール設定はiptablesで行います。ping(ICMP)、HTTP、HTTPS、SSHを許可し、他の通信を拒否します。

  localhostからの通信を許可。

iptables -A INPUT -i lo -j ACCEPT 

  ping許可。

iptables -A INPUT -p icmp -j ACCEPT

  HTTP許可。

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

  ※”-m tcp”はパケットマッチングモジュール指定
  HTTPS(SSL)許可。

iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

  SSH許可。

iptables -A INPUT -p tcp -m tcp --dport 11831 -j ACCEPT

  ESTABLISHED(接続済みコネクションのパケット)とRELATED(接続済みコネクションに関連して発生した新たなコネクションパケット)を許可。

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

  内向きの通信を拒否(上記設定以外)。

iptables -P INPUT DROP 

  外向きの通信を許可。

iptables -P OUTPUT ACCEPT

  設定を保存。

service iptables save

  設定を確認。

cat /etc/sysconfig/iptables

  設定を確認(一覧)。

iptables -L

 (2)CentOS7の場合(firewalld)
  ファイアウォール設定はfirewalldで行います。HTTP、HTTPS、SSHを許可し、デフォルトのDHCPv6を含み他の通信を拒否します。firewalldはゾーンごとにサービス単位で通信可否が決まります。

  firewalldが有効か確認。

systemctl list-unit-files | grep firewalld

※enabledが表示されれば有効状態なので、disabledの場合のみ以下コマンドで有効化
 「systemctl enable firewalld.service」、「systemctl start firewalld.service」

  ゾーン(現在の設定)を確認。

firewall-cmd --list-all

※publicゾーンのinterfacesとして通信に使用するNIC名が設定されていることを確認

  全ゾーンの設定を確認。

firewall-cmd --list-all-zones

※使用しているNIC名がどのゾーンに配置されているかを確認

  サービスを確認。

firewall-cmd --get-services

※sshが存在するか確認

  SSHポートの確認。

sudo cat /usr/lib/firewalld/services/ssh.xml

※ポート番号が22(デフォルト)になっている事を確認

  SSH用の設定を既存の流用で作成。

sudo cp -p /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-alt.xml
sudo vi /etc/firewalld/services/ssh-alt.xml

※ssh-altの方で、SSHのポート番号は先に設定したポート番号に変更して保存

  設定(ssh-alt)の登録。

sudo firewall-cmd --reload
firewall-cmd --get-services

※ssh-altが存在するか確認

  ポート変更版SSHをpublicゾーンに追加。

sudo firewall-cmd --add-service=ssh-alt
sudo firewall-cmd --permanent --add-service=ssh-alt

  HTTPをpublicゾーンに追加。

sudo firewall-cmd --add-service=http
sudo firewall-cmd --permanent --add-service=http

  HTTPSをpublicゾーンに追加。

sudo firewall-cmd --add-service=https
sudo firewall-cmd --permanent --add-service=https

  SSH(元のデフォポート版)を削除。

firewalld-cmd --remove-service=ssh
firewalld-cmd --permanent --remove-service=ssh

  dhcpv6-client削除。

firewalld-cmd --permanent --remove-service=dhcpv6-client
sudo firewall-cmd --reload

  リロード後、サービス確認。

firewall-cmd --list-all

⑥鍵作成
 セキュリティ向上のため、SSH通信時の認証をパスワードでなく鍵を使って行うようにします。あらかじめWinSCP等のFTPツールを用意しておきましょう。WinSCPの場合、SCP接続でポート番号はSSHのものを使います。

  鍵を作成。

ssh-keygen -t rsa -b 2048 -C "任意のコメント"
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
chmod 600 ~/.ssh/authorized_keys

※コメントは適当で、パスフレーズはちゃんと控えましょう
※他の設定は問題なければそのままでもOK、鍵の名前を変更した場合は上記id_rsaやid_rsa.pubもあわせて変えて実行

  秘密鍵をローカル(操作用マシン)にコピーします。FTPツールを使って「該当ユーザホームディレクトリ/.ssh/id_rsa」を取得します。

  秘密鍵削除。

rm ~/.ssh/id_rsa

⑦SSH設定
  SSH接続を鍵認証のみ許可し、パスワード認証を拒否するように設定します。

vi /etc/ssh/sshd_config

  以下を設定して保存。

PasswordAuthentication no
RSAAuthentication yes
RhostRSAAuthentication no
AllowUsers 作業ユーザ

 SSH再起動。
 (1)CentOS6の場合

/etc/init.d/sshd restart

 (2)CentOS7の場合

systemctl restart sshd.service

⑧時刻設定
  とりあえずCentOS7の設定のみ残します。CentOS6の場合はntpを設定すればよいので検索するとすぐ設定内容が見つかるかと思います。

  chronyインストール。

yum install chrony

  chronyインストール確認。

rpm -qa | grep chrony

  ntp停止、サービス無効化。

systemctl stop ntpd.service
systemctl disable ntpd.service

  chronyサービス登録、起動。

systemctl enable chronyd.service
systemctl start chronyd.service

  chrony起動確認。

ps -ef | grep chrony

  設定ファイル編集。

vi /etc/chrony.conf

  以下を設定して保存。

# 既存のリストをコメントアウト、参照したいサーバを追記
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# iburstは起動直後にサーバに4回連続的に問い合わせることで時刻同期が早くなる
server NTPサーバ iburst

※ntpは好きな場所を設定するとよいかと思います(検索すると色々ありますが、私はNICT、MFEED等を3つほど設定しました)

  設定を確認。

systemctl status chronyd

以上です。

お疲れ様でした。

広告

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です