インストールするOSは最低限の機能を含んだもの「Minimal」を選択する。必要なソフトは必要になったら適宜インストールする。サーバはCUIで利用するので、GUI環境はインストールしない。
OSインストール
Mac でインストールUSB作成
$ diskutil list $ diskutil eraseDisk MS-DOS UNTITLED /dev/disk3 $ diskutil unmountDisk /dev/disk3 $ sudo dd if=./CentOS-6.5-x86_64.iso of=/dev/disk3 bs=4028 $ diskutil eject /dev/disk3 $ diskutil list
* 書き込みには少し時間がかかる
$ shasum -a 256 file.tar.iso
エイリアスの追加
$ vi .bash_aliases alias ls='ls -lh --color=auto' alias less='less -N' alias ..='cd ..'
Ctrlキーを有効化(設定ファイル)
# vi /etc/default/keyboard XKBOPTIONS="ctrl:swapcaps" XKBOPTIONS="ctrl:nocaps" # systemctl restart console-setup
Ctrlキーを有効化(コマンドライン)
$ gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:swapcaps']" $ gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"
一般ユーザの追加
# useradd hoge -m -s /bin/bash -G sudo # passwd hoge # less /etc/passwd # less /etc/sudoers # grep sudo /etc/group
* Debian系は初めから root は使えない
必要パッケージの追加
$ apt install terminator $ dpkg -i /tmp/moz0/google-chrome-stable.deb
セキュアなサーバ設定
- 全てのパッケージを最新のものにアップデートしてシステムを最新の状態にする
# apt update # apt upgrade # apt full-upgrade
- ソフトウェアパッケージのアップデートを自動化する。そのためにも、ソフトは基本的にapt等パッケージ管理システムからインストールする
# apt install cron-apt ← vi /etc/cron-apt/config(アプデ自動化) # timedatectl status # timedatectl set-timezone Asia/Tokyo # date
- 起動サービスの確認と停止。セキュリティを考慮して使わないサービスは停止、自動起動も無効にする。
# systemctl -t service | grep running # systemctl stop [service] # systemctl disable [service]
- デフォルトで 稼働しているサービス(Debian系)
- デフォルトで 稼働しているサービス(RH系)
- 不要なサービスは脆弱性の元なので全て停止する。ランレベル3(CUIモード)で自動起動するサービスを確認して停止、自動起動をオフにする
# chkconfig --list | grep 3:on # service auditd stop # service netfs stop auditd(コマンド監視), ip6tables(IP6利用), netfs(NFSクライアント), postfix(SMTPサーバ利用)
- SSHのポート番号を22番から変更しておく
/etc/ssh/sshd_config Port 20023 # systemctl sshd restart
- 開いているポートを確認
$ netstat -at (-antup) # ss -tan # lsof -i:20031 ← To find out name of services
- メールサーバなど、ユーザアカウントは必要だけどシェルログインは不要なユーザは、ログインシェルを「/sbin/nologin」か「/bin/false」にする
#useradd -s /sbin/nologin march #usermod -s /sbin/nologin march
- SSHで root ログインを禁止する
- rootログインが可能な端末名を全て削除して、rootログインを全面的に禁止する
/etc/ssh/sshd_config #PermitRootLogin no # echo > /etc/securetty
- ユーザがディスクの空き容量を使い切ってしまわないように、ユーザが利用するファイルシステムには独立したパーティションを割り当てる
- 変更されないデータを格納するファイルシステムは、リードオンリーでマウントすることによりファイルの改竄や破壊行為を抑えられる
- アドレススキャン(港探索)回避のためにブロードキャスト宛リクエストを無視する。下記の設定ファイルに追記
/etc/sysctl.conf net.ipv4.icmp_echo_ignore_broadcast=1
ファイアウォールとセキュリティ
Debian系
# systemctl status ufw # ufw enable # ufw status verbose # ufw status numbered # ufw allow http # ufw limit 23098/tcp comment 'SSH port' ← ポートを許可(マニュアル) # ufw allow from 192.168.0.2/24 to any port 23098 # ufw status numbered # ufw delete 2 ← specify a port number
RH系
# firewall-cmd --get-default # firewall-cmd --list-services # firewall-cmd --list-all # getenforce # setenforce 1 # vi /etc/selinux/config
7. ネットワークの構築
ローカルエリア内の場合
- L2スイッチ、又は L3スイッチ(≒ルータ)に LANケーブルが接続されていることを確認
- DHCP を使う場合はマシンの MACアドレスで IPアドレスを予約
- DHCP を使わない場合は各マシンに自分で IPアドレスを割り当てる
- ping を飛ばして疎通確認
# ifconfig # ip addr show # nmcli device # nmcli d # nmcli connection # nmtui #「自動的に接続」にチェック # ping 192.168.0.2
ルータを超える場合
# route
SSH接続でリモートログイン
[リモート] # systemctl status sshd # vi /etc/ssh/sshd_config ← ポート変更、パスワード認証一時許可 # ufw status verbose # ufw limit 23098/tcp comment 'SSH port' # ufw allow from 10.0.1.2 to any port 23098 # firewall-cmd --list-services # firewall-cmd --list-all # firewall-cmd --add-port=92838/tcp --permanent # semanage port -a -t ssh_port_t -p tcp 92838 ← yum provides */semanage # semanage port -l | grep ssh ← SELinux もチェック # dpkg-reconfigure openssh-server ← ホストキーは既知なので再生成 # ls /etc/ssh ← 新しいホストキーのリスト # ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub # vi /etc/ssh/sshd_config ← パスワード認証禁止 # systemctl restart sshd # ls -l .ssh/authorized_keys
[ローカル] # systemctl status sshd # ssh-keygen -t rsa # vi ~/.ssh/config # ssh-copy-id ubu1go # ssh-add # ssh-add -l # ssh ubu1go
* ssh-copy-id など、入っていないコマンドがあったら apt や yum でインストール
3. その他の設定
Kali の場合
ブルートゥースを稼働させる。
# systemctl enable bluetooth # systemctl start bluetooth
Raspberry Pi の場合
以下のコマンドでキーボードレイアウトやタイムゾーン、Wi-Fi の設定などができる。
$ sudo raspi-config
RH系
# yum update # yum install yum-cron # timedatectl status # timedatectl set-timezone Asia/Tokyo # date
conky
# apt install -y conky # vi ~/.conkyrc ← 既存のものを参照 # cat <<EOF > ~/.config/autostart/conky.desktop [Desktop Entry] Type=Application Exec=/usr/bin/conky Hidden=false NoDisplay=false X-GNOME-Autostart-enabled=true Name=conky Comment= EOF