Top > セキュリティ > ファイアウォールの設定【iptables】 | ||||
ファイアウォールの設定【iptables】
2012 - 08/25 [Sat] - 15:34
◆よく使うコマンド
◆iptablesの書式
# iptables [コマンド] [チェイン] [ルール] [ターゲット] [オプション]
◆具体的な使用
NetBIOS : 137, 138, 139 / tcp, udp
に対して許可を出す場合
# iptables -I INPUT 5 -p udp --dport 137 -j ACCEPT
# iptables -I INPUT 5 -p tcp --dport 137 -j ACCEPT
# iptables -I INPUT 5 -p udp --dport 138 -j ACCEPT
# iptables -I INPUT 5 -p tcp --dport 138 -j ACCEPT
# iptables -I INPUT 5 -p udp --dport 139 -j ACCEPT
# iptables -I INPUT 5 -p tcp --dport 139 -j ACCEPT
# service iptables save
ちなみに tcp と udp をまとめて all で設定できないかと試したところ、all には icmp も入り、ICMPはポート指定できないのでerrorになります。面倒ですが両方設定しましょう。
-A でなく -I で挿入しているのは、私の環境では最後に「全てのパケットを破棄」する設定が書いてあるからです。iptables の設定は上から順に優先されるので、「全てのパケットを破棄」の後ろに何か許可設定を書いても意味がありません。「全てのパケットを破棄」する設定がなければ普通に -A でOKです。
すべて拒否する設定は
# iptables -A INPUT -p all -j REJECT --reject-with icmp-host-unreachable
です。
◆確認
nmapで調べる場合は「nmapの使い方」を参考にしてください。
# yum install nmap
でインストールできます。
今回は別のネットワーク監視ツール「iptstate」をインストールします。topコマンドのようなツールです。
$ sudo yum install iptstate
起動は
$ sudo iptstate
表示の切り替えコマンド
d カラムのサイズを動的に変更して、古いデフォルトのサイズを使用する
f loopback でフィルタリングする
l IPアドレスの中で DNS を探している順にする
m ホスト名を切り取った形でフィルタリングする
n DNS に関連した表示にする
q 終了する
r 逆順に並び替える
space 表示をすぐに更新する
◆iptables 初期設定解説
iptables はデフォルトではこのような初期設定になっていると思います。
各行を順に解説します。
1行目:established(接続が確立している)なパケットと、related(接続を許可したパケットのプロトコルに関連のあるftp-dataのようなパケット)の接続を許可
2行目:pingを通すか通さないかです。
3行目「iptables –L –n –v」とオプションをつけると分かりますが、これは「lo」インタフェースを通るパケットを通す、という設定です。
4行目:SSHです。
5行目:上記以外のアクセスを全て排除します。
◆ログ出力先の指定
異常なログを別で出力します。
# emacs /etc/rsyslog.conf
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
kern.debug /var/log/iptables_reject.log
# Log anything (except mail) of level info or higher.
編集したら再起動
#/etc/init.d/rsyslog restart
ログの取得をiptablesに追記。ターゲットLOGはREJECTの前に挿入してください。
#iptables -I INPUT 5 -j LOG --log-level debug --log-prefix '[REJECT]:'
#service iptables save
ソース:
iptables パケットフィルタリング
CentOS 5.6 iptablesのログ出力を行う
IP Tablesの状態をTop形式で表示するiptstate
FWの設定です。今回はLinux標準の iptables について。
Ubuntuには別で ufw というFWツールがあるので、基本的には操作が簡単な ufw を使用することをオススメします。
今回はCentOSでの話です。
◆サービスの起動
# /etc/init.d/iptables start
自動起動するように
# chkconfig iptables on
◆よく使うコマンド
現在の設定を確認 (ルールは上から順に有効) | # iptables -L -n |
ルールの追加 | # iptables -A INPUT -i lo -j ACCEPT //ローカルホストからのパケットを全て許可 # iptables -A INPUT -p tcp --dport 80 -j ACCEPT //http のパケットの許可(ポートの開放) |
ルールの削除 | # iptables -D INPUT -p tcp --dport 80 -j ACCEPT //http のパケットの拒否 |
設定の保存 (これをしないと再起動した時に設定が無効) | # service iptables save |
◆iptablesの書式
# iptables [コマンド] [チェイン] [ルール] [ターゲット] [オプション]
コマンド | -A | チェインにルールを追加 |
-D | チェイン内の指定したルールを削除 | |
-E | チェイン名の変更 | |
-F | チェイン内のルールを全て変更 | |
-L | ルールのリスト表示 | |
-P | チェインのポリシーを変更 | |
主なチェイン | INPUT | 入力パケット |
OUTPUT | 出力パケット | |
FORWARD | 転送パケット | |
主なルール | -s IPアドレス | 送信元のIPアドレス |
-d IPアドレス | 送信先のIPアドレス | |
-pプロトコル | プロトコルの種類(tcp, udp, icmp, allから選択) | |
-i インターフェース | 入力インターフェース名 | |
-o インターフェース | 出力インターフェース名 | |
-j ターゲット | ターゲット | |
--sport | 送信元のポート番号 | |
--dport | 送信先のポート番号 | |
ターゲット | ACCEPT | パケットの通過許可 |
DROP | パケットを破棄 | |
REJECT | パケットを破棄(送信元にICMPパケットを送らない) | |
REDIRECT | パケットを転送(送信元にICMPパケットで通知) |
◆具体的な使用
NetBIOS : 137, 138, 139 / tcp, udp
に対して許可を出す場合
# iptables -I INPUT 5 -p udp --dport 137 -j ACCEPT
# iptables -I INPUT 5 -p tcp --dport 137 -j ACCEPT
# iptables -I INPUT 5 -p udp --dport 138 -j ACCEPT
# iptables -I INPUT 5 -p tcp --dport 138 -j ACCEPT
# iptables -I INPUT 5 -p udp --dport 139 -j ACCEPT
# iptables -I INPUT 5 -p tcp --dport 139 -j ACCEPT
# service iptables save
ちなみに tcp と udp をまとめて all で設定できないかと試したところ、all には icmp も入り、ICMPはポート指定できないのでerrorになります。面倒ですが両方設定しましょう。
-A でなく -I で挿入しているのは、私の環境では最後に「全てのパケットを破棄」する設定が書いてあるからです。iptables の設定は上から順に優先されるので、「全てのパケットを破棄」の後ろに何か許可設定を書いても意味がありません。「全てのパケットを破棄」する設定がなければ普通に -A でOKです。
すべて拒否する設定は
# iptables -A INPUT -p all -j REJECT --reject-with icmp-host-unreachable
です。
◆確認
nmapで調べる場合は「nmapの使い方」を参考にしてください。
# yum install nmap
でインストールできます。
今回は別のネットワーク監視ツール「iptstate」をインストールします。topコマンドのようなツールです。
$ sudo yum install iptstate
起動は
$ sudo iptstate
表示の切り替えコマンド
d カラムのサイズを動的に変更して、古いデフォルトのサイズを使用する
f loopback でフィルタリングする
l IPアドレスの中で DNS を探している順にする
m ホスト名を切り取った形でフィルタリングする
n DNS に関連した表示にする
q 終了する
r 逆順に並び替える
space 表示をすぐに更新する
◆iptables 初期設定解説
iptables はデフォルトではこのような初期設定になっていると思います。
各行を順に解説します。
1行目:established(接続が確立している)なパケットと、related(接続を許可したパケットのプロトコルに関連のあるftp-dataのようなパケット)の接続を許可
2行目:pingを通すか通さないかです。
3行目「iptables –L –n –v」とオプションをつけると分かりますが、これは「lo」インタフェースを通るパケットを通す、という設定です。
4行目:SSHです。
5行目:上記以外のアクセスを全て排除します。
◆ログ出力先の指定
異常なログを別で出力します。
# emacs /etc/rsyslog.conf
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
kern.debug /var/log/iptables_reject.log
# Log anything (except mail) of level info or higher.
編集したら再起動
#/etc/init.d/rsyslog restart
ログの取得をiptablesに追記。ターゲットLOGはREJECTの前に挿入してください。
#iptables -I INPUT 5 -j LOG --log-level debug --log-prefix '[REJECT]:'
#service iptables save
ソース:
iptables パケットフィルタリング
CentOS 5.6 iptablesのログ出力を行う
IP Tablesの状態をTop形式で表示するiptstate