忍者ブログ

ぢみへんプログラミング日誌

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

サーバー構築超入門メモ(3):ファイアウォール再び

既にパケットフィルタで最低限セキュリティを保ってSSHだけは可能な状態でセットアップはしていたが、このままでは色々と問題がある。HTTP, HTTPSを遮断したままだし、他にも遮断したために、インターネットにアクセスする必要のある種々のコマンドが利用不能のはずである。
勿論そのままではアプリケーション開発どころではないので、必要になりそうなコマンドが使えるよう、ここではyumを例に、順を追ってファイアウォールを調整してみよう。

yum listと入力するとインストール済みのソフトウェアパッケージが一覧表示されるのだが、今の状況では最初にこういう出力が出てくる。
[root@ap]# yum list
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
Could not get metalink https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=x86_64 error was
14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.fedoraproject.org'"
* base: ftp.iij.ad.jp
* epel: epel.mirror.net.in
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
http://ftp.iij.ad.jp/pub/linux/centos/6/os/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'ftp.iij.ad.jp'"
Trying other mirror.
...
...
(以下延々とエラーが続く)

『Couldn't resolve host 'ftp.iij.ad.jp』、つまりリモートホストの参照ができないと言われているわけだ。これを裏付けるためにパケットフィルタのログを見てみる。(最初の時点からログが出るように仕込んであったのだ。どういう具合に設定したのかはこのシリーズの1回目を参照のこと)
Jun  5 20:09:11 <ホスト名> kernel: [output rejected]IN= OUT=eth0 SRC=xxx.xxx.xxx.xxx DST=zzz.zzz.zzz.zzz LEN=73 TOS=0x00 PREC=0x00 TTL=64 ID=58532 DF PROTO=UDP SPT=59673 DPT=53 LEN=53

/var/log/messagesの内容が上記だが、リモートホストへのUDPプロトコル53番ポートへの送信が遮断されている。UDPで53番ポートを使うのはDNSサービスであるから、なるほどホストの名前解決ができないのも納得だ。さっそくこの制限を外してみる。
[root@ap]# vi /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Thu Jun 5 20:39:55 2014
*filter
:INPUT DROP [2:64]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1234 -m state --state NEW -j ACCEPT
-A INPUT -j LOG --log-prefix "[input rejected]"
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 下の1行を追加!
-A OUTPUT -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT
-A OUTPUT -j LOG --log-prefix "[output rejected]"
COMMIT

設定追加後に再度yum --listとやってみると、今度は次のようなエラーが出た。
[root@ap]# service iptables restart
[root@ap]# yum list
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os error was
12: Timeout on http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os: (28, 'connect() timed out!')

エラーを見て察しがつく人もいると思うが、今度はhttpプロトコルが遮断されているためにcentos.orgと通信が通信ができてない。ログを見ても分かる。
Jun  5 20:42:53 <ホスト名> kernel: [output rejected]IN= OUT=eth0 SRC=<送信元MACアドレス> DST=2a02:2498:0001:003d:5054:00ff:fed3:e91a LEN=80 TC=0 HOPLIMIT=64 FLOWLBL=0 PROTO=TCP SPT=44504 DPT=80 WINDOW=14400 RES=0x00 SYN URGP=0

やはりTCPプロトコル80番ポートへの送信が遮断されている。
これも以下の行をiptablesファイルを編集し、OUTPUTルールの最後から2行目に挿入する。
-A OUTPUT -m tcp -p tcp --dport 80 -m state --state NEW -j ACCEPT
最後の行はそこよりも上の行のルールで引っかからなかったパケットを遮断する際のログ出力を指示しているので、必ずOUTPUTルールの最後にないといけない。これはINPUTやFORWARDでも同じことだ。

再びiptablesサービスを再起動してyumを実行する。
[root@ap]# yum list
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
Could not get metalink https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=x86_64 error was
12: Timeout on https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=x86_64: (28, 'connect() timed out!')
* base: ftp.tsukuba.wide.ad.jp
* epel: ftp.jaist.ac.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp

『Could not get metalink https://mirrors.fedoraproject.org』とエラーが出ているところを見ると、今度はhttpsプロトコルが遮断されているのが原因だろうと察しがつく。
Jun  5 21:01:25 <ホスト名> kernel: [output rejected]IN= OUT=eth0 SRC=<MACアドレス> DST=2001:4178:0002:1269:0000:0000:0000:fed2 LEN=80 TC=0 HOPLIMIT=64 FLOWLBL=0 PROTO=TCP SPT=43004 DPT=443 WINDOW=14400 RES=0x00 SYN URGP=0

ログには上記のエラーが数行あった。TCPでポート番号443はHTTPSだから、やはり見立ては合っている。そこでこれまでと同じやり方でHTTPSも許可してやろう。果たして今度はどうかと思いつつyum --listを実行した。
すると今度こそ、エラー表示なくyum が実行されたのだった。

というわけで、、、
ここまでにdns, http, https のファイアウォールを調整した。これで当面は問題ないはずだ。仮に問題が出てもまた今回のようにログを確認し、パケットが遮断されていればその内容を分析して必要なら通信を許可していけばよい。許可していいのか怪しいものに関しては識者に聞くなどして再度検討する。問題ないことがはっきりするまでは念のため当面はそのままにしておくのが良いだろう。
ここから先は過去にエントリしてきた記事の内容を頼りにruby, rails 等をインストールできるようになっているはず。超入門メモとしては十分な内容になったかな?少なくとも自分の備忘録としてはそれに近いと思うけど、読者の皆さんにも多少なりとも役立てば幸いです。
PR

COMMENT

NAME
TITLE
MAIL (非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS (コメント編集に必須です)
SECRET
管理人のみ閲覧できます
 
  

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

フリーエリア

最新CM

バーコード

ブログ内検索

Copyright ©  -- ぢみへんプログラミング日誌 --  All Rights Reserved

Design by CriCri / Material by petit sozai emi / powered by NINJA TOOLS / 忍者ブログ / [PR]