最近、私のサーバーがパンクしました。サーバーのディスクスペースが不足していたためです(実際、この問題は長い間存在しており、ずっと改善する決心がつきませんでした)。今回はバックアップサービス中にパンクしてしまったので、ついでにシステムを再インストールし、いくつかの設定を真剣に調整し、いくつかのプロセスを記録しました。後で参照できるようにするためです。
一、コンポーネントの更新、パッケージ管理#
Ubuntu システム上でソフトウェアパッケージを更新するには、以下のコマンドを使用できます:
- おすすめしません、インストール時間が長すぎます
apt update && apt upgrade -y
- 以下の 2 つのコマンドを推奨します
sudo apt update #このコマンドはソフトウェアパッケージのリストを更新し、システムがどのパッケージを更新できるかを知ることができます。
sudo apt upgrade --only-upgrade #このコマンドはすべての利用可能なソフトウェアパッケージの更新をインストールします。
二、よく使うツール#
1、VIM エディタ#
- VIM がインストールされているか確認します(主に私は vim エディタを使う習慣があるため、Ubuntu はデフォルトで nano が付属しています)
vim --version
- インストールされていない場合は、コマンドを使用してインストールします
apt install vim
- VIM をデフォルトのシステムエディタに設定します。
- とても簡単です。このコマンドを実行し、Vim を選択します。以後、自動的にエディタを呼び出す場所では、Vim が使用されます。
sudo update-alternatives --config editor
2、command-not-found のインストール#
多くのサーバー提供者は、簡略版の Ubuntu を提供する可能性があるため、いくつかの便利なコマンドラインツールはプリインストールされていません。例えばcommand-not-found
は、コマンドを入力したときに、対応するがインストールされていないパッケージを提示してくれます。
sudo apt install command-not-found
インストール後、コマンドラインの使用がさらに便利になります。
三、一般ユーザーの追加#
adduser {your-username} {your-password}
visudo
User Privilege Specification
の下にubuntu ALL=(ALL) NOPASSWD: ALL
という行を追加します。
- 追加が成功したか確認します
su - newuser #新しいユーザーに切り替え
ls /root #/rootディレクトリ内のファイルをリスト表示(root権限がないと見れません)
sudo ls /root #その後、普通のユーザーにroot権限を付与します(これで権限があるので見れるようになります)
exit #終了
四、ファイアウォールの設定#
Ubuntu でufw
(Uncomplicated Firewall)を使用してポート 22、80、443 を開くには、以下の手順に従って設定します:
-
ufw
がインストールされているか確認:- まだ
ufw
がインストールされていない場合は、以下のコマンドを使用してインストールできます:sudo apt install ufw
- まだ
-
ポートを開く:
- ポート 22 を開く:
sudo ufw allow 22
- ポート 80 を開く:
sudo ufw allow 80
- ポート 443 を開く:
sudo ufw allow 443
- ポート 22 を開く:
-
ファイアウォールを有効にする:
ufw
ファイアウォールを有効にする:sudo ufw enable
-
設定を確認:
sudo ufw status
を実行して、ファイアウォールの状態と開いているポートを確認できます。
参考記事
五、SSH ログインと SSH サーバーのセキュリティ設定#
- まず Windows 側で ssh 公開鍵と秘密鍵のペアを生成します
ssh-keygen -t rsa -f ~/.ssh/id_rsa_xxxx
- ユーザーディレクトリに
authorized_keys
ファイルを作成し、公鍵(pub で終わる)の内容をauthorized_keys
ファイルに貼り付けます
mkdir -p ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
- root ユーザーのログインを無効にします
PermitRootLogin Yes
の項目を見つけて、その後ろの設定値をno
に変更します。
vim /etc/ssh/sshd_config
以下のように:
PermitRootLogin no
- PasswordAuthentication を no に設定し、パスワードログインを禁止します。より安全です:
PasswordAuthentication no
- SSH ポート番号を他の数字に変更します。他のポートに変更した後は、ファイアウォールの設定も更新することを忘れないでください。
Port {SSHポート番号、できれば10000以上}
最後に SSH サーバーを再起動して有効にします:
sudo systemctl restart sshd.service
六、カスタムシェルインターフェースのインストール#
- oh-my-zsh をインストールします
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
- その他のテーマ、プラグインなどの設定参考:
七、Docker の設定#
1、Docker のインストール#
-
公式サイト:https://docs.docker.com/install/linux/docker-ce/ubuntu/
-
まず基本環境をインストールします:
sudo apt install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
- 次にキーをインストールします:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 次に Docker の公式リポジトリを追加します:
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- 最後に Docker をインストールできます。私は一般的に Docker Compose も同時に使用するので、一緒にインストールします!
sudo apt update
sudo apt install docker-ce docker-compose
- Docker をインストールした後、現在のユーザーを docker ユーザーグループに追加することを忘れないでください(毎回 sudo を使わずに Docker を使用したい場合)。
sudo gpasswd docker -a username
2、Docker ログ管理#
全体のログサイズ制限を設定
/etc/docker/daemon.json
ファイルを作成または変更し、以下の設定を追加します(3 つのログ、各 10M)。
{
"log-driver": "json-file",
"log-opts": {
"max-file": "3",
"max-size": "10m"
}
}
- その後、Docker サービスを再起動します
sudo systemctl daemon-reload
sudo systemctl restart docker
ただし、既存のコンテナには効果がなく、再構築する必要があります!
個々のコンテナのログサイズ制限
- docker-compose に記述します
logging:
driver: json-file
options:
max-size: "100m"
max-file: "3"
八、スワップ設定#
swapoff -a #元のパーティションを削除
dd if=/dev/zero of=/root/swapfile bs=1M count=1024 #新しいパーティションのサイズを設定
mkswap /root/swapfile
swapon /root/swapfile
- 最後に起動時に自動的に起動するように設定します:
/etc/fstab
ファイルを編集し、最後の行を次のように変更します:/root/swapfile swap swap defaults 0 0
参考記事:
九、logrotate のログサイズ制限#
sudo apt install logrotate
sudo apt install cron
/var/log/syslog
/var/log/mail.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/cron.log
{
weekly
rotate 3
maxsize 100M
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
参考記事:
- https://www.cnblogs.com/uglyliu/p/13206868.html
- https://wsgzao.github.io/post/logrotate/
- https://www.noisyfox.io/logrotate.html
- https://www.cnblogs.com/liujunjun/p/17924699.html
- https://nj.transwarp.cn:8180/?p=10556
十、Fail2ban による IP 禁止#
https://aws.amazon.com/cn/blogs/china/open-source-tool-to-protect-ec2-instances-fail2ban/
https://github.com/fail2ban/fail2ban/issues/3420
十一、パネルインストール ——1panel#
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
sudo apt autoremove docker-compose
参考記事:
十二、定期的なセキュリティ更新#
- unattended-upgrades をインストールしてセキュリティアップグレードを自動更新します
unattended-upgrades を使用することで、Ubuntu システムは定期的にセキュリティ関連の更新を自動的に行い、システムを常にセキュリティ状態に保つことができます。
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades
参考資料:
- https://leonis.cc/sui-sui-nian/2023-11-11-necessary-config-of-new-server.html#ji-ben-she-zhi
- https://spenserj.com/posts/2013-07-15-securing-a-linux-server/
- https://www.ruanyifeng.com/blog/2014/03/server_setup.html
- https://blog.laoda.de/archives/vps-basic-configuration
- https://www.hackerneo.com/blog/dev-tools/better-use-terminal-with-zsh
- https://xtls.github.io/document/level-0/ch04-security.html
原文アドレス: