iptablesの基本(ポートの開放)

Mar 2014

OS: Raspbian (Debian wheezy for Raspiberry Pi)


1 ポートの確認

自分自身のポートの状態を見るにはnmapで自分自身をポートスキャンする。
    nmap   localhost

2 ポートの開放

 Webページ http ポートを開放するには次の2つのコマンドをroot権限で実行する。

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -p tcp --sport 80 -j ACCEPT
設定の確認は
iptables -L


この状態ではリブートすると設定が消えてしまう。
そこで次のファイルを作成し登録する。
/etc/init.d/iptables
#!/bin/sh
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -j ACCEPT

!注意
すべてドロップしてから許可するパケットを登録するのが本来の基本であるが、このときうっかりSSHを登録し忘れるて
リブートすると当然リモートが効かなくなる。上のは最低限のスクリプトで、実際は下の4を参照

上のファイルができたらパーミションを実行形式に変えて登録する。

chmod 755 iptables     <------- パーミションの変更
update-rc.d mysnort defaults <ーーーーー登録
ちなみに登録したものを削除するには update-rc.d  スクリプトファイル  remove

 (参考)iptables コマンドの書式

iptables -[オプション] <チェイン> <パケットの条件> <アクション>

オプション[A|ID|F|L 等]
-A Append(追加)。これでルールを最後に追加する。
-I Insert(挿入)。
-D Delete(削除)
-F Flush(全部削除) iptables -F で多分全部消えると思う。確認は下のコマンドで。
-L List(リスト) ルールのリスト表示.
その他のオプションはiptables -h で見るほうがman で見るよりわかりやすいかも。

チェイン<FOWARD|INPUT|OUTPUT>

パケットの条件例
新規に開始するパケット -m state --state NEW
確立済みパケット -m state --state ESTABLISHED
既存の接続に対するパケット -m state --state RELATED
不当なパケット -m state --state INVALID

eth1から入ってeth0へ出ていく場合は -i eth1 -o eth0
TCPで送信先のポートが80番 -p tcp --dport 80


アクション<DROP|ACCEPT> ターゲットともいう。
DROP パケットの破棄
ACCEPT パケットの許可

4(参考)設定

設定参考例
#!/bin/sh
# 2014.03.30
/sbin/iptables -F FORWARD
/sbin/iptables -F INPUT
/sbin/iptables -F OUTPUT
#入るものはすべて破棄(鎖国状態)
/sbin/iptables -P INPUT DROP
#去る者は追わず
/sbin/iptables -P OUTPUT ACCEPT
#なにも通過させない。
/sbin/iptables -P FORWORD DROP
#
#pingは受け付ける
/sbin/iptables -A INPUT -p icmp -j ACCEPT
#既に確立済のパケットや既存の接続は受け付ける
/sbin/iptables -A INPUT -m state --state ESTABLISH,RELATED -j ACCEPT
#HTTP を受け付ける。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
#SSH を受け付ける。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -j ACCEPT