やる気の無いサイトでゴメンナサイ。
Home » 旧 ConoHa VPS

旧 ConoHa VPS

テンプレートイメージ ( CentOS 6.5 ) で起動したら、用途別の設定をする前にサーバーの基本設定を済ませます。ここでは ConoHa を起動したら用途の如何に関わらず至急設定すべき内容を記述しています。全ての設定が終わったらメニューより目的に合った用途の内容をご覧下さい。

読み替え用索引

ConoHa VPS 関連

貴方の個人情報関連

DNS 関連

その他

SSH の設定

SSH キーの生成

# rm -f /etc/ssh/ssh_host_*key*
# service sshd restart

テンプレートOSなので他のユーザーとキーが同じ為、キーを再生成します

TCP Wrapper での IP 規制

# vi /etc/hosts.allow
sshd : 203.0.113.1
# 203.0.113.1 には接続元 ( 貴方の PC ) のグローバル IP を。

全内容

# vi /etc/hosts.deny
all : all

全内容。 hosts.allow に記載した IP 以外からは接続できなくなるのでお気をつけを

SSH 接続専用ユーザーアカウントの設定

# useradd -G wheel YourAccount
# passwd YourAccount

YourAccount は貴方用の SSH ログオンユーザー名 を

# su YourAccount
$ ssh-keygen -t rsa
$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa
$ rm -f ~/.ssh/id_rsa
$ exit

YourAccount 用キー生成 → id_rsa を cat 表示してコピー保存 → id_rsa 削除

# cat ~/.ssh/authorized_keys >> /home/YourAccount/.ssh/authorized_keys

YourAccount が root 用キーでもログインできるように追記

# sed -i -e "s/^#\(auth\s\+required\s\+pam_wheel\.so.*\)/\1/g" /etc/pam.d/su
# echo "SU_WHEEL_ONLY yes" >> /etc/login.defs

root になれるユーザーを wheel グループに限定する

# sed -i -e "s/^#\s\+\(%wheel\s\+ALL\=(ALL)\s\+ALL\)/\1/g" /etc/sudoers

wheel が sudo を使えるようにしておく

SSH デーモンの設定

# vi /etc/ssh/sshd_config
PermitRootLogin no
UsePAM no
X11Forwarding no

修正

# service sshd restart

内容に間違いがあると接続できなくなるのでお気をつけを

ネットワークの設定と IPv6 の停止

定番のネットワーク4大ファイルの編集

# vi /etc/sysconfig/network
NETWORKING_IPV6=no
HOSTNAME=ConoHaHost.example.com
# ConoHaHost には貴方のサーバー名を。
# example.com には貴方のドメインを。
# vi /etc/hosts
127.0.0.1 ConoHaHost.example.com ConoHaHost localhost localhost.localdomain localhost4 localhost4.localdomain4
# vi /etc/resolv.conf
domain example.com
nameserver 8.8.8.8
nameserver 198.51.100.1
nameserver 198.51.100.2
# 198.51.100.1198.51.100.2 には貴方の DNS の IP を。
# 8.8.8.8 は Google Public DNS のアドレスです。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# DHCPV6C="yes"
# IPV6INIT="yes"
IPV6INIT="no"
# IPV6_AUTOCONF="yes"
# NM_CONTROLLED="yes"
PEERDNS="no"

リブート時に resolv.conf を上書きしない & IPv6 停止。

IPv6 を停止

# vi /etc/modprobe.d/ipv6.conf
options ipv6 disable=1

IPv6 の Listen を停止

# chkconfig ip6tables off
# service ip6tables stop

IPv6 用 iptables の停止

yum の設定 ( 自動アップデート )

# yum install -y yum-cron
# chkconfig yum-cron on
# service yum-cron start
# yum upgrade -y

ファイアーウォール ( iptables ) の設定

