Raspberry Pi でサーバー構築 (iptablesの設定)

2013/03/21

◆ iptablesとは

iptablesはLinuxに実装されているファイヤウォール。 ネットワークの入出力を監視し、設定されたルールに沿って遮断したり、開放したり、ログを取ったりします。 Raspbian でも既にインストールされており自動で起動しています。
下記のコマンドを打ち込むと、現在監視中のルールが表示されます。
ルールを設定していないので何も監視していない。

 # iptables -L
 Chain INPUT (policy ACCEPT) ← 到達パケットの監視ルール(INPUTチェイン)
 target     prot opt source               destination

 Chain FORWARD (policy ACCEPT) ← 通過パケットの監視ルール(FORWARDチェイン)
 target     prot opt source               destination

 Chain OUTPUT (policy ACCEPT) ← 送出パケットの監視ルール(OUTPUTチェイン)
 target     prot opt source               destination

◆ ufw のインストール

ufw とはプロレス団体みたいな名前だが Ubuntu FireWall の略で、iptables を簡単に設定するツールである。
早速インストールしてみる。
インストール直後では ufw は有効となっていない。 一度起動すればシステム起動時に自動的に有効となる。
ssh で ufw を有効化すると、既存の ssh 接続が中断される場合があると警告され y|n の入力を促されます。 ssh接続のルールを作成するまでは有効にしないほうがよいかもしれない。
一応 ssh 接続は通るようだが万が一 ssh での接続が拒否される接続になると、ディスプレイとキーボードを接続して設定を変更しなければいけなくなるので慎重に行いたい。

 # apt-get install ufw

 # ufw status ← 状態を確認
 Status: inactive ← 無効

 # ufw enable ← ufw を有効化
 Command may disrupt existing ssh connections. proceed with operation (y|n) y ← 確認
 Firewall is active and enabled on system startup

 # ufw status ← 状態を確認
 Status: active ← 有効

 # ufw disable ← ufw を無効化
 Firewall stopped and disabled on system startup
 

◆ ufw でルールの設定

早速ルールを設定してゆく。 ssh や ftp は limit での設定を行う。limit で設定されると30秒間に6回以上接続を試みると接続が拒否される。
ルールを設定し有効化したら、ssh ftp http の接続が通るか外部から確認してみること。

  # ufw status ← 状態を確認
 Status: inactive ← 無効であることを確認。有効の場合は無効化すること。

 # ufw default DENY ←  全ての通信を遮断する。

 # ufw allow 20     ←  20番ポートの通信を条件付許可(FTP)
 # ufw allow 21     ←  21番ポートの通信を条件付許可(FTP)
 # ufw limit 22     ←  22番ポートの通信を条件付許可(SSH)
 # ufw allow 80     ←  80番ポートの通信を許可(HTTP)
 # ufw allow 8080   ←  8080番ポートの通信を許可(HTTP)

 # ufw enable ← ufw を有効

 # ufw status ← 状態を確認                          
 Status: active

 To                         Action      From
 --                         ------      ----
 20                         LIMIT       Anywhere
 21                         LIMIT       Anywhere
 22                         LIMIT       Anywhere
 80                         ALLOW       Anywhere
 8080                       ALLOW       Anywhere
 

◆ iptables のルール設定覚書(書きかけ、見切り発車です。)

ufw でざっくりとしたルールとは別に iptables できめの細かい設定が必要となる場合がある。 以下は iptables の設定要領

  # iptables --flush ← 全てのルールを破棄して初期化を行う

 # iptables -P INPUT DROP ← 受信は全て破棄
 # iptables -P OUTPUT ACCEPT ← 送信は全て許可
 # iptables -P FORWARD DROP ← 通過は全て破棄(ルーターとして使用する場合)
 -P オプションは指定されたチェインのポリシーを変更
 ターゲット
   ACCEPT     パケットの送受信を許可
   DROP       パケットを破棄
   REJECT     パケットを破棄、エラーパケットを返す
   DNAT       送信先IPアドレスを変更
   MASQUERADE 複数の送信元IPアドレスを変更
   SNAT       送信元IPアドレスを変更
   LOG        ログを出力する

 # iptables -A INPUT -i lo -j ACCEPT ← ローカルアドレスからの受信はは許可
 -A --append オプションは指定されたチェインに新しいルールを追加
 -i --in-interface オプションは受信インターフェイスを指定
 -j --jamp オプションは処理を指定する

 # iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT ← 応答パケットを許可

 ※サービス毎の設定
 Web(80,443番) の通過を許可
 # iptables -A INPUT -p tcp -dport 80 -j ACCEPT
 # iptables -A INPUT -p tcp -sport 80 -j ACCEPT
 # iptables -A INPUT -p tcp -dport 443 -j ACCEPT
 # iptables -A INPUT -p tcp -sport 443 -j ACCEPT
 FTP(20,21番) の通過を許可
 # iptables -A INPUT -p tcp -dport 20 -j ACCEPT
 # iptables -A INPUT -p tcp -sport 20 -j ACCEPT
 # iptables -A INPUT -p tcp -dport 21 -j ACCEPT
 # iptables -A INPUT -p tcp -sport 21 -j ACCEPT
 SSH(21番) の通過を許可
 # iptables -A INPUT -p tcp -dport 22 -j ACCEPT
 # iptables -A INPUT -p tcp -sport 22 -j ACCEPT

 iptables の再起動
 # service iptables restart