テンプレートイメージ ( CentOS 6.5 ) で起動したら、用途別の設定をする前にサーバーの基本設定を済ませます。ここでは ConoHa を起動したら用途の如何に関わらず至急設定すべき内容を記述しています。全ての設定が終わったらメニューより目的に合った用途の内容をご覧下さい。
ConoHa VPS 関連
貴方の個人情報関連
DNS 関連
その他
# rm -f /etc/ssh/ssh_host_*key*
# service sshd restart
テンプレートOSなので他のユーザーとキーが同じ為、キーを再生成します
# vi /etc/hosts.allow
sshd : 203.0.113.1
# 203.0.113.1 には接続元 ( 貴方の PC ) のグローバル IP を。
全内容
# vi /etc/hosts.deny
all : all
全内容。 hosts.allow に記載した IP 以外からは接続できなくなるのでお気をつけを
# 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 を使えるようにしておく
# vi /etc/ssh/sshd_config
PermitRootLogin no
UsePAM no
X11Forwarding no
修正
# service sshd restart
内容に間違いがあると接続できなくなるのでお気をつけを
# 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.1 と 198.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 停止。
# vi /etc/modprobe.d/ipv6.conf
options ipv6 disable=1
IPv6 の Listen を停止
# chkconfig ip6tables off
# service ip6tables stop
IPv6 用 iptables の停止
# yum install -y yum-cron
# chkconfig yum-cron on
# service yum-cron start
# yum upgrade -y
# 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
# vi /etc/aliases
メールの宛先を変更
YourAccount: root
root: YourMail@example.net
最下に追記 ( SSH アカウントとメールアドレスはご利用のものを )
# newaliases
エイリアスを書き換え
# yum install -y logwatch
# 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
お疲れ様でした...
# 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認証結果をどのように扱うかを示す。
ココまでの設定が全て完了したら、メニューより用途別の設定をご覧下さい。