「iptables」の版間の差分

提供: セキュリティ
移動: 案内検索
 
(同じ利用者による、間の19版が非表示)
行1: 行1:
<!--
+
[[iptables]]  は、[[Linux]] に実装された[[IPv4]]用のパケットフィルタリングやネットワーク変換機能、または、コマンドのことです。
vim: filetype=mediawiki
+
[[IPv6]] 用には、 ip6tables があります。
-->
+
[[{{PAGENAME}}]]  は、[[Linux]] に実装された[[IPv4]]用の[[パケットフィルタリング]]やネットワーク変換機能、または、コマンドのことです。
+
[[IPv6]] 用には、 [[ip6tables]] があります。
+
  
読み方
+
'''読み方'''
;[[{{PAGENAME}}]]:
+
;[[iptables]]: あいぴー てーぶるす
 
__TOC__
 
__TOC__
  
 
== 概要 ==
 
== 概要 ==
 +
[[iptables]] は、[[Linux]] の [[ファイアーウォール]]として利用できます。
 +
[[iptables]]は、大きく分類してパケットフィルタリングとNAT(Network Address Translation)の機能を提供します。
 +
;パケットフィルタリング: [[ファイアーウォール]]の機能で、IP[[パケット]]の送信、受信、転送の許可条件を設定します。
 +
;NAT:ルータとして[[Linux]]を使用する場合に利用し、[[パケット]]の転送時に送信元、宛先IPアドレスをに変換します。
  
[[{{PAGENAME}}]] は、[[Linux]] の [[ファイアーウォール]]として利用できます。
+
NATには、以下の種類があります。
 
+
* Destination NAT(DNAT)
* [[iptables のインストール]]
+
* Srouce NAT(SNAT)
* [[iptables のテーブル]]
+
* IPマスカレード
* [[iptables のサービスのコントロール]]
+
== iptables ==
* [[iptables のコマンドラインオプション]]
+
{{iptables}}
* [[iptables の設定の変更]]
+
 
+
== テーブル ==
+
 
+
=== フィルタリング用フィルターテーブル ===
+
 
+
;FORWARD: フォワードするパケット
+
;INPUT: 受信するパケット
+
;OUTPUT:送信するパケット
+
 
+
=== アドレス変換NATテーブル ===
+
 
+
;PREROUTING: 送信時に変換するチェイン 
+
;POSTROUTING: 受信時に変換するチェイン
+
;OUTPUT: 送信するパケット
+
 
+
== インストール ==
+
 
+
{{yum|iptables}}
+
 
+
== 設定ファイル ==
+
 
+
[[{{PAGENAME}}]] の設定ファイルは、下記の場所にあります。
+
/etc/sysconfig/iptables-config
+
 
+
<!-- service -->
+
{{service|iptables}}
+
 
+
 
== 使い方 ==
 
== 使い方 ==
 
=== chkconfig の確認 ===
 
 
<syntaxhighlight lang="bash">
 
$ chkconfig --list iptables
 
iptables        0:off  1:off  2:on    3:on    4:on    5:on    6:off
 
</syntaxhighlight>
 
 
=== 起動時に常に起動する ===
 
 
<syntaxhighlight lang="bash">
 
% sudo chkconfig iptables on
 
</syntaxhighlight>
 
 
=== iptables のコマンドラインオプション ===
 
 
<syntaxhighlight lang="bash">
 
$ iptables --h
 
iptables v1.4.7
 
 
Usage: iptables -[AD] chain rule-specification [options]
 
      iptables -I chain [rulenum] rule-specification [options]
 
      iptables -R chain rulenum rule-specification [options]
 
      iptables -D chain rulenum [options]
 
      iptables -[LS] [chain [rulenum]] [options]
 
      iptables -[FZ] [chain] [options]
 
      iptables -[NX] chain
 
      iptables -E old-chain-name new-chain-name
 
      iptables -P chain target [options]
 
      iptables -h (print this help information)
 
 
Commands:
 
