61ファイヤーウォールの設定(CentOS7)

61ファイヤーウォールの設定(CentOS7)

httpプロトコルのフィルタリング

【演習1】

(1)firewalldを起動します。
 
 当然、rootで実行します


(2)パイソンを使って一瞬でwwwサーバを立ち上げます。

     一般ユーザ(guest)で接続して以下のコマンドを実行してください。

           $ python -m SimpleHTTPServer &   ← &付きでデーモンプロセスとして起動してください
                                                                     &をつけないとプロンプトが返ってきません!

     これで終わりです。デフォルトではポート8000で動作しています。

          $ netstat -pant 
 
     を行ってポートが開いていることを確認してください。

 【参考】ポートを変えたい場合は

          $ python -m SimpleHTTPServer 8888     のように後ろに続ければOKのようです。



(3)Windowsのブラウザ(Edgeは不可)からアクセスして接続確認を行います。

  Windowsのブラウザのurl欄に以下を打ち込みます。

          http://192.168.○.:8000  ←←←←  ○○○は自分のLinuxのIPアドレス

     ファイヤーウォール(firewalld)が起動しているのでwebページへはアクセスできないことを確認してください。


(4)ファイヤーウォール(firewalld)にWebアクセスを許可する設定を行ってください。

     当然rootで行います。



(5)再度、ブラウザでアクセスしてWebページが表示されれば完了です。

     単純なディレクトリ遡り(../../../)ぐらいは対策されているようです。



(6)Tomcatを運用するために8080ポートもアクセスを通すようfirewalldを設定してください。



(7)OS起動時にfirewalldも自動起動するよう設定を変更してください。




【参考】

CentOS6以下や他のディストリビューションではiptablesが用いられている場合があります。firewalldは実のところ、内部ではiptablesを使用しているものの一緒には使えません。firewalldはiptablesの代替ではなくiptablesをより柔軟に活用するための新規フロントエンドとなっているようです。

●iptables設定例

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
①:INPUT ACCEPT [0:0]
②:FORWARD ACCEPT [0:0]
③:OUTPUT ACCEPT [0:0]
④-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
⑤-A INPUT -p icmp -j ACCEPT
⑥-A INPUT -i lo -j ACCEPT
⑦-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT #ssh
⑧-A INPUT -j REJECT --reject-with icmp-host-prohibited
⑨-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

●iptables設定書式 --解説--

-A<チェーン><パケットマッチングルール>-j<アクション>


Linuxサーバに出入りするパケットは以下の3種類に分けられる

受信パケット:サーバが外部から受信するパケット

送信パケット:サーバが外部へ送信するパケット

転送パケット:複数のNICを持つサーバがルータとして機能する場合に通過するパケット

3種類のパケットはLinuxカーネル内でそれぞれに対応する「チェーン」を通過する
よって各チェーンに対して通過を許可する条件を設定する


INPUT    チェーン:受信パケット

OUTPUT  チェーン:送信パケット

FORFARD  チェーン:転送パケット


各チェーンを通過するパケットについて上から順にパケットマッチングルールを評価して
マッチした条件のアクションが適用される

ACCEPT アクション:通過を許可する

REJECT アクション:通過を拒否する(通知有)受信拒否をクライアントに通知(クライアント側で即座に接続エラー)
          (サーバがあることがわかってしまう)       

DROP  アクション:通過を拒否する(通知なし)黙ってすてる(タイムアウトまで待たされる)
          (サーバがあるのか、ないのか、、、、わからん)

どのルールにもマッチしなかった場合はデフォルトポリシー(①②③)が適用される

この例ではすべてのチェーンに対してデフォルトポリシーでACCEPTが指定されているので
④以下でルールにマッチしなかったパケットは通過が許可されるように見える、、、、が

⑧⑨の部分はマッチングルールの指定がないのですべてのパケットがマッチしてREJECTが適用されます

つまり受信パケットについては④~⑦まででマッチしてACCEPTされたパケットだけが通過しそれ以外はREJECTされる

転送パケットについては必ず⑨にマッチするのでこのサーバではパケットの転送は一切許可されない