自宅CentOSServer再作成メモ
自宅CentOSServer再作成メモ
この資料について
この資料はほとんどすべてにおいて他所からのコピペで成り立っています。
この資料は、次回のサーバー立ち上げ時に調べなおさないで済むための私の作業のログであり、
正しいことを保証するようなものではありません。
資料の参考にさせていただいたサイトを以下に記載いたします。
- CentOSで自宅サーバー構築
- CentOS7 に後から GUI (X Window System) を追加する
- CentOSのSSHポートを変更する
- ieServerNet 便利ツール
- 初心者向けcronの使い方
- KVM環境で仮想マシンを外部ネットワークと接続する
手順後の不具合とか適当なメモ
手順実行後に起きた問題について書く
/etc/sysconfig/network-scripts/ifcfg-enp3s0
DEVICE="enp3s0" ONBOOT="yes" TYPE="Ethernet" #BOOTPROTO="dhcp" BOOTPROTO="static" IPADDR=192.168.0.12 NETMASK0=255.255.255.0 DHCP_FQDN="ドメイン名を書く"
インストールと初期設定
最小構成でCentOS7をインストール
サーバーに対してCentOS7をインストールする。
- 構成設定を最小構成
- ネットワークは、ON
- ユーザーアカウントを管理者カウントとして作成
初期設定
rootになれるユーザーを管理者のみにする
例として、管理者用の一般ユーザー名をcentosとする
[root@centos ~]# usermod -G wheel centos ↑ 管理者ユーザーをwheelグループに追加 [root@centos ~]# vi /etc/pam.d/su #auth required pam_wheel.so use_uid ↓ auth required pam_wheel.so use_uid ↑ コメント解除
管理者用一般ユーザーからはrootになれて、管理者以外の一般ユーザーからはrootになれないことを確認
パッケージ管理システム設定
RPMパッケージのインストール・アンインストールを行うyumの初期設定を行う
[root@centos ~]# yum -y update ↑ インストール済パッケージの一括アップデート **※大量のパッケージのダウンロード/アップデートを行うため時間がかかる ** [root@centos ~]# yum -y install yum-cron ↑ yum-cronインストール [root@centos ~]# vi /etc/yum/yum-cron.conf ↑ yum-cron設定 # Whether updates should be applied when they are available. Note # that download_updates must also be yes for the update to be applied. apply_updates = yes ↑ ダウンロード&アップデートを自動で行うようにする [root@centos ~]# systemctl start yum-cron ↑ パッケージ自動更新起動 [root@centos ~]# systemctl enable yum-cron ↑ パッケージ自動更新自動起動設定 [root@centos ~]# yum -y groupinstall base "Development tools" ↑ ベース、開発ツールパッケージ群インストール
root宛メールを転送する
システムからroot宛に重要なメールが送られてくるので、root宛メールを普段使用しているメールアドレス宛に転送するようにする
メールサーバーのOP25B対策(Postfix編)
Gmailのメールサーバーから送信するメールはOP25Bの影響は受けないため、 全ての送信メールをGmailを経由して送信するようにする。
Postfix設定
[root@centos ~]# vi /etc/postfix/main.cf ↑ Postfix設定ファイル編集 以下を最終行へ追加 relayhost = [smtp.gmail.com]:587 smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_tls_security_options = noanonymous smtp_sasl_mechanism_filter = plain smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
SMTP認証情報設定
[root@centos ~]# echo [smtp.gmail.com]:587 Gmailアドレス:Gmailパスワード > /etc/postfix/sasl_passwd ↑ SMTP認証情報設定 [root@centos ~]# chmod 640 /etc/postfix/sasl_passwd ↑ root以外参照できないようにパーミッション変更 [root@centos ~]# postmap /etc/postfix/sasl_passwd ↑ SMTP認証情報のデータベース化
Postfix設定反映
[root@centos ~]# systemctl reload postfix ↑ Postfix設定反映
メール転送設定
[root@centos ~]# sed -i '/^root:/d' /etc/aliases ↑ 旧root宛メール転送設定削除 [root@centos ~]# echo "root: hoge@nifty.com" >> /etc/aliases ↑ root宛メールを普段使用しているメールアドレス(例:hoge@nifty.com)宛に転送する [root@centos ~]# newaliases ↑ 転送設定反映
セキュリティ設定の変更
Gmailを利用する場合は、安全性の低いアプリの許可を許可に変更する。
[root@centos ~]# echo test|mail root ↑ テストメールをroot宛に送信する
テストメールが転送先メールアドレス宛に届いていることを確認する
SELinuxの無効化
[root@centos ~]# getenforce ↑ SELinux状態確認 Enforcing ↑ SELinux有効 [root@centos ~]# setenforce 0 ↑ SELinux無効化 [root@centos ~]# getenforce ↑ SELinux状態確認 Permissive ↑ SELinux無効 [root@centos ~]# vi /etc/sysconfig/selinux ↑ SELinux設定ファイル編集 SELINUX=enforcing ↓ SELINUX=disabled ↑ システム起動時にSELinuxを無効化
nkfコマンドインストール
日本語処理に必要なnkfコマンドをインストールする
[root@centos ~]# wget "http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fnkf%2F59912%2Fnkf-2.1.3.tar.gz" -O nkf-2.1.3.tar.gz ↑ nkfダウンロード [root@centos ~]# tar zxvf nkf-2.1.3.tar.gz ↑ nkf展開 [root@centos ~]# cd nkf-2.1.3/ ↑ nkf展開先ディレクトリへ移動 [root@centos nkf-2.1.3]# make && make install ↑ nkfインストール [root@centos nkf-2.1.3]# cd ↑ nkf展開先ディレクトリを抜ける [root@centos ~]# rm -rf nkf-2.1.3 ↑ nkf展開先ディレクトリを削除 [root@centos ~]# rm -f nkf-2.1.3.tar.gz ↑ ダウンロードしたnkfを削除 [root@centos ~]# ln -s /usr/local/bin/nkf /usr/bin/nkf ↑ /usr/local/bin/nkfから/usr/bin/nkfへリンクをはる
システムの再起動
[root@centos ~]# reboot ↑ システム再起動する場合
仮想マシンにかかわる設定
KVM構築
仮想化関連パッケージインストール
[root@host ~]# yum -y groupinstall "Virtualization Host" ↑ 仮想化関連パッケージインストール [root@host ~]# yum -y install virt-install virt-top ↑ 仮想マシンインストールコマンド等インストール [root@host ~]# yum -y install '*guestf*' ↑ オフラインゲスト編集ツールインストール
仮想マシン制御起動
[root@host ~]# systemctl start libvirtd ↑ 仮想マシン制御起動
仮想化設定
[root@host ~]# systemctl stop NetworkManager ↑ NetworkManager停止(ブリッジ未対応のため) [root@host ~]# systemctl start network ↑ netowork起動 [root@host ~]# systemctl disable NetworkManager ↑ NetworkManager自動起動解除 [root@host ~]# systemctl enable network ↑ network自動起動設定 [root@host ~]# sed -i 's/IPADDR0/IPADDR/g' /etc/sysconfig/network-scripts/ifcfg-enp3s0 ↑ LANインタフェース設定ファイル編集(IPADDR0をIPADDRへ変更) [root@host ~]# sed -i 's/PREFIX0/PREFIX/g' /etc/sysconfig/network-scripts/ifcfg-enp3s0 ↑ LANインタフェース設定ファイル編集(PREFIX0をPREFIXへ変更) [root@host ~]# sed -i 's/GATEWAY0/GATEWAY/g' /etc/sysconfig/network-scripts/ifcfg-enp3s0 ↑ LANインタフェース設定ファイル編集(GATEWAY0をGATEWAYへ変更) [root@host ~]# virsh iface-bridge enp3s0 br0 ↑ ブリッジインタフェースbr0作成&起動 ブリッジ br0 を作成して、デバイス eth0 に接続しました ブリッジインターフェース br0 が起動しました [root@host ~]# vi /etc/sysconfig/libvirt-guests ↑ libvirt-guests編集 ON_BOOT=start ↑ 再起動前にサスペンドされたゲストを自動起動する ON_SHUTDOWN=suspend ↑ ホスト停止時にゲストをサスペンドさせる SHUTDOWN_TIMEOUT=600 ↑ ゲスト停止監視時間※この時間を超えてもゲストが停止しない場合はゲストを強制停止する
KVM管理ソフトのインストール
X Window System のインストール
[root@host ~]# yum -y groupinstall "X Window System" ↑ GUI表示を行う [root@host ~]# yum -y install vlgothic-* ↑ 日本語文字化け防止 [root@host ~]# systemctl set-default graphical.target ↑ 起動モードを変更 [root@host ~]# shutdown -r now ↑ 再起動
VirtManagerのインストール
[root@host ~]# yum -y install virt-manager
セキュリティ強化
アンチウイルスソフト導入
Clam AntiVirusインストール
[root@centos ~]# rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm ↑ EPELリポジトリ導入 [root@centos ~]# yum -y install clamav clamav-server clamav-server-systemd clamav-update clamav-scanner ↑ Clam AntiVirusインストール
ウイルス定義ファイル最新化
[root@centos ~]# vi /etc/freshclam.conf ↑ ウイルス定義ファイル更新設定ファイル編集 # Comment or remove the line below. #Example ↑ 行頭に#を追加してコメントアウト(ウイルス定義ファイル更新機能の有効化) # Send the RELOAD command to clamd. # Default: no #NotifyClamd /path/to/clamd.conf NotifyClamd /etc/clamd.d/scan.conf ↑ 追加(ウイルス定義ファイル更新をclamdに通知する) [root@centos ~]# vi /etc/sysconfig/freshclam ↑ ウイルス定義ファイル自動更新設定ファイル編集 #FRESHCLAM_DELAY= ↑ 行頭に#を追加してコメントアウト [root@centos ~]# freshclam ↑ ウイルス定義ファイル最新化 ClamAV update process started at Sat Sep 3 13:22:28 2016 …中略… Database updated (4793967 signatures) from database.clamav.net (IP: 69.12.162.28) ERROR: Please edit the example config file /etc/clamd.d/scan.conf ERROR: NotifyClamd: Can't find or parse configuration file /etc/clamd.d/scan.conf
※以後のウイルス定義ファイルのアップデートは、/etc/cron.d/clamav-updateにより定期的に自動で行われる
Clam AntiVirus設定
[root@centos ~]# vi /etc/clamd.d/scan.conf ↑ Clam AntiVirus設定ファイル編集 # Comment or remove the line below. #Example ↑ 行頭に#を追加してコメントアウト # Run as another user (clamd must be started by root for this option to work) # Default: don't drop privileges #User clamscan ↑ 行頭に#を追加してコメントアウト(root権限で動作するようにする) # Path to a local socket file the daemon will listen on. # Default: disabled (must be specified by a user) LocalSocket /var/run/clamd.scan/clamd.sock ↑ 行頭の#を削除
Clam AntiVirus起動
[root@centos ~]# systemctl start clamd@scan ↑ clamd起動 [root@centos ~]# systemctl enable clamd@scan ↑ clamd自動起動設定
ウイルススキャンテスト
ウイルススキャンテスト(ウイルスなしの場合)
[root@centos ~]# clamdscan -c /etc/clamd.d/scan.conf --remove /root: OK ----------- SCAN SUMMARY ----------- Infected files: 0 ↑ ウイルスは検知されなかった Time: 1.924 sec (0 m 1 s)
ウイルススキャンテスト(ウイルスありの場合)
[root@centos ~]# wget http://www.eicar.org/download/eicar.com ↑ テスト用ウイルスをダウンロード [root@centos ~]# wget http://www.eicar.org/download/eicar.com.txt ↑ 〃 [root@centos ~]# wget http://www.eicar.org/download/eicar_com.zip ↑ 〃 [root@centos ~]# wget http://www.eicar.org/download/eicarcom2.zip ↑ 〃 [root@centos ~]# clamdscan -c /etc/clamd.d/scan.conf --remove /root/eicar.com: Eicar-Test-Signature FOUND ↑ ウイルス検知 /root/eicar.com: Removed. ↑ ウイルス削除 /root/eicar.com.txt: Eicar-Test-Signature FOUND ↑ ウイルス検知 /root/eicar.com.txt: Removed. ↑ ウイルス削除 /root/eicar_com.zip: Eicar-Test-Signature FOUND ↑ ウイルス検知 /root/eicar_com.zip: Removed. ↑ ウイルス削除 /root/eicarcom2.zip: Eicar-Test-Signature FOUND ↑ ウイルス検知 /root/eicarcom2.zip: Removed. ↑ ウイルス削除 ----------- SCAN SUMMARY ----------- Infected files: 4 ↑ 4つのウイルスを検知した Time: 23.913 sec (0 m 23 s)
ウイルススキャン定期自動実行設定
[root@centos ~]# vi /etc/cron.daily/clamdscan ↑ ウイルススキャン日次実行スクリプト作成
#!/bin/sh # 設定ファイル CONFIG=/etc/clamd.d/scan.conf # スキャン実行 # ※ウイルス検知時は隔離ディレクトリへ隔離 CLAMSCANLOG=`mktemp` QUARANTINEDIR=/tmp/clamdscan-quarantinedir-$(date +%Y%m%d) mkdir -p ${QUARANTINEDIR} clamdscan -c ${CONFIG} --move=${QUARANTINEDIR} / > ${CLAMSCANLOG} 2>&1 # ウイルス検知時のみroot宛にメール通知 if [ -z "$(grep FOUND$ ${CLAMSCANLOG})" ]; then rm -rf ${QUARANTINEDIR} else grep -A 1 FOUND$ ${CLAMSCANLOG} | mail -s "Virus Found in `hostname` => ${QUARANTINEDIR}" root fi # スキャンログをシスログに出力 cat ${CLAMSCANLOG} | logger -t $(basename ${0}) rm -f ${CLAMSCANLOG}
[root@centos ~]# chmod +x /etc/cron.daily/clamdscan ↑ ウイルススキャン日次実行スクリプトへ実行権限付加 [root@centos ~]# echo ExcludePath ^/proc/ >> /etc/clamd.d/scan.conf ↑ 例として/procディレクトリをスキャン対象外にする [root@centos ~]# echo ExcludePath ^/sys/ >> /etc/clamd.d/scan.conf ↑ 例として/sysディレクトリをスキャン対象外にする [root@centos ~]# systemctl restart clamd@scan ↑ clamd再起動(スキャン除外設定反映)
これで、毎日定期的に全ファイルのウイルススキャンが行われ、ウイルスを検知した場合のみroot宛にメールが送られてくるようになる。
ファイアウォール構築(iptables)
概要
Linuxサーバー上にファイアウォールを構築する。
ここでは、Linuxのパケットフィルタリング機能であるiptablesを使用して、Web等外部に公開するサービス以外のポートへのアクセスをブロックするようにする。
※通常はルーター側にもファイアウォール機能があるため、Linuxサーバー上でファイアウォールを構築後にポートを開放する場合は、ルーター側とLinuxサーバー側の2箇所でポート開放を行う必要があることに注意
iptables設定
[root@centos ~]# systemctl stop firewalld ↑ ファイアウォール停止 [root@centos ~]# systemctl disable firewalld ↑ ファイアウォール自動起動解除 [root@centos ~]# yum -y install iptables-services ↑ iptables-servicesインストール [root@centos ~]# vi iptables.sh ↑ ファイアウォール設定スクリプト作成
#!/bin/bash #---------------------------------------# # 設定開始 # #---------------------------------------# # 内部ネットワークアドレス定義 LOCALNET=192.168.1.0/24 #---------------------------------------# # 設定終了 # #---------------------------------------# # デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定 IPTABLES_CONFIG=`mktemp` echo "*filter" >> $IPTABLES_CONFIG echo ":INPUT DROP [0:0]" >> $IPTABLES_CONFIG # 受信はすべて破棄 echo ":FORWARD DROP [0:0]" >> $IPTABLES_CONFIG # 通過はすべて破棄 echo ":OUTPUT ACCEPT [0:0]" >> $IPTABLES_CONFIG # 送信はすべて許可 echo ":ACCEPT_COUNTRY - [0:0]" >> $IPTABLES_CONFIG # 指定した国からのアクセスを許可 echo ":DROP_COUNTRY - [0:0]" >> $IPTABLES_CONFIG # 指定した国からのアクセスを破棄 echo ":LOG_PINGDEATH - [0:0]" >> $IPTABLES_CONFIG # Ping of Death攻撃はログを記録して破棄 # 自ホストからのアクセスをすべて許可 echo "-A INPUT -i lo -j ACCEPT" >> $IPTABLES_CONFIG # 内部からのアクセスをすべて許可 echo "-A INPUT -s $LOCALNET -j ACCEPT" >> $IPTABLES_CONFIG # 内部から行ったアクセスに対する外部からの返答アクセスを許可 echo "-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT" >> $IPTABLES_CONFIG # SYN Cookiesを有効にする # ※TCP SYN Flood攻撃対策 sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf # ブロードキャストアドレス宛pingには応答しない # ※Smurf攻撃対策 sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf # ICMP Redirectパケットは拒否 sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf for dev in `ls /proc/sys/net/ipv4/conf/` do sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf done # Source Routedパケットは拒否 sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf for dev in `ls /proc/sys/net/ipv4/conf/` do sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf done # フラグメント化されたパケットはログを記録して破棄 echo "-A INPUT -f -j LOG --log-prefix \"[IPTABLES FRAGMENT] : \"" >> $IPTABLES_CONFIG echo "-A INPUT -f -j DROP" >> $IPTABLES_CONFIG # 外部とのNetBIOS関連のアクセスはログを記録せずに破棄 # ※不要ログ記録防止 echo "-A INPUT ! -s $LOCALNET -p tcp -m multiport --dports 135,137,138,139,445 -j DROP" >> $IPTABLES_CONFIG echo "-A INPUT ! -s $LOCALNET -p udp -m multiport --dports 135,137,138,139,445 -j DROP" >> $IPTABLES_CONFIG echo "-A OUTPUT ! -d $LOCALNET -p tcp -m multiport --sports 135,137,138,139,445 -j DROP" >> $IPTABLES_CONFIG echo "-A OUTPUT ! -d $LOCALNET -p udp -m multiport --sports 135,137,138,139,445 -j DROP" >> $IPTABLES_CONFIG # 1秒間に4回を超えるpingはログを記録して破棄 # ※Ping of Death攻撃対策 echo "-A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT" >> $IPTABLES_CONFIG echo "-A LOG_PINGDEATH -j LOG --log-prefix \"[IPTABLES PINGDEATH] : \"" >> $IPTABLES_CONFIG echo "-A LOG_PINGDEATH -j DROP" >> $IPTABLES_CONFIG echo "-A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH" >> $IPTABLES_CONFIG # 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄 # ※不要ログ記録防止 echo "-A INPUT -d 255.255.255.255 -j DROP" >> $IPTABLES_CONFIG echo "-A INPUT -d 224.0.0.1 -j DROP" >> $IPTABLES_CONFIG # 113番ポート(IDENT)へのアクセスには拒否応答 # ※メールサーバ等のレスポンス低下防止 echo "-A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset" >> $IPTABLES_CONFIG # ACCEPT_COUNTRY_MAKE関数定義 # 指定された国のIPアドレスからのアクセスを許可するユーザ定義チェイン作成 ACCEPT_COUNTRY_MAKE(){ for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'` do echo "-A ACCEPT_COUNTRY -s $addr -j ACCEPT" >> $IPTABLES_CONFIG done grep ^$1 $IP_LIST >> $CHK_IP_LIST } # DROP_COUNTRY_MAKE関数定義 # 指定された国のIPアドレスからのアクセスを破棄するユーザ定義チェイン作成 DROP_COUNTRY_MAKE(){ for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'` do echo "-A DROP_COUNTRY -s $addr -m limit --limit 1/s -j LOG --log-prefix \"[IPTABLES DENY_COUNTRY] : \"" >> $IPTABLES_CONFIG echo "-A DROP_COUNTRY -s $addr -j DROP" >> $IPTABLES_CONFIG done grep ^$1 $IP_LIST >> $CHK_IP_LIST } # IPアドレスリスト取得 IP_LIST=/tmp/cidr.txt CHK_IP_LIST=/tmp/IPLIST if [ ! -f $IP_LIST ]; then wget -q http://nami.jp/ipv4bycc/cidr.txt.gz gunzip -c cidr.txt.gz > $IP_LIST rm -f cidr.txt.gz fi rm -f $CHK_IP_LIST # 日本からのアクセスを許可するユーザ定義チェインACCEPT_COUNTRY作成 ACCEPT_COUNTRY_MAKE JP # 以降,日本からのみアクセスを許可したい場合はACCEPTのかわりにACCEPT_COUNTRYを指定する # 全国警察施設への攻撃元上位5カ国(日本・アメリカを除く)からのアクセスをログを記録して破棄 # 直近1週間の状況 http://www.npa.go.jp/cyberpolice/detect/observation.html # 前月の状況 https://www.npa.go.jp/cyberpolice/detect/ # 国名と国コードの対応表 https://msdn.microsoft.com/ja-jp/library/ee783931(v=cs.10).aspx DROP_COUNTRY_MAKE CN DROP_COUNTRY_MAKE RU DROP_COUNTRY_MAKE MX DROP_COUNTRY_MAKE IN DROP_COUNTRY_MAKE NL echo "-A INPUT -j DROP_COUNTRY" >> $IPTABLES_CONFIG #----------------------------------------------------------# # 各種サービスを公開する場合の設定(ここから) # #----------------------------------------------------------# # 外部からのTCP22番ポート(SSH)へのアクセスを日本からのみ許可 # ※SSHサーバーを公開する場合のみ echo "-A INPUT -p tcp --dport 22 -j ACCEPT_COUNTRY" >> $IPTABLES_CONFIG echo "-A INPUT -p tcp --dport 2222 -j ACCEPT_COUNTRY" >> $IPTABLES_CONFIG # 外部からのTCP80番ポート(HTTP)へのアクセスを許可 # ※Webサーバーを公開する場合のみ echo "-A INPUT -p tcp --dport 80 -j ACCEPT" >> $IPTABLES_CONFIG # 外部からのTCP443番ポート(HTTPS)へのアクセスを許可 # ※Webサーバーを公開する場合のみ echo "-A INPUT -p tcp --dport 443 -j ACCEPT" >> $IPTABLES_CONFIG # 外部からのUDP500番ポート、UDP4500番ポート(L2TP over IPsec)へのアクセスを日本からのみ許可 # ※SoftEther VPN Serverを公開する場合のみ echo "-A INPUT -p udp --dport 500 -j ACCEPT_COUNTRY" >> $IPTABLES_CONFIG echo "-A INPUT -p udp --dport 4500 -j ACCEPT_COUNTRY" >> $IPTABLES_CONFIG # 外部からのTCP5900番ポート(Spaice)へのアクセスを許可 echo "-A INPUT -p tcp --dport 5900 -j ACCEPT" >> $IPTABLES_CONFIG #----------------------------------------------------------# # 各種サービスを公開する場合の設定(ここまで) # #----------------------------------------------------------# # 拒否IPアドレスからのアクセスはログを記録せずに破棄 # ※拒否IPアドレスは/root/deny_ipに1行ごとに記述しておくこと # (/root/deny_ipがなければなにもしない) if [ -s /root/deny_ip ]; then for ip in `cat /root/deny_ip` do echo "-I INPUT -s $ip -j DROP" >> $IPTABLES_CONFIG done fi # 上記のルールにマッチしなかったアクセスはログを記録して破棄 echo "-A INPUT -m limit --limit 1/s -j LOG --log-prefix \"[IPTABLES INPUT] : \"" >> $IPTABLES_CONFIG echo "-A INPUT -j DROP" >> $IPTABLES_CONFIG echo "-A FORWARD -m limit --limit 1/s -j LOG --log-prefix \"[IPTABLES FORWARD] : \"" >> $IPTABLES_CONFIG echo "-A FORWARD -j DROP" >> $IPTABLES_CONFIG # ファイアウォール設定反映 echo "COMMIT" >> $IPTABLES_CONFIG cat $IPTABLES_CONFIG > /etc/sysconfig/iptables if [ -f /usr/libexec/iptables/iptables.init ]; then /usr/libexec/iptables/iptables.init restart else /etc/rc.d/init.d/iptables restart fi rm -f $IPTABLES_CONFIG
IPアドレスリスト更新チェック
IPアドレスリストは頻繁に更新されるので、毎日自動でIPアドレスリストの更新有無をチェックし、更新がある場合はファイアウォール設定スクリプトを再起動するようにする。
[root@centos ~]# vi /etc/cron.daily/iplist_check.sh ↑ IPアドレスリストチェックスクリプト作成
#!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # 新旧IPLIST差分チェック件数(0を指定するとチェックしない) # ※新旧IPLIST差分がSABUN_CHKで指定した件数を越える場合はiptables設定スクリプトを実行しない # ※新旧IPLIST差分チェック理由はhttp://centossrv.com/bbshtml/webpatio/1592.shtmlを参照 SABUN_CHK=100 [ $# -ne 0 ] && SABUN_CHK=${1} # IPアドレスリスト取得 IP_LIST=/tmp/cidr.txt CHK_IP_LIST=/tmp/IPLIST wget -q http://nami.jp/ipv4bycc/cidr.txt.gz gunzip -c cidr.txt.gz > $IP_LIST rm -f cidr.txt.gz # チェック対象IPアドレスリスト最新化 rm -f IPLIST.new for country in `awk '{print $1}' $CHK_IP_LIST |uniq` do grep ^$country $IP_LIST >> IPLIST.new done # チェック対象IPアドレスリスト更新チェック diff -q $CHK_IP_LIST IPLIST.new > /dev/null 2>&1 if [ $? -ne 0 ]; then if [ ${SABUN_CHK} -ne 0 ]; then if [ $(diff $CHK_IP_LIST IPLIST.new | egrep -c '<|>') -gt ${SABUN_CHK} ]; then ( diff $CHK_IP_LIST IPLIST.new echo echo "iptables.sh not executed." ) | mail -s 'IPLIST UPDATE' root rm -f IPLIST.new exit fi fi /bin/mv IPLIST.new $CHK_IP_LIST sh /root/iptables.sh > /dev/null else rm -f IPLIST.new fi
[root@centos ~]# chmod +x /etc/cron.daily/iplist_check.sh ↑ IPアドレスリストチェックスクリプトに実行権限付加
※CRONより/root/iptables.sh not executed.という内容のメールが届いた場合の対処
なんらかの理由で、http://nami.jp/ipv4bycc/ から取得した最新のIPアドレスリストと、前回取得したIPアドレスリストとの差分が100件を超えたため、iptables設定スクリプトを実行しなかったことを示す。
サーバーを長時間停止していた等、前回取得したIPアドレスリストとの差分が100件を超える理由が明確な場合には、「/etc/cron.daily/iplist_check.sh 0」と実行することにより強制的にiptables設定スクリプトを実行する。
iptables起動
[root@centos ~]# sh iptables.sh ↑ ファイアウォール設定スクリプト実行 ↑ ※注意 ERRORが出た場合何らかの理由により既にiptablesのデーモンが起動しているので以下のコマンドを使用して終了させてから上記のコマンドを実行しなおすこと。 ↑ systemctl stop iptables [root@centos ~]# systemctl enable iptables ↑ iptables自動起動設定
iptables確認
Shields UP! - Internet Vulnerability Profilingで「Proceed」ボタン(2つあるがどちらでもよい)をクリック⇒「All Service Ports」ボタンをクリックして、外部からのアクセスを許可または拒否応答しているポートのみOPENまたはCLOSEDで、その他のポートはSTEALTHであることを確認
外部からドメイン名でサーバーにアクセスできるようにする
概要
外部からcentossrv.dip.jpという名前(ドメイン名)でサーバーにアクセスできるようにするため、ドメイン名を取得する。 ここでは無料・ダイナミックDNS(DDNS)サービス - ieServer.Netのサービスを利用してcentossrv.dip.jpというドメイン名を取得する。 ※centossrv.dip.jpは当サイトの例なので、各自で置き換えること
ドメイン名取得
以下の要領でユーザー登録する。 ユーザー名(サブドメイン名):任意のサブドメイン名を入力※例:centossrv.dip.jpのcentossrvにあたる部分 ドメイン名:希望するドメイン名を選択※例:centossrv.dip.jpのdip.jpにあたる部分 電子メールアドレス:自分のメールアドレスを入力 パスワード:任意のパスワードを入力 パスワード(再入力):任意のパスワードを再入力
IPアドレスの自動更新
非固定IPアドレス環境の場合、不定期にIPアドレスが変わってしまうが、IPアドレスが無料・ダイナミックDNS(DDNS)サービス - ieServer.Netに登録したIPアドレスと変わってしまうとcentossrv.dip.jpでサーバーにアクセスできなくなってしまう。 そこで、IPアドレスが変わった契機に自動で無料・ダイナミックDNS(DDNS)サービス - ieServer.Netへ新しいIPアドレスを更新してくれるソフトであるDiCEを使用して、常にcentossrv.dip.jpでサーバーにアクセスできるようにする。 固定IPアドレス環境の場合でも、一定期間IPアドレス更新処理が行われないとドメインが削除されてしまうため、DiCEを使用して定期的にIPアドレスの更新処理を自動で行なうようにする。
[root@centos ~]# mkdir /usr/local/ddns [root@centos ~]# vi /usr/local/ddns/ddns-update.pl ↑ ipアドレス自動更新スクリプト
#!/usr/bin/perl # ieServer.Net 専用 DDNS IP アドレス更新スクリプト - ddns-update.pl # 作成者:山本恭弘@Agora Inc. 作成日:2004/03/24 # # 回線割り当てグローバルIPアドレスを確認し、変化があれば新IPアドレスを # DDNSに登録。当コマンドを一定の間隔で実行し、IPアドレスの変化を監視& # 更新処理する。利用には perl wget cron が利用可能である必要あり。 # # 回線に割り当てられた IPアドレス は http://ieserver.net/ipcheck.shtml # へのアクセスによって確認。 # # cron にて当コマンドを等間隔で実行し、回線IPを確認。変化があればDDNSに # IPアドレスを登録。DDNSサーバーへの負荷軽減の点から実行間隔は10分以上と # すること。 # crontab設定例(/usr/local/ddns/ddns.plにスクリプトを置き10分間隔で実行) # 5,15,25,35,45,55 * * * * /usr/local/ddns/ddns-update.pl # 以下2ファイルの配置ディレクトリは好みに応じ設定 # 1. 設定IPアドレスワークファイル $CURRENT_IP_FILE = "current_ip"; # 2. 設定状況ログファイル $LOG_FILE = "ip_update.log"; # 回線IP確認ページURL $REMOTE_ADDR_CHK = "http://ieserver.net/ipcheck.shtml"; # DDNS更新ページURL # wgetをSSL接続可能でビルドしているなら、https:// での接続を推奨 $DDNS_UPDATE = "http://ieserver.net/cgi-bin/dip.cgi"; # ieServer.Netにて取得したアカウント(サブドメイン)情報を記入 $ACCOUNT = " "; # アカウント(サブドメイン)名設定 $DOMAIN = " "; # ドメイン名設定 $PASSWORD = " "; # パスワード設定 if(!open(FILE,"$CURRENT_IP_FILE")) { $CURRENT_IP = '0.0.0.0'; } else { $CURRENT_IP = <FILE>; close FILE; } $NEW_IP = '0.0.0.0'; $NEW_IP = `wget -q -O - $REMOTE_ADDR_CHK`; if ($NEW_IP ne "0.0.0.0" and $CURRENT_IP ne $NEW_IP) { $STATUS = `wget -q -O - '$DDNS_UPDATE?username=$ACCOUNT&domain=$DOMAIN&password=$PASSWORD&updatehost=1'`; if ($STATUS =~ m/$NEW_IP/) { open (FILE ,">$CURRENT_IP_FILE"); print FILE $NEW_IP; close FILE; $TIME = localtime; open (FILE ,">>$LOG_FILE"); print FILE "$TIME $ACCOUNT.$DOMAIN Updated $CURRENT_IP to $NEW_IP\n"; close FILE; } else { $TIME = localtime; open (FILE ,">>$LOG_FILE"); print FILE "$TIME $ACCOUNT.$DOMAIN Update aborted $CURRENT_IP to $NEW_IP\n"; close FILE; } } exit;
[root@centos ~]# dhmod 777 /usr/local/ddns/ddns-update.pl [root@centos ~]# crontab -e 5,15,25,35,45,55 * * * * /usr/local/ddns/ddns-update.pl ↑ 追記する。
ドメイン名確認
設定したサーバー名で外部からアクセスできるか確認する。 ※ドメイン取得後24~48時間程度経過後に行うこと(すぐアクセスできる場合もある) Free Monitoring Test Toolsの「Select Test Type」欄で「HostName Test」を選択、「Enter Test Target」欄に設定したサーバー名(例:centossrv.dip.jp)を入力して「Perform Test」ボタンを押下する。 以下のような結果が表示されればOK
Hostname test results Domain name tested: centossrv.dip.jp Test performed from: Washington, DC Test performed at: Thu, 02 Nov 2006 00:45:01 GMT Known IP Addresses: XXX.XXX.XXX.XXX
仮想マシンの作成
VirtManagerを利用した仮想マシンの構築を行います。
環境設定
仮想マシン用アカウントを作成します。
[root@host ~]# useradd -m VMManager [root@host ~]# passwd VMManager
仮想マシン用のデータ置き場を作成します。
[root@host ~]# su - VMManager [VMManager@host ~]# mkdir /home/VMManager/writeableVirtualStorage [VMManager@host ~]# mkdir /home/VMManager/readOnlyVirtualStorage exit
仮想マシンの作成
WinSCPを使用して各種データのアップロードを行います。
その後Virt-Managerを使用して仮想マシンを作成しましょう。
注意点
* ディスプレイのアドレス(アクセスに使用するアドレス)はすべてのインターフェイスに設定しましょう。
* ディスプレイのポートは固定設定にしましょう。また、今回の手順では5900以外のポートは公開設定なっていません。
新しく仮想マシンを作成する際は、iptableの設定を新たに追加しなければなりません。
iptables -A INPUT -p tcp --dport 5901 -j ACCEPT