Either long or short options are allowed.
 
  --append  -A chain            Append to chain
 
  --delete  -D chain            Delete matching rule from chain
 
  --delete  -D chain rulenum
 
                                Delete rule rulenum (1 = first) from chain
 
  --insert  -I chain [rulenum]
 
                                Insert in chain as rulenum (default 1=first)
 
  --replace -R chain rulenum
 
                                Replace rule rulenum (1 = first) in chain
 
  --list    -L [chain [rulenum]]
 
                                List the rules in a chain or all chains
 
  --list-rules -S [chain [rulenum]]
 
                                Print the rules in a chain or all chains
 
  --flush  -F [chain]          Delete all rules in  chain or all chains
 
  --zero    -Z [chain [rulenum]]
 
                                Zero counters in chain or all chains
 
  --new    -N chain            Create a new user-defined chain
 
  --delete-chain
 
            -X [chain]          Delete a user-defined chain
 
  --policy  -P chain target
 
                                Change policy on chain to target
 
  --rename-chain
 
            -E old-chain new-chain
 
                                Change chain name, (moving any references)
 
Options:
 
[!] --proto    -p proto        protocol: by number or name, eg. `tcp'
 
[!] --source    -s address[/mask][...]
 
                                source specification
 
[!] --destination -d address[/mask][...]
 
                                destination specification
 
[!] --in-interface -i input name[+]
 
                                network interface name ([+] for wildcard)
 
--jump -j target
 
                                target for rule (may load target extension)
 
  --goto      -g chain
 
                              jump to chain with no return
 
  --match      -m match
 
                                extended match (may load extension)
 
  --numeric    -n              numeric output of addresses and ports
 
[!] --out-interface -o output name[+]
 
                                network interface name ([+] for wildcard)
 
  --table      -t table        table to manipulate (default: `filter')
 
  --verbose    -v              verbose mode
 
  --line-numbers                print line numbers when listing
 
  --exact      -x              expand numbers (display exact values)
 
[!] --fragment  -f              match second or further fragments only
 
  --modprobe=<command>          try to insert modules using this command
 
  --set-counters PKTS BYTES    set the counter during insert/append
 
[!] --version  -V              print package version.
 
</syntaxhighlight>
 
 
 
=== iptables の設定 ===
 
=== iptables の設定 ===
 
 
/etc/sysconfig/iptables の設定例。
 
/etc/sysconfig/iptables の設定例。
  
行164: 行53:
 
COMMIT
 
COMMIT
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== iptables が動かない ===
 
 
service iptables start で [[iptables]] が動かないことに遭遇するかもしれません。
 
/etc/sysconfig/iptables  の設定ファイルが存在しないとき、[[iptables]] のサービスは起動できません。
 
 
 
=== iptables の設定と起動 ===
 
=== iptables の設定と起動 ===
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% sudo cp ./iptables /etc/sysconfig/iptables
 
% sudo cp ./iptables /etc/sysconfig/iptables
行178: 行59:
 
iptables: Applying firewall rules:                        [  OK  ]
 
iptables: Applying firewall rules:                        [  OK  ]
 
</syntaxhighlight>
 
</syntaxhighlight>
 
=== HTTPとHTTPSを許可する ===
 
 
[[HTTP]] (80)と [[HTTPS]]  (443) を許可する例です。
 
 
<syntaxhighlight lang="bash">
 
-A INPUT -p tcp --dport 80 -j ACCEPT
 
-A INPUT -p tcp --dport 443 -j ACCEPT
 
</syntaxhighlight>
 
 
<syntaxhighlight lang="bash">
 
*filter
 
:INPUT DROP [0:0]
 
:FORWARD DROP [0:0]
 
:OUTPUT ACCEPT [0:0]
 
-A INPUT -i lo -j ACCEPT
 
-A INPUT -p tcp --dport 22 -j ACCEPT
 
-A INPUT -p tcp --dport 80 -j ACCEPT
 
-A INPUT -p tcp --dport 443 -j ACCEPT
 
-A OUTPUT -o lo -j ACCEPT
 
COMMIT
 
</syntaxhighlight>
 
 
=== DNS を許可する ===
 
 
[[Domain Name System|DNS]] を許可する例です。
 
 
<syntaxhighlight lang="bash">
 
-A INPUT -p tcp --dport 53 -j ACCEPT
 
</syntaxhighlight>
 
 
<syntaxhighlight lang="bash">
 
*filter
 
:INPUT DROP [0:0]
 
:FORWARD DROP [0:0]
 
:OUTPUT ACCEPT [0:0]
 
-A INPUT -i lo -j ACCEPT
 