# vi /etc/init.d/firewall
#!/bin/sh
#
# firewall      starting firewall
#
# chkconfig: 2345 98 01
# description: setting firewall
##########################################################################
# Set Variables
##########################################################################
IPTABLES="/sbin/iptables"               # iptables Command
MODPROBE="/sbin/modprobe"               # modprobe Command
##########################################################################
# Load modules and set Kernel mode
##########################################################################
$MODPROBE ip_tables
$MODPROBE iptable_filter
$MODPROBE ip_conntrack
$MODPROBE iptable_nat
$MODPROBE ip_nat_ftp
$MODPROBE ip_conntrack_ftp
$MODPROBE ipt_state
$MODPROBE ipt_MASQUERADE
$MODPROBE ipt_LOG
$MODPROBE ipt_REJECT
$MODPROBE ipt_limit
# IP masquerade
echo 0 > /proc/sys/net/ipv4/ip_forward
# ping broad/multi cast
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Validate source address
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done
# Logging unexist address
for f in /proc/sys/net/ipv4/conf/*/log_martians; do echo "1" > $f; done
# Drop ICMP redirect message
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 1 > $f; done

##########################################################################
# Reset all rules
##########################################################################
$IPTABLES -P INPUT DROP         # Drop INPUT
$IPTABLES -P OUTPUT DROP        # Drop OUTPUT
$IPTABLES -P FORWARD DROP       # Drop FORWARD
$IPTABLES -F                    # Flush chains
$IPTABLES -F -t nat
$IPTABLES -X                    # Delete user chain bonus

##########################################################################
# Make user chains
##########################################################################
#
# Drop invalid packet and logging
#
$IPTABLES -N DROPPACKET         # Make DROPPACKT chain
$IPTABLES -A DROPPACKET -j LOG --log-prefix "INVALID_PACKET: " \
        --log-level info -m limit --limit 1/s --limit-burst 4
$IPTABLES -A DROPPACKET -j DROP

#
# Check SYNFlood attack chain
#
$IPTABLES -N SYNFLOOD           # Make SYNFLOOD chain
# Return if not over limit
$IPTABLES -A SYNFLOOD -m limit --limit 10/s --limit-burst 20 -j RETURN
# Drop as SYNFlood attack and logging if over limit
$IPTABLES -A SYNFLOOD -m limit --limit 10/s --limit-burst 20 -j LOG \
        --log-level=6 --log-prefix "SYNFLOOD: "
$IPTABLES -A SYNFLOOD -j DROP

#
# Drop and logging invalid flag TCP
#
$IPTABLES -N DROPFLAGS          # Make DROPFLAGS chain
$IPTABLES -A DROPFLAGS -j LOG --log-prefix "INVALID_FLAGS: " \
        --log-level=6 -m limit --limit 1/s --limit-burst 4
$IPTABLES -A DROPFLAGS -j DROP

#
# Check invalid TCP flag
#
$IPTABLES -N CHKFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,FIN FIN -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,PSH PSH -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ACK,URG URG -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags FIN,RST FIN,RST -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags SYN,RST SYN,RST -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL ALL -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL NONE -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL FIN,PSH,URG -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROPFLAGS
$IPTABLES -A CHKFLAGS -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROPFLAGS

##########################################################################
# INPUT chain
##########################################################################
# Accept from localhost
$IPTABLES -A INPUT -i lo -j ACCEPT

# Check packet state
$IPTABLES -A INPUT -m state --state INVALID -j DROPPACKET

# If packet is syn, check SYNFLOOD attack
$IPTABLES -A INPUT -p tcp --syn -j SYNFLOOD

# Check TCP flag
$IPTABLES -A INPUT -p tcp -j CHKFLAGS

# Accept established connection
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#
# Services for the Internet
#

$IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -s 203.0.113.1 -j ACCEPT    # SSH

# Reject AUTH request
$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
# icmp (IN)
# $IPTABLES -A INPUT -p icmp --icmp-type echo-request -s $INNER_NET -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# $IPTABLES -A INPUT -p icmp --icmp-type echo-reply -s $INNER_NET -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type source-quench -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT
# Logging other packets (drop by default policy)
$IPTABLES -A INPUT -j LOG --log-prefix "UNDEFIND_INPUT: " \
        --log-level=6 -m limit --limit 1/s --limit-burst 4

##########################################################################
# OUTPUT chain
##########################################################################
# Accept from localhost
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# Check TCP flag
$IPTABLES -A OUTPUT -p tcp -j CHKFLAGS

# Accept established connection
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Accept from server to the Internet
$IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT

# icmp(OUT)
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type source-quench -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type parameter-problem -j ACCEPT
# Logging other packets (drop by default policy)
$IPTABLES -A OUTPUT -j LOG --log-prefix "UNDEFIND_ICMP: " --log-level=6 \
        -m limit --limit 1/s --limit-burst 4

exit 0
# chmod 755 /etc/init.d/firewall
# chkconfig firewall on
# service firewall start

ログとメール ( DKIM & SPF ) の設定

root 宛メールの宛先変更

# vi /etc/aliases

メールの宛先を変更

YourAccount: root
root: YourMail@example.net

最下に追記 ( SSH アカウントとメールアドレスはご利用のものを )

# newaliases

エイリアスを書き換え

LogWatch のインストール

# yum install -y logwatch

DKIM の設定

# yum install -y opendkim
# mkdir /etc/opendkim/keys/ConoHaHost.example.com

複数ドメインに対応する為ドメイン名のディレクトリ作成

# opendkim-genkey -D /etc/opendkim/keys/ConoHaHost.example.com -d ConoHaHost.example.com -s 20141207

鍵ファイル ( 秘密鍵と公開鍵 ) を作成します

# chown opendkim:opendkim /etc/opendkim/keys/ConoHaHost.example.com/20141207.*

鍵ファイルのオーナーを「opendkim」に変更します。

# vi /etc/opendkim.conf
Mode sv
#KeyFile /etc/opendkim/keys/default.private
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
# vi /etc/opendkim/KeyTable
20141207._domainkey.ConoHaHost.example.com ConoHaHost.example.com:20141207:/etc/opendkim/keys/ConoHaHost.example.com/20141207.private
# vi /etc/opendkim/SigningTable
*@ConoHaHost.example.com 20141207._domainkey.ConoHaHost.example.com
# vi /etc/opendkim/TrustedHosts
127.0.0.1
# vi /etc/sysconfig/opendkim
AUTOCREATE_DKIM_KEYS=NO
# chkconfig opendkim on
# service opendkim start
# vi /etc/postfix/main.cf
myhostname = ConoHaHost.example.com

#inet_protocols = all
inet_protocols = ipv4

# 下記を最終行に追加

#
# DKIM設定
#
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
# chkconfig postfix on

Postfix 起動登録

# cat /etc/opendkim/keys/ConoHaHost.example.com/20141207.txt

公開鍵ファイルを表示してコピー ( プライマリ DNS に登録する為 )

サーバーを再起動して全設定の反映を確認

# shutdown -r now

お疲れ様でした...

以下はプライマリ DNS にて行う作業 ( DKIM と SPF の登録 )

# vi /var/named/chroot/var/named/masters/example.com.zone
ConoHaHost.example.com.     IN     TXT     "v=spf1 ip4:192.0.2.1 ~all"
; 192.0.2.1 には貴方の ConoHa サーバーの IP を
20141207._domainkey.ConoHaHost.example.com. IN TXT "v=DKIM1; k=rsa; p=表示してコピーした公開鍵"
_adsp._domainkey.ConoHaHost.example.com. IN TXT "dkim=unknown"

公開鍵レコードの書式
セレクタ名._domainkey.ドメイン名. IN TXT "v=DKIM1; k=rsa; p=公開鍵のデータ"

ADSPレコードは、受信側でのDKIM認証結果をどのように扱うかを示す。

ココまでの設定が全て完了したら、メニューより用途別の設定をご覧下さい。

ペットのおうち