chibi style
    

Home > Debian > 基本設定 > iptablesでパケットフィルタリング

iptablesでパケットフィルタリング

ルータ配下にあるサーバマシンを想定して、パケットフィルタリングの設定を行なう。
iptablesコマンドで順次ルールを追加して保存ということもできるが、ここではスクリプトを作成し、
このスクリプトを実行することで、パケットフィルタリングできるようにする。

/rootにfirewall.shという名前で以下のスクリプトを作成した。

# vi firewall.sh

#!/bin/sh
#
# NAME:
#     firewall.sh
#
#
################################################################################
# 基本設定
################################################################################
#
# 変数の設定
#
LOCALNET=192.168.1.0/24           # LANネットワーク(自分の環境に)
IPTABLES='/sbin/iptables'         # iptablesコマンド
#
# ルールの初期化
#
/sbin/iptables -F
#
# デフォルトのルール設定
#
$IPTABLES -P INPUT DROP           # インバウンド、基本は破棄
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP          # アウトバンド、基本は破棄
#
# ループバックアドレス
#
$IPTABLES -A INPUT -i lo -j ACCEPT          # ローカルホストからのものは許可
$IPTABLES -A OUTPUT -o lo -j ACCEPT         # ローカルホストから出るものは許可


################################################################################
# INPUTチェイン
################################################################################

# LAN内からの接続を許可
$IPTABLES -A INPUT -s $LOCALNET -j ACCEPT

# 接続済みは許可
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#
# 外部へ公開するサービス
# ここにサービスで使用するポートを追加する
#
$IPTABLES -A INPUT -p tcp --dport 20 -m state --state NEW -j ACCEPT          # FTP-DATA
$IPTABLES -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT          # FTP
$IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT          # SSH
$IPTABLES -A INPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT          # SMTP
$IPTABLES -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT          # HTTP
$IPTABLES -A INPUT -p tcp --dport 110 -m state --state NEW -j ACCEPT         # POP3
$IPTABLES -A INPUT -p tcp --dport 143 -m state --state NEW -j ACCEPT         # IMAP
$IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT         # HTTPS
$IPTABLES -A INPUT -p tcp --dport 6010:6100 -m state --state NEW -j ACCEPT   # FTP PASV
$IPTABLES -A INPUT -p tcp --dport 995 -m state --state NEW -j ACCEPT         # POP3-SSL

# AUTHリクエスト拒否
$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset


################################################################################
# OUTPUTチェイン
################################################################################

# 接続済みは許可
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# サーバからインターネットへ新規接続を許可
$IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT


オールインワンサーバにおいて必要と思われるサービスのポートへのアクセスは許可の
設定にしているので、不要なものがあればそのサービスの行を削除していただきたい。
また、LAN内の他のマシンからの通信は全て許可の設定にしてある。INPUTチェインにあるFTP PASV
後にFTPサービスの設定をする際に、パッシブモードで使用するポートを6010〜6100に限定する予定なので予め記述しておいた。

このfirewall.shはwgetで入手できるようにしている。また、このスクリプトのハッシュ値は、
6ad958b93e358881fd62f04c4207b8d8 だ。wgetで入手した際は、確認してもらいたい。
入手方法とハッシュ値のチェック方法は以下の通りだ。

# wget http://chibi.name/download/firewall.sh
# md5sum firewall.sh
6ad958b93e358881fd62f04c4207b8d8  firewall.sh


このスクリプトの使い方だが、先ずは実行権限を与える。
そのあとで実行すればルールが適用されるようになっている。なお、ルール適用後にfirewall.shを
編集し、ルールを変更した場合には、再び実行すれば、ルールが適用されるようになっている。

# chmod 700 firewall.sh		←rootのみに実行権限
# ./firewall.sh			←実行
# iptables -L			←ルールを確認
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  192.168.1.0/24       anywhere
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp-data state NEW
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp state NEW
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh state NEW
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp state NEW
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www state NEW
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3 state NEW
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:imap2 state NEW
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https state NEW
ACCEPT     tcp  --  anywhere             anywhere            tcp dpts:6010:6100 state NEW
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3s state NEW
REJECT     tcp  --  anywhere             anywhere            tcp dpt:auth reject-with tcp-reset

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            state NEW


以上が確認できたら、このスクリプトがシステム起動時に実行され設定が反映されるようにする

# vi /etc/network/interfaces
auto eth0
iface eth0 inet static
        address 192.168.1.11
        network 192.168.1.0
        netmask 255.255.255.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        pre-up /root/firewall.sh	←追加(/rootにある場合の記述)


>>このページのTOPへ

最終更新 : 10/15/2005


Copyright © 2004-2007 chibi ,All Rights Reserved