-A INPUT -p tcp --dport 22 -j ACCEPT
 
-A INPUT -p tcp --dport 53 -j ACCEPT
 
-A OUTPUT -o lo -j ACCEPT
 
COMMIT
 
</syntaxhighlight>
 
 
=== icmp echo requestを許可する ===
 
 
<syntaxhighlight lang="bash">
 
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT
 
</syntaxhighlight>
 
 
=== 回数制限を行う ===
 
 
1秒間に4回までアクセスを許可する例です。
 
<syntaxhighlight lang="bash">
 
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4  -j ACCEPT
 
</syntaxhighlight>
 
 
[[sshd]] に対して行うと、[[総当たり攻撃]] を受けている時に、自分自身もログインができなくなるので、やるべきではないでしょう。
 
 
 
== iptables の設定の保存と復元 ==
 
== iptables の設定の保存と復元 ==
 
 
[[iptables-save]] コマンドでは、[[iptables]]の設定を標準出力に出します。
 
[[iptables-save]] コマンドでは、[[iptables]]の設定を標準出力に出します。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行259: 行81:
 
# Completed on Sat Apr 27 15:26:09 2013
 
# Completed on Sat Apr 27 15:26:09 2013
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== iptables の設定を保存する ==
 
== iptables の設定を保存する ==
 
 
[[iptables]] コマンドで設定した情報は、 save を実行しないと保存されません。
 
[[iptables]] コマンドで設定した情報は、 save を実行しないと保存されません。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% sudo service iptables save
 
% sudo service iptables save
 
</syntaxhighlight>
 
</syntaxhighlight>
 
== iptables の設定をクリアする ==
 
 
-F もしくは --flush を使います。
 
<syntaxhighlight lang="bash">
 
% sudo iptables -F
 
</syntaxhighlight>
 
 
 
 
== 関連項目 ==
 
== 関連項目 ==
 
+
{{iptables}}
 +
* [[ufw]]
 
* [[ファイアーウォール]]
 
* [[ファイアーウォール]]
* [[lokkit]]
+
* lokkit
 +
* http://www.netfilter.org/
 +
<!-- vim: filetype=mediawiki
 +
-->

2016年1月11日 (月) 21:40時点における最新版

iptables は、Linux に実装されたIPv4用のパケットフィルタリングやネットワーク変換機能、または、コマンドのことです。 IPv6 用には、 ip6tables があります。

読み方

iptables
あいぴー てーぶるす

概要

iptables は、Linuxファイアーウォールとして利用できます。 iptablesは、大きく分類してパケットフィルタリングとNAT(Network Address Translation)の機能を提供します。

パケットフィルタリング
ファイアーウォールの機能で、IPパケットの送信、受信、転送の許可条件を設定します。
NAT
ルータとしてLinuxを使用する場合に利用し、パケットの転送時に送信元、宛先IPアドレスをに変換します。

NATには、以下の種類があります。

  • Destination NAT(DNAT)
  • Srouce NAT(SNAT)
  • IPマスカレード

iptables

使い方

iptables の設定

/etc/sysconfig/iptables の設定例。

  • プライベートアドレスからの ssh のアクセスを許可する
  • ローカルホストからのアクセスを許可する
  • それ以外は、許可しない
# Generated by iptables-save v1.4.7 on Sat Apr 27 15:31:38 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Sat Apr 27 15:31:38 2013


  • どこからでも ssh のアクセスを許可する
  • ローカルホストからのアクセスを許可する
  • それ以外は、許可しない
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT

iptables の設定と起動

% sudo cp ./iptables /etc/sysconfig/iptables
% sudo service iptables start
iptables: Applying firewall rules:                         [  OK  ]

iptables の設定の保存と復元

iptables-save コマンドでは、iptablesの設定を標準出力に出します。

iptables-save > iptables.save

iptables-restore は、iptables の設定を読み込み、iptables に反映します。

iptables-restore < iptables.save

iptables-save の実行例。

% iptables-save
# Generated by iptables-save v1.4.7 on Sat Apr 27 15:26:09 2013
*filter
:INPUT ACCEPT [79:6000]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [66:7992]
COMMIT
# Completed on Sat Apr 27 15:26:09 2013

iptables の設定を保存する

iptables コマンドで設定した情報は、 save を実行しないと保存されません。

% sudo service iptables save

関連項目