さくらのVPS への作業メモ 3。今回は iptables をつかってファイアーウォールを設定してみる。
続編として、さくらのVPS(v3) 2GB プランへの作業メモ「さくらのVPS を改めて使いはじめる 3 – iptables と logwatch」を書きました。
もくじ
iptables
iptables はパケットフィルタリング機能を提供するプログラムで、ファイアー ウォールの構築などに利用できる。非常に多機能で奥の深いプログラムなのだけど、とりあえず必要最小限と思われる設定をおこなう。
今回の設定をおこなう上で、以下のページが参考になった。
まず、さくらのVPS に iptables がインストールされていることを確認する。
$ yum list installed | grep iptables iptables.x86_64 1.3.5-5.3.el5_4.1 installed iptables-ipv6.x86_64 1.3.5-5.3.el5_4.1 installed
どうやらインストールされているようだ。次に、現在の iptables 設定を確認する。
$ sudo 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
何も設定されていない。
ポートの設定
iptables が未設定の状態から SSH、HTTP、FTP、MySQL だけに限定してポート解放し、後は利用しないようにする。SSH については前回の記事で変更したポート、HTTP は 80 番、FTP は 20 と 21 番、MySQL はデフォルトの 3306 番を使用する。
iptables の設定は /etc/sysconfig/iptables に対して記述する。初期状態ではこのファイルが存在しないので新規作成する。root 権限の必要な場所に保存するので sudo vi で作成する。そういえば、作業メモの第 1 回で WinSCP をすすめながら、ほとんど vi で編集している気がする。
$ sudo vi /etc/sysconfig/iptables
ファイルの内容は以下のようになる。
ファイルの内容は SyntaxHighlighter Evolved という WordPress プラグインで色つけをおこなっている。しかし現行のバージョン 3.1.1 では、空行が「改行」ではなく「半角スペース + 改行」になってしまう。iptables はそのような行を検出するとエラーとなるため、このページから設定をコピペする場合は、6、17、24、26 行目を「半角スペース + 改行」から「改行」に修正する必要がある。
半角スペースを表示できるテキスト エディタで修正してからコピペするのが安全だと思われる。また、行末に空白が入ったり、最終行の COMMIT 末尾の空白や改行もエラーになるので注意すること。
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH, HTTP, FTP1, FTP2, MySQL -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport XXXXX -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
19 行目の SSH ポート番号 ( 変更していなければ 22 を設定する ) 以外は、汎用な設定になっていると思う。詳細については、参考資料として挙げたページを参照のこと。ファイルの編集が完了したら Esc キーでコマンドモードに戻り、:wq で保存する。
hatihati さんのコメントによって気付いたのだが、はじめに公開していた設定例ではポート 80 番の指定が抜けていたので追加。20 行目がそれにあたる。今、コピペ元となるサーバー側の設定をみたらきちんと書かれていたので、この記事に貼り付けて体裁を整えているときに消してしまったものと思われる。
再起動と設定の確認
設定ファイルが作成されたので、iptables を再起動する。これは sudo /etc/rc.d/init.d/iptables restart でおこなえる。設定が適切ならば、以下のように出力されるはず。
$ sudo /etc/rc.d/init.d/iptables restart Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ] Applying iptables firewall rules: [ OK ]
最後に、設定がどのように反映されているのかを確認しておく。
$ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination RH-Firewall-1-INPUT all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination RH-Firewall-1-INPUT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain RH-Firewall-1-INPUT (2 references) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere icmp any ACCEPT esp -- anywhere anywhere ACCEPT ah -- anywhere anywhere ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns ACCEPT udp -- anywhere anywhere udp dpt:ipp ACCEPT tcp -- anywhere anywhere tcp dpt:ipp ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:XXXXX ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ftp-data ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ftp ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:mysql REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
設定がバッチリ反映されてる。めでたしめでたし。
…今回はここまで。次は Apache や MySQL などのインストールと諸設定をおこなう。
お世話になります。
iptables の19行目と20行目の間には、次の1行が入るのではないでしょうか。これがないと、次回の記事でApacheをインストールしても、何も表示されません。
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
ご指摘のとおり、ポート 80 番の指定が抜けていました。
コピペ元のサーバー側の設定には指定されていたので、この記事に載せるときにミスしたようです。
訂正して記事に反映しました。
ありがとうございます。
いつも大変参考にさせていただいています。
iptablesのファイルをそのままコピペで再起動させたのに、このようなエラーメッセが出てきました。
Applying iptables firewall rules: Bad argument ‘COMMIT’
Try ‘iptables-restore -h’ or ‘iptables-restore –help’ for more informaiton
どこの設定を変更すれば、ファイアウォールが正常に作動するか教えていただけますか。
予想なのですが、最終行の COMMIT の後ろに空白または改行文字が入っている可能性が考えられます。他の要因なら、該当する設定に関するエラーが出たと思います。
これが原因であれば、vi で COMMIT の後を何も記述されていない状態にして保存し、その後に iptables を再起動すれば正常動作します。
ピンバック: www.sakuttoly.com - iptables変更メモ
@Patric
横からで済みません。私もコピペを行ったところ同じエラーが発生しました。
もしかしてこのようなエラーメッセージも出ていませんか?
「Applying iptables firewall rules: iptables-restore v1.3.5: no command specified
Error occurred at line: 6」
どうやらコピペを行うとL6 L17 L24 L26に空白が入ってしまうようです。
これをviで取り除いたところ上手くいきましたよ。
akabekoさん、分かりやすい説明大変助かります。ありがとうございます。私も空白が入りエラーが出ましたが、取り除くとうまくいきました。
iptables の設定は SyntaxHighlighter Evolved という WordPress プラグインで表示しているのですが、空行が「半角スペース + 改行」になってしまうようです。プラグインを通さない、素のテキスト データは空行になっているので気づきませんでした。
これは混乱しそうなので、注釈を加えておきます。Patric さん、anonymousさん、stakamura さん、ご指摘ありがとうございました。
ピンバック: さくらVPS借りて最初にやったこと « naclog
ピンバック: naoina.log» Blog Archive » さくらVPSでLAMP環境を構築する
ピンバック: 浜村拓夫の世界
ピンバック: ファイアーウォールを設定 | VPSで始めるホームページ制作
ピンバック: VPS初心者がさくらVPSを使い始めた。 | </gecko> : げことじ。
ピンバック: TM's Workspace - さくらのVPSでリモートデスクトップ環境を作ってみた。
ピンバック: はじめてのさくら VPS + CentOS の初期設定からチューニングなどの作業まとめ | ウェブル
ピンバック: さくらVPSを借りたら設定する事【作業リスト】 | 一騎当千×仕事術
ピンバック: さくらのVPS設定手順、失敗つき。基本の設定3 – iptables « mimumemo
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport XXXXX -j ACCEPT
上記箇所の”XXXXX ” を前回変更したIPに書き直していなくてエラーしてしまいました(;´∀`)
ピンバック: さくらVPSでjavaサイトを立ち上げる為の下準備~その1 | cam-len
ピンバック: コピペで行うさくらVPSにWordPressをインストールするまで2(iptables) | LAGRANGE BLOG
ピンバック: さくらのVPSで最低限やっておきたい初期設定 | HAPPY*TRAP
iptablesの設定で困っていたので、非常に助かりました。
改行や半角スペースなどに気をつけて設定すれば、何の問題もなく1発で設定できました。
ありがとうございます。
ピンバック: Play with さくらVPS 6 of steps セキュリティ設定その1 | CaCi - Takahiro's Kitchen
ピンバック: Log
ピンバック: さくらVPS借りて最初にやったこと |
VPSのセットアップに大変参考にさせていただいています。
iptableの前までは順調にきたのですが、iptablesを再起動すると、error occured at line : 1 という表示がされて、うまく再起動できません。スペースについてもチェックしてみたのですが、どうすればよいでしょうか?
“error occured at line : 1″ とあるので 1 行目の記述に問題があるか、以下の質疑のようにモジュール読み込みが失敗している可能性があります。
iptableのrestartが”una’le to initializetable ‘filterError occurred at line: 1… – Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1457785684
上記の回答ではカーネルの再インストールをすすめていますが、yum update でシステム全般の更新をおこなうほうがよいと思います。
また、私の記事にある設定からコピペした際、スペースだけでなく、
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport XXXXX -j ACCEPT
の XXXXX 部分に SSH のポート番号に書き換えたことも確認してみてください。
この部分は XXXXX ではなく、20 などの数値になります。記事では SSH のポート番号を変更している可能性を考慮し、意図的に XXXXX と記述しています。
さっそくのご回答ありがとうございます。
おっしゃるとおりにやってみたのですが、アップデートもすでに行っており、解決することができませんでした。エラーメッセージは次のとおりです。
Unloading iptables modules: [OK]
Applying iptables firewall rules: ip_tables: (C) 2000-2006 Netfilter Core Team ‘iptables-restore v1.3.5: iptables-restore: unable to initializetable ‘ filter
Error occurred at line:1
Try ‘iptables-restore -h’ or ‘iptables-restore –help’ for more information [FAILED]
お手数ですが、よろしくお願いいたします。
すみません。エラーメッセージの内容からは具体的な原因は分からないです。
1 行目の記述が間違っているのか、外部要因で 1 行目から解釈不能になっていると予想されますが、それ以上の情報は、実際の設定や環境を見ないことには何ともいえません。
設定の見直しや、周辺環境に問題がないようであれば、エラーメッセージの末尾にあるように、iptables-restore で設定を復元してから再試行するのはいかがでしょうか。
申し訳ないのですが、助言できる範囲としてはこれぐらいになってしまいます。
もし問題が解決し、その原因も判明された場合は、その旨をコメントいただけると助かります。そのときは、この記事の本文へお知らせいただいた内容を反映したいと思います。
なんどもコメントありがとうございます。
今日、ついにファイアーウォールの設定が成功しました。
原因は、日本語キーボードを使用していなかったことにあるようです。
今日、別のパソコンで日本語キーボードでiptablesの編集をすると、うまくいきました。
どうもありがとうございました。
ピンバック: CloudCore VPS初期設定 | 1000g
ピンバック: iptables | fumixのアラカルト
ピンバック: Apacheのインストール | fumixのアラカルト
ピンバック: [さくらVPS]初期設定(ssh, iptables, demon, etc) – suVeneのアレ
ピンバック: さくらVPS + CentOS 6.2 x86_64の初期設定まとめ〜Wordpressを公開するまで〜 | ささログ