はじめに
さくらVPSに立てたCentOS 6.6インスタンス用のiptables設定について記載致します。
さくらVPSインスタンスは作成直後、ファイアウォールによる通信制限はかかっていません。
[root@tk2-XXX-XXXX ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@tk2-XXX-XXXX ~]#
さくらVPSのインスタンスは、インターネット上からアクセス可能なグローバルIPアドレスが付与された状態で起動しますので、最低限の通信制限はかけておいた方が良いかと思います。
以下の例では、さくらVPSインスタンスに対して、特定のIPアドレス(例えば自分のPC)からのみssh,MySQL通信を許可するようiptablesで設定する例を記載致します。
実行環境
実行環境のさくらVPSインスタンスは以下になります。
・さくらVPS (サービスプラン名 = さくらのVPS(v4) SSD 512 TK02)
・CentOS release 6.6 (2.6.32-504.16.2.el6.x86_64)
例示用IPアドレスについて
さくらVPSインスタンス等のIPアドレスは、例示用として以下のIPアドレスで記載しております。
・さくらVPSインスタンス(tk2-XXX-XXXX)のIPアドレス 192.0.2.200
・自分のPC(さくらVPSインスタンスへのssh,MySQL接続を許可したいマシン)のIPアドレス 192.0.2.100
さくらVPSインスタンスに設定するiptablesサンプル
(1) さくらVPSインスタンスを起動します。
さくらVPSコントロールパネルコンソールからさくらVPSインスタンスを起動します。
インスタンスの起動操作等は以下をご参照下さい。
https://help.sakura.ad.jp/app/answers/detail/a_id/2429
(2) さくらVPSインスタンスにrootユーザでログインします。
さくらVPSインスタンスが起動したら、TeraTermを起動してrootユーザでログインします。
(3) さくらVPSインスタンスに/etc/sysconfig/iptablesを作成します。
さくらVPSインスタンスにrootユーザでログインしたら、以下の/etc/sysconfig/iptablesファイルを作成します。
以下の/etc/sysconfig/iptablesでは、例として自分のクライアントPCからさくらVPSインスタンス(tk2-XXX-XXXX)に対して、ssh(22番ポート)やMySQL(3306番ポート)への通信を許可しています。自分のクライアントPC以外のIPアドレスからのsshやMySQLポートへの通信は禁止しております。
[root@tk2-XXX-XXXX ~]# export LANG=ja_JP.UTF-8
[root@tk2-XXX-XXXX ~]#
[root@tk2-XXX-XXXX ~]# vi /etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
##### DNS #####
## さくらVPSサーバから外部DNSサーバに対するDNS(53番ポート)名前解決許可
-A OUTPUT -p tcp --dport 53 -j ACCEPT
-A OUTPUT -p udp --dport 53 -j ACCEPT
##### HTTP #####
## さくらVPSサーバのhttpdに対するhttp(80番ポート)通信許可
## さくらVPSサーバのhttpdに対するhttps(443番ポート)通信許可
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
##### ssh #####
## さくらVPSサーバのsshdに対するssh(22番ポート)通信許可
# 自分のクライアントPC(192.0.2.100)からのssh通信は許可
-A INPUT -s 192.0.2.100 -p tcp --dport 22 -j ACCEPT
# 上記以外のマシンからのssh通信は禁止
-A INPUT -p tcp --dport 22 -j REJECT
##### MySQL #####
## さくらVPSサーバのMySQLに対するMySQL(3306番ポート)通信許可
# 自分のクライアントPC(192.0.2.100)からのMySQL通信は許可
-A INPUT -s 192.0.2.100 -p tcp --dport 3306 -j ACCEPT
# 上記以外のマシンからのMySQL通信は禁止
-A INPUT -p tcp --dport 3306 -j REJECT
##### 接続許可ポート以外のポートに対する通信禁止 #####
## 前述までに通信許可したポート以外のポートに対する通信を禁止する
-A INPUT -j REJECT --reject-with icmp-host-prohibited
#####
COMMIT
(4) さくらVPSインスタンスのiptables有効化前の状態を確認します。
さくらVPSインスタンスのiptablesを有効化する前に、自分のクライアントPC(192.0.2.100)以外のマシンから、さくらVPSインスタンス(tk2-XXX-XXXX 192.0.2.200)に自由にssh接続出来る状態である事を確認します。
[ec2-user@not-sakura-server ~]$ ssh root@192.0.2.200
root@192.0.2.200's password:
Last login: Sun May 10 23:12:23 2015 from XXXXX.XXXX.XXXX.XXXX
SAKURA Internet [Virtual Private Server SERVICE]
[root@tk2-XXX-XXXXX ~]#
[root@tk2-XXX-XXXXX ~]# hostname
tk2-XXX-XXXXX.vs.sakura.ne.jp
[root@tk2-XXX-XXXXX ~]#
(5) さくらVPSインスタンスでiptablesを有効化し、ssh等のポートに対する通信制限をかけます。
さくらVPSインスタンスで/etc/init.d/iptables startを実行し、さくらVPSインスタンスのiptablesを有効化します。
[root@tk2-XXX-XXXX ~]# /etc/init.d/iptables start
iptables: ファイアウォールルールを適用中: [ OK ]
[root@tk2-XXX-XXXX ~]#
iptablesが有効になった事を確認します。
[root@tk2-XXX-XXXX ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- XXXX.XXXX.XXXX.XXXX anywhere tcp dpt:ssh
REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
ACCEPT tcp -- XXXX.XXXX.XXXX.XXXX anywhere tcp dpt:mysql
REJECT tcp -- anywhere anywhere tcp dpt:mysql reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:domain
[root@tk2-XXX-XXXX ~]#
iptablesを自動起動するよう設定します。
[root@tk2-XXX-XXXX ~]# chkconfig iptables on
[root@tk2-XXX-XXXX ~]# chkconfig --list | grep iptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@tk2-XXX-XXXX ~]#
(6) さくらVPSインスタンスに設定したiptablesが有効になっているか確認します。
先のiptablesでssh接続を許可した自分のクライアントPC(192.0.2.100)から、さくらVPSインスタンス(tk2-XXX-XXXX 192.0.2.200)に対して、ssh接続できる事を確認します。
ssh root@192.0.2.200
[root@tk2-XXX-XXXXX ~]# hostname
tk2-XXX-XXXXX.vs.sakura.ne.jp
[root@tk2-XXX-XXXXX ~]#
念の為、自分のクライアントPC(192.0.2.100)以外のマシンからは、さくらVPSインスタンス(tk2-XXX-XXXX 192.0.2.200)に対して、ssh接続出来ないよう制限がかかった事を確認します。
[ec2-user@not-sakura-server ~]$ ssh root@192.0.2.200
ssh: connect to host 192.0.2.200 port 22: Connection refused
[ec2-user@not-sakura-server ~]$
以上になります。