2012年12月26日水曜日

iptables

iptablesの機能
  • パケットフィルタリング(IPv4用)機能
  • ネットワークアドレス変換(NAT)機能
  • ファイアウォール機能


◆起動状態確認
#/sbin/chkconfig --list iptables
◆再起動
#/etc/rc.d/init.d/iptables restart
◆起動
#/etc/rc.d/init.d/iptables start
◆停止
#/etc/rc.d/init.d/iptables stop
◆確認
#/sbin/iptables -L
#/sbin/iptables --list


◆設定

◇直接、ファイルを編集して設定する手順

1.ファイルを直接編集する
#vi /etc/sysconfig/iptables
-A INPUT -s 111.111.111.111/32 -p tcp -m tcp --dport 3306 -j ACCEPT
2.再起動する
#/etc/rc.d/init.d/iptables restart

◇コマンドで設定する手順
#/sbin/iptables -A INPUT -s 111.111.111.111 -p tcp --dport 3306 -j ACCEPT
#service iptables save
service iptables saveを実行することで/etc/sysconfig/iptablesに書き込まれる。
(直接、ファイルを編集する手順と同じ)
書き込んでおかないと再起動で消える。


◆/etc/sysconfig/iptablesの内容
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
  • 上記4行は固定で記述する
  • *filter・・・パケットフィルタリング
  • INPUT/FORWARD/OUTPUT ACCEPT・・・・INPUT/FORWARD/OUTPUTを許可(ACCEPT)する(デフォルト全許可)
  • [0:0]・・・パケット・バイトカウンタ。iptables起動時に[0:0]からスタートして、ルールにマッチしたパケット数とバイト数がカウントされていく。
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  • -A INPUT・・・入力パケット(INPUT)のルールを追加する(-A)
  • -m state --state RELATED,ESTABLISHED・・・関連パケット(RELATED)、継続パケット(ESTABLISHED)の
  • -j ACCEPT・・・パケットの通過を許可(ACCEPT)する
  • (※-m=拡張モジュール。stateオプション指定するための定義)

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
  • -A INPUT・・・入力パケット(INPUT)のルールを追加する(-A)
  • -p tcp・・・TCPプロトコルの
  • -m state --state NEW・・・接続パケット(NEW)の
  • -m tcp --dport 22・・・ポート番号(TCP22=SSH)の
  • -j ACCEPT・・・パケットの通過を許可(ACCEPT)する


-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-m state --state NEW、ESTABLISHED、RELATEDについて
上記は、全プロトコルRELATED、ESTABLISHEを許可し、TCP22(SSH)のNEWを許可している(入力パケット) パケットは、それぞれ下記の通り。
  • NEWはACKフラグがセットされていないパケットやICMPのecho Requestなどの接続パケット(下記1)
  • ESTABLISHEDは、すでに接続が確立している継続パケット(下記2~8)
  • RELATEDはるFTP-dataなどの既存コネクションの関連パケット
  • INVALIDは上記以外のパケット

TCPの通信での接続(スリーウェイ・ハンドシェイク)~切断について、接続パケット(NEW)と継続パケット(ESTABLISHED)は下記の通り
  1. 接続元からサーバへSYNパケット(SYN=1/ACK=0)が送信される(接続要求)・・・NEW
  2. サーバは接続元へSYN/ACKパケット(SYN=1/ACK=1)を返信する(接続許可)・・・ESTABLISHED
  3. 接続元からサーバに、ACKパケット(SYN=0/ACK=1)が送信される(接続開始)・・・ESTABLISHED
  4. データパケット(SYN=0/ACK=1)送受信・・・ESTABLISHED
  5. サーバから接続元へACK/FINパケット(ACK=1/FIN=1)を送信する(切断要求)・・・ESTABLISHED
  6. 接続元からサーバへACKパケット(ACK=1/FIN=0)を返信する(切断許可)・・・ESTABLISHED
  7. 接続元からサーバへACK/FINパケット(ACK=1/FIN=1)を返信する(切断通知)・・・ESTABLISHED
  8. サーバから接続元へACKパケット(ACK=1/FIN=0)を送信する(切断)・・・ESTABLISHED

pingの通信
  1. 接続元からサーバへICMPのecho requestパケットが送信される(リクエスト)・・・NEW
  2. サーバから接続元へecho replyが返信される(レスポンス)・・・ESTABLISHED?

FTP-data
  • FTP通信は、制御用コネクションとデータ転送用コネクションの2つのTCPコネクションを利用する
  • 制御用コネクションで接続を確立し、データ転送用コネクションでデータを転送するが、この際の制御用コネクションに関連するデータ転送用コネクションがRELATED(関連パケット)になる。

-A INPUT -p icmp -j ACCEPT・・・1
-A INPUT -i lo -j ACCEPT・・・2
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT・・・3
  1. -p icmp・・・ping入力許可
  2. -i lo・・・ローカル(自分自身)からの入力許可
  3. -m tcp --dport 80・・・http入力許可

-A INPUT -j REJECT --reject-with icmp-host-prohibited
  • 最後に上記のルールにマッチしないパケットは接続拒否にする(ICMPのhost-prohibitedを返信し接続拒否)

COMMIT
  • ファイルの最終行に記述

まとめ
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10050 -j ACCEPT
-A INPUT -s 111.111.111.111/32 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT


参考URL

0 件のコメント:

コメントを投稿