PCサーバーにUbuntu 16.04を導入してWordPressを動かす。(3/3)

PCサーバーにUbuntu 16.04を導入してWordPress環境を構築・運用する方法を説明します。
※3/3では、サーバーの運用について説明します。

13.FireWallの設定(iptables設定用シェル)
※サイトアタックを防ぐためのFireWallを設定するシェルです。

  • iptablesは設定を誤るとサーバーに接続できなくなるので、ssh接続のターミナルを2つ開いておいてから、シェルを実行してください。
  • イーサネットデバイス名(enp0xxx)は自分の環境に合わせます。
  • sshでsftp転送できるので、ftpは許可しません。
  • ssh port 22はBrute-force attackの対象となるので使用しません。(他のport番号を使用:ここでは11111)
  • vncおよびsambaはLAN環境内部でのみ使用許可します。

※nano iptables_load_wp ←以下の内容をコピペします。
※他に使用しているportがあれば、適宜行を追加してください。

#!/bin/sh
IPTABLES=”/sbin/iptables”

# rules clear
$IPTABLES -F
$IPTABLES -t nat -F

###################################################
#
# security policies for wordpress-server
# written by webmaster@mail.e-nekorakuen.net
# date :2017/05/05 for wordpress-server
# INPUT :input packets
# FORWARD:forward packets
# OUTPUT :outputs packets
#
###################################################

# default NG
$IPTABLES -P INPUT DROP

# default OK
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

####################################################
#
# INPUT
# packet chains
#
####################################################

# icmp OK
$IPTABLES -A INPUT -p icmp -j ACCEPT

# WEB OK
$IPTABLES -A INPUT -p tcp –dport 80 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 443 -j ACCEPT

# SMTP OK
$IPTABLES -A INPUT -p tcp –dport 25 -j ACCEPT
$IPTABLES -A INPUT -p udp –dport 25 -j ACCEPT
$IPTABLES -A INPUT -p tcp –dport 587 -j ACCEPT
$IPTABLES -A INPUT -p udp –dport 587 -j ACCEPT

# SSH Port 11111 OK(FTP NG)
$IPTABLES -A INPUT -p tcp –dport 11111 -j ACCEPT

# POP OK
$IPTABLES -A INPUT -p tcp –dport 110 -j ACCEPT

# DNS OK
$IPTABLES -A INPUT -p tcp –dport 53 -j ACCEPT
$IPTABLES -A INPUT -p udp –dport 53 -j ACCEPT

# SAMBA LAN OK(WAN NG)
$IPTABLES -A INPUT -i enp0xxx -s 192.168.1.0/24 -p udp –dport 137:138 -j ACCEPT
$IPTABLES -A INPUT -i enp0xxx -s 192.168.1.0/24 -p tcp –dport 139 -j ACCEPT
$IPTABLES -A INPUT -i enp0xxx -s 192.168.1.0/24 -p tcp –dport 445 -j ACCEPT

# VNC LAN OK(WAN NG)
$IPTABLES -A INPUT -i enp0xxx -s 192.168.1.0/24 -p tcp –dport 5900 -j ACCEPT

# LAN self OK
$IPTABLES -A INPUT -i lo -j ACCEPT

# LAN others OK
$IPTABLES -A INPUT -i enp0xxx -s 192.168.1.0/24 -j ACCEPT

# established OK
$IPTABLES -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

####################################################################
#
# FORWARD
# server thru packets
#
####################################################################

# drop packets
$IPTABLES -A FORWARD -p tcp –dport 135 -j DROP
$IPTABLES -A FORWARD -p udp –dport 135 -j DROP
$IPTABLES -A FORWARD -p tcp –dport 137:139 -j DROP
$IPTABLES -A FORWARD -p udp –dport 137:139 -j DROP
$IPTABLES -A FORWARD -p tcp –dport 445 -j DROP
$IPTABLES -A FORWARD -p udp –dport 445 -j DROP
$IPTABLES -A FORWARD -p tcp –dport 5900 -j DROP

# path MTU
$IPTABLES -A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu

##########################################################################
#
# LAN to WAN IP MASQUERADE
#
##########################################################################
$IPTABLES -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE

#######################################################################
#
# OUTPUT
# server packets chains
#
#######################################################################

# drop packets
$IPTABLES -A OUTPUT -o ppp0 -p tcp –dport 135 -j DROP
$IPTABLES -A OUTPUT -o ppp0 -p udp –dport 135 -j DROP
$IPTABLES -A OUTPUT -o ppp0 -p tcp –dport 137:139 -j DROP
$IPTABLES -A OUTPUT -o ppp0 -p udp –dport 137:139 -j DROP
$IPTABLES -A OUTPUT -o ppp0 -p tcp –dport 445 -j DROP
$IPTABLES -A OUTPUT -o ppp0 -p udp –dport 445 -j DROP
$IPTABLES -A OUTPUT -o ppp0 -p tcp –dport 5900 -j DROP

  • シェルを実行します。
    ./iptables_load_wp
  • iptablesに設定が反映していることを確認します。
    iptables -L
  • 再起動してもiptablesの設定内容が反映するようにします。
    apt-get install iptables-persistent ←インストール中に保存”Y”を選択します。

