前回
さくらのVPS 標準OSの環境構築(1) VPS導入とログイン方法の変更
ファイアーウォールの設定
ファイアーウォールを設定し、不要なポートへのアクセスを禁止します。
基本的に全てを拒否し、必要に応じてそのポート番号だけを解放するように設定します。
80番(HTTP)
/443番(HTTPS)
/SSH_PORT番(SSH)
のポートを解放します。
今回はSSHのSFTPのみを利用し通常のFTPは使わないため、20番
/21番
ポートは解放は行いません。
IPv4用のiptables
、IPv6用のip6tables
の両方を設定します。
大体の設定は同じですが、若干表記が違うので注意しましょう。
iptablesの設定
iptables
を編集します。
ファイルが存在しない場合は新規作成します。
vi /etc/sysconfig/iptables
+ *filter
+ :INPUT DROP [0:0]
+ :FORWARD DROP [0:0]
+ :OUTPUT ACCEPT [0:0]
+ :RH-Firewall-1-INPUT - [0:0]
+
+ -A INPUT -j RH-Firewall-1-INPUT
+ -A FORWARD -j RH-Firewall-1-INPUT
+ -A RH-Firewall-1-INPUT -i lo -j ACCEPT
+ -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
+
+ # HTTP, HTTPS, SSH
+ -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
+ -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
+ -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport SSH_PORT -j ACCEPT
+
+ -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
+
+ COMMIT
設定を保存したら、iptables
を再起動します。
service iptables restart
iptables: チェインをポリシー ACCEPT へ設定中filter [ OK ]
iptables: ファイアウォールルールを消去中: [ OK ]
iptables: モジュールを取り外し中: [ OK ]
iptables: ファイアウォールルールを適用中: [ OK ]
iptables
が正しく設定されているか確認します。
sudo iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain FORWARD (policy DROP)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:SSH_PORT
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
ip6tablesの設定
ip6tables
を編集します。
ファイルが存在しない場合は新規作成します。
vi /etc/sysconfig/ip6tables
下記の設定を、そのまま貼り付けます。
+ *filter
+ :INPUT DROP [0:0]
+ :FORWARD DROP [0:0]
+ :OUTPUT ACCEPT [0:0]
+ :RH-Firewall-1-INPUT - [0:0]
+
+ -A INPUT -j RH-Firewall-1-INPUT
+ -A FORWARD -j RH-Firewall-1-INPUT
+ -A RH-Firewall-1-INPUT -i lo -j ACCEPT
+ -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
+
+ # HTTP, HTTPS, SSH
+ -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
+ -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
+ -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport SSH_PORT -j ACCEPT
+
+ -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
+
+ COMMIT
設定を保存したら、ip6tables
を再起動します。
service ip6tables restart
ip6tables: チェインをポリシー ACCEPT に設定中: filter [ OK ]
ip6tables: ファイアウォールルールを消去中: [ OK ]
ip6tables: モジュールを取り外し中: [ OK ]
ip6tables: ファイアウォールルールを適用中: [ OK ]
ip6tables
が正しく設定されているか確認します。
sudo ip6tables -L
Chain INPUT (policy DROP)
target prot opt source destination
RH-Firewall-1-INPUT all anywhere anywhere
Chain FORWARD (policy DROP)
target prot opt source destination
RH-Firewall-1-INPUT all anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all anywhere anywhere
ACCEPT all anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp anywhere anywhere state NEW tcp dpt:https
ACCEPT tcp anywhere anywhere state NEW tcp dpt:63306
REJECT all anywhere anywhere reject-with icmp6-adm-prohibited
メールサーバーの設定
メールサーバーpostfix
の設定を行います。
メールに関しては別のサービスを利用しているので、今回しっかりとした設定はしません。
最低限サーバーからメール送信が行えれば良いところまで。
ホスト名とドメイン名の設定を行います。
ホスト名は完全修飾ドメイン名を、ドメイン名はホスト名から最初の要素を引いたものを設定します。
vi /etc/postfix/main.cf
+ myhostname = mail.example.com
+ mydomain = example.com
設定を保存したら、postfix
を再起動します。
service postfix restart
root宛のメールアドレス設定
管理ユーザーroot
のメールアドレスを設定します。
test@example.com
の部分を任意のメールアドレスに差し替えます。
vi /etc/aliases
# Person who should get root's mail
- #root: marc
+ root: test@example.com
システムの自動アップデートの設定
自動アップデートのためのyum-cron
をインストールします。
yum install yum-cron
アップデート不要なパッケージがあればyum.conf
に設定します。
[main]
セクションに後述の行を追加します。
vi /etc/yum.conf
[main]
:
+ exclude=gcc* kde* openssh* kernel* php* mysql*
:
yum-cron
の設定ファイルを編集します。
vi /etc/sysconfig/yum-cron
yum
の出力情報をまとめたメールの送信先に、root
ユーザーを指定します。
+ MAILTO=root
PreLinkを無効にする
バイナリを変更して高速化を図るprelink
パッケージですが、バイナリ変更によってRuby
などうまく動作しなくなるものがあるため無効化します。
vi /etc/sysconfig/prelink
- PRELINKING=yes
+ PRELINKING=no
また、prelink
が変更したバイナリを元に戻す必要もあります。
prelink -ua
DenyHostsのインストール
DenyHostsは、定期的にログ監視を行い接続失敗しているIPアドレスをhosts.deny
に登録してくれるパッケージです。
SSHのブルートフォースアタック対策になります。
yum
コマンドでインストールします。
yum install denyhosts
インストール後、denuhosts
の起動と自動起動の設定を行います。
service denyhosts start && \
chkconfig denyhosts on
注意点として、自分でアクセス失敗した場合に自分が登録される場合があります。
ですので、例外的に必ずアクセスを許可したいIPアドレスが設定できるようになっています。
固定IPを契約されている場合は登録しておきましょう。
allowed-hosts
を編集し、アクセスを許可したいIPアドレスを追記します。
vi /var/lib/denyhosts/allowed-hosts
# We mustn't block localhost
127.0.0.1
+ xxx.xxx.xxx.xxx # <- 自分の固定IP
設定の変更後、denyhosts
を再起動してください。
service denyhosts restart
ClamAntiVirusのインストール
Linux用のフリーで開発・運用されているウィルス対策ソフトClamAntiVirus
をインストールします。
yum install clamd
インストール後、ClamAntiVirus
の起動と自動起動の設定を行います。
service clamd start && \
chkconfig clamd on
ウイルス定義ファイルの更新を行います。
freshclam
スケジュール設定ファイルを作成し、後述の内容を記述します。
vi /etc/cron.daily/virusscan
+ #!/bin/bash
+
+ PATH=/usr/bin:/bin
+
+ # clamd update
+ yum --enablerepo=epel -y update clamd > /dev/null 2>&1
+
+ # virus scan
+ CLAMSCANTMP=`mktemp`
+ clamscan --recursive --remove / > $CLAMSCANTMP 2>&1
+ [ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] && \
+
+ # when detect virus, send mail
+ grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" root
+ rm -f $CLAMSCANTMP
作成したスケジュール設定ファイルに実行権限を与えます。
chmod +x /etc/cron.daily/virusscan
これで定期的に定義ファイルの更新とウイルススキャンを自動で実行するようになります。
LogWatchのインストール
毎日1回、各種ログをメール1通にまとめて送信してくれるLogWatch
をインストールします。
こちらはインストールと同時にcron
にも登録され自動実行の設定がされます。
yum install logwatch
インストール後、ログの詳細レベルDetail
をHigh
に設定します。
vi /etc/logwatch/conf/logwatch.conf
+ Detail=High