そろそろ CentOS 8 にも手を出してみようと思い、構築の手順を記録しておく。
キャンペーン中だったので ConoHa VPS の 1GB プランでサーバーを立てることにした。
IPv6 は使わないのですべて拒否にした。
初期設定
ログインした後、すべてのパッケージを更新する。
1 | # dnf update -y |
ユーザーを追加して、
1 2 3 4 5 6 | # useradd ユーザー名 # passwd ユーザー名 Changing password for user ユーザー名. New password: Retype new password: passwd: all authentication tokens updated successfully. |
wheel グループにユーザーを追加して、sudo で root に昇格できるユーザーを制限する。
1 | # usermod -G wheel ユーザー名 |
1 2 3 | #auth required pam_wheel.so use_uid ↓ auth required pam_wheel.so use_uid |
ssh に root でログインすることを禁止
1 2 3 | PermitRootLogin yes ↓ PermitRootLogin no |
chrony で時刻合わせの設定
3 4 5 | #pool 2.centos.pool.ntp.org iburst server ntp.nict.jp iburst pool ntp.jst.mfeed.ad.jp iburst |
1 | # systemctl restart chronyd |
パッケージの自動更新
パッケージを自動更新するため dnf-automatic をインストールする。
1 | # dnf install dnf-automatic |
18 19 | #apply_updates = no apply_updates = yes |
1 2 | # systemctl enable dnf-automatic.timer # systemctl start dnf-automatic.timer |
ファイアーウォールの設定
admin ゾーンの作成
cockpit や ssh、管理ツールのポートなどは管理者のみアクセスできる admin ゾーンを作成し、自宅や職場からのみアクセス許可する。
管理用 IP アドレスのリストを作成
1 | # vi ip.txt |
1 2 | xxx.xxx.xxx.xxx ← 自宅などの IP アドレス yyy.yyy.yyy.yyy ← 職場などの IP アドレス |
admin ゾーンの作成
1 2 | # firewall-cmd --new-zone=admin --permanent success |
ipset を作成
1 2 | # firewall-cmd --permanent --new-ipset=admin --type=hash:net success |
IP アドレスリストファイルを ipset に流し込む
1 2 | # firewall-cmd --permanent --ipset=admin --add-entries-from-file=ip.txt success |
読み込まれた ipset を admin ゾーンに適用
1 2 | # firewall-cmd --permanent --zone=admin --add-source=ipset:admin success |
admin ゾーンにサービスを追加
1 2 3 4 5 6 7 8 9 10 | # firewall-cmd --add-service=cockpit --zone=admin --permanent success # firewall-cmd --add-service=ssh --zone=admin --permanent success # firewall-cmd --add-service=ftp --zone=admin --permanent ← FTP を使用する場合 success # firewall-cmd --add-port=40000-40010/tcp --zone=admin --permanent ← FTP の PASV ポートを使用する場合 success # firewall-cmd --add-port=60000/tcp --zone=admin --permanent ← 管理画面などのポート success |
設定反映
1 2 | # firewall-cmd --reload success |
後片付け
1 | # rm ip.txt |
public ゾーンの調整
先程 admin ゾーンに ssh と cockpit を追加し、管理者から使用できるようにしたので public ゾーンからは削除する。
1 2 3 4 | # firewall-cmd --remove-service=cockpit --zone=public --permanent success # firewall-cmd --remove-service=ssh --zone=public --permanent success |
Web サーバーとして使用するため http と https をサービスに追加し、メールが受信できるように smtp のサービスも追加した。
1 2 3 4 5 6 | # firewall-cmd --add-service=http --zone=public --permanent success # firewall-cmd --add-service=https --zone=public --permanent success # firewall-cmd --add-service=smtp --zone=public --permanent success |
設定反映
1 2 | # firewall-cmd --reload success |
fail2ban のインストール
1 | # dnf install fail2ban whois |
1 | # cp -p /etc/fail2ban/jail.conf /etc/fail2ban/jail.d/jail.local |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | [DEFAULT] # "bantime" is the number of seconds that a host is banned. bantime = 10m ↓ bantime = 1d # A host is banned if it has generated "maxretry" during the last "findtime" # seconds. findtime = 10m ↓ findtime = 1h # "maxretry" is the number of failures before a host get banned. maxretry = 5 ↓ maxretry = 3 # # ACTIONS # #destemail = root@localhost ↓ destemail = root #sender = root@<fq-hostname> ↓ sender = root #mta = sendmail ↓ mta = postfix #banaction = iptables-multiport ↓ banaction = firewallcmd-ipset #banaction_allports = iptables-allports ↓ banaction_allports = firewallcmd-allports # # JAILS # [sshd] enabled = true ← 追加 # # Mail servers # [postfix] enabled = true ← 追加 [postfix-sasl] enabled = true ← 追加 # # Miscellaneous # [recidive] enabled = true ← 追加 |
1 2 3 | bantime = 600 ↓ bantime = 86400 |
fail2ban の起動と自動実行
1 2 | # systemctl start fail2ban # systemctl enable fail2ban |
コメント