14.重要データ自動バックアップ


(1)NASのマウント(ネットワーク上にNASがあることを前提とします。)
http://engetu21.hatenablog.com/entry/2016/07/31/190059

  • cifs-utilのインストール(Network越しのマウント)
    apt-get install cifs-utils
    mkdir /mnt/nas
  • NASのマウント
    mount.cifs //192.168.1.xx/backups /mnt/nas -o username=user名
    mkdir /mnt/nas/data
    mkdir /mnt/nas/mysql
  • fstabに追記(起動時に自動マウント)
    nano fstab
    /etc/fstab: static file system information.
    #
    # Use ‘blkid’ to print the universally unique identifier for a
    # device; this may be used with UUID= as a more robust way to name devices
    # that works even if disks are added and removed. See fstab(5).
    #
    # <file system> <mount point> <type> <options> <dump> <pass>
    # / was on /dev/sda2 during installation
    UUID=9f01f300-1f94-4022-9d85-1e49c9cc4ebb / ext4 errors=remount-ro 0 1
    # /boot/efi was on /dev/sda1 during installation
    UUID=6D6D-3F12 /boot/efi vfat umask=0077 0 1
    # swap was on /dev/sda3 during installation
    UUID=f64a5e73-8629-4591-8771-db3e16c8437d none swap sw 0 0
    # nas mount added 2017/05/05 ←以下、追記します。
    //192.168.1.xx/backups /mnt/nas cifs username=user名,password=パスワード,uid=1000,gid=1000 0 0

(2)自動バックアップジョブの登録

  • バックアップシェル1(重要データ)
    nano daily_backup ←以下の内容をコピペ
    ## daily_backup dirs -> /mnt/nas/backups/data/weekday ##
    ## written by webmaster@mail.e-nekorakuen.net 2017/05/06 ##
    today=`date`
    day=`date +%A`
    backup_dir=/mnt/nas/data/
    if [ ! -d $backup_dir$day ] then
    mkdir $backup_dir$day
    fi
    cd $backup_dir$day
    echo “>>> daily_backup start: $today <<<” > daily_backup.log
    for dirname in /home/www/example.com /etc /var/log
    do
    echo “$dirname backup start…” >> daily_backup.log
    bkname=`echo $dirname | tr / _`
    tar zcvf $bkname.tar.gz $dirname
    done
    echo “*—– backup files are —–*” >> daily_backup.log
    ls -la >> daily_backup.log
    echo “>>> daily_backup end: $today <<<” >> daily_backup.log
  • バックアップシェル2(MySQL)
    nano mysql_backup ←以下の内容をコピペ
    ## mysql_backup /var/lib/mysql -> /mnt/nas/backups/mysql ##
    ## written by webmaster@mail.e-nekorakuen.net 2017/05/06 ##
    backup_dir=/mnt/nas/mysql/
    day=`date +%A`
    if [ ! -d $backup_dir$day ] then
    mkdir $backup_dir$day
    fi
    cd $backup_dir$day
    today=`date`
    echo “>>> mysql_backup start: $today <<<” > mysql_backup.log
    mysqldir=/var/lib/mysql
    dblist=`ls -p $mysqldir | grep / | tr -d /`
    for dbname in $dblist
    do
    echo “$dbname backup start…” >> mysql_backup.log
    tar zcvf $dbname.tar.gz $mysqldir/$dbname
    done
    echo “*—– backup files are —–*” >> mysql_backup.log
    ls -la >> mysql_backup.log
    today=`date`
    echo “>>> mysql_backup end: $today <<<” >> mysql_backup.log
  • crontabに登録(スケジュール化)
    nano /etc/crontab
    # Edit this file to introduce tasks to be run by cron.
    #
    # Each task to run has to be defined through a single line
    # indicating with different fields when the task will be run
    # and what command to run for the task
    #
    # To define the time you can provide concrete values for
    # minute (m), hour (h), day of month (dom), month (mon),
    # and day of week (dow) or use ‘*’ in these fields (for ‘any’).#
    # Notice that tasks will be started based on the cron’s system
    # daemon’s notion of time and timezones.
    #
    # Output of the crontab jobs (including errors) is sent through
    # email to the user the crontab file belongs to (unless redirected).
    #
    # For example, you can run a backup of all your user accounts
    # at 5 a.m every week with:
    # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
    #
    # For more information see the manual pages of crontab(5) and cron(8)
    #
    # m h dom mon dow command ←以下、追記します。
    0 4 * * * /home/job/daily_backup > /dev/null &
    0 5 * * * /home/job/mysql_backup > /dev/null &

<運用方法>

  1. 毎日4時にdaily_backupが、毎日5時にmysql_backupが起動します。バックアップ先のフォルダに曜日別に圧縮ファイル(*.tar.gz)が保管されているので、万一重要データが破損した場合や書き換えられた場合でも、以前の状態に復元することが出来ます。
  2. 重要データもMySQL DBも圧縮済みのデータを元のディレクトリに解凍するだけでOKです。→ tar xzvf 圧縮ファイル名.tar.gz でカレントディレクトリに解凍されます。

以上です。

(Visited 203 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP