#!/bin/bash
#
# Firewall Script - Version 0.9.1
#
# chkconfig: 2345 09 99
# 概要: 2.2.x カーネル用ファイアウォールスクリプト
# テストの際には
# -x を追加すること。
#
# 注意 -
#
# このスクリプトは RedHat 6.0 及びそれ以降のバージョン向けに書かれて
# います。
#
# ウェブや ftp サーバのような公開サービスを提供する場合は注意して
# ください。
#
# インストール -
# 1. /etc/rc.d/init.d の中にこのファイルを置きます。
# (root にならなければならないでしょう...)
# "firewall" のような名前にします :-)
# 所有権を root にします --> "chown root.root (ファイル名)"
# 実行属性を立てます --> "chmod 755 (ファイル名)"
#
# 2. ファイアウォールルールを作る為に GFCC を使い、
# ファイル /etc/gfcc/rules/firewall.rule.sh に書き写します。
#
# 3. RedHat の init スクリプトにファイアウォールを
# 追加します --> "chkconfig --add (ファイル名)"
# 次回ルータを起動すると firewall サービスが自動的に起動するはずです!
# *前より少しは* 脆弱でなくなっているので、夜はぐっすり寝てください。
#
# リリースノート
# 30 Jan, 2000 - GFCC スクリプトに変更
# 11 Dec, 1999 - Mark Grennan <mark@grennan.com> による更新
# 20 July, 1999 - 最初の作品 - Anthony Ball <tony@LinuxSIG.org>
#
################################################
# 関数ライブラリを読み込みます。
. /etc/rc.d/init.d/functions
# ネットワーク設定を読み込みます。
. /etc/sysconfig/network
# ネットワークが起動しているかチェックします。
[ ${NETWORKING} = "no" ] && exit 0
# 何が呼び出されたかを見ます。
case "$1" in
start)
# アクセス機能の提供を開始します。
action "Starting firewall: " /bin/true
/etc/gfcc/rules/firewall.rule.sh
action "Loading firewall modules: " /bin/true
# /sbin/insmod ip_masq_autofw
# /sbin/insmod ip_masq_suseeme
/sbin/insmod ip_masq_ftp
/sbin/insmod ip_masq_irc
# /sbin/insmod ip_masq_mfw
# /sbin/insmod ip_masq_portfw
# /sbin/insmod ip_masq_quake
/sbin/insmod ip_masq_raudio
# /sbin/insmod ip_masq_user
# /sbin/insmod ip_masq_vdolive
echo
;;
stop)
action "Stoping firewall: " /bin/true
echo 0 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
echo
;;
restart)
action "Restarting firewall: " /bin/true
$0 stop
$0 start
echo
;;
status)
# 設定内容をリスト表示します。
/sbin/ipchains -L
;;
test)
action "Test Mode firewall: " /bin/true
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -A input -j ACCEPT
/sbin/ipchains -A output -j ACCEPT
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -i $PUBLIC -j MASQ
echo
;;
*)
echo "Usage: $0 {start|stop|restart|status|test}"
exit 1
esac
このスクリプトは Graphical Firewall program (GFCC) によって 生成されました。 これは動作するルールセットではありません。 転写されたルールセットです。
#!/bin/sh # Gtk+ ファイアウォールコントロールセンターが生成しました。 IPCHAINS=/sbin/ipchains localnet="192.168.1.0/24" firewallhost="192.168.1.1/32" localhost="172.0.0.0/8" DNS1="24.94.163.119/32" DNS2="24.94.163.124/32" Broadcast="255.255.255.255/32" Multicast="224.0.0.0/8" Any="0.0.0.0/0" mail_grennan_com="192.168.1.1/32" mark_grennan_com="192.168.1.3/32" $IPCHAINS -P input DENY $IPCHAINS -P forward ACCEPT $IPCHAINS -P output ACCEPT $IPCHAINS -F $IPCHAINS -X # input ルール $IPCHAINS -A input -s $Any -d $Broadcast -j DENY $IPCHAINS -A input -p udp -s $Any -d $Any netbios-ns -j DENY $IPCHAINS -A input -p tcp -s $Any -d $Any netbios-ns -j DENY $IPCHAINS -A input -p udp -s $Any -d $Any netbios-dgm -j DENY $IPCHAINS -A input -p tcp -s $Any -d $Any netbios-dgm -j DENY $IPCHAINS -A input -p udp -s $Any -d $Any bootps -j DENY $IPCHAINS -A input -p udp -s $Any -d $Any bootpc -j DENY $IPCHAINS -A input -s $Multicast -d $Any -j DENY $IPCHAINS -A input -s $localhost -d $Any -i lo -j ACCEPT $IPCHAINS -A input -s $localnet -d $Any -i eth1 -j ACCEPT $IPCHAINS -A input -s $localnet -d $Broadcast -i eth1 -j ACCEPT $IPCHAINS -A input -p icmp -s $Any -d $Any -j ACCEPT $IPCHAINS -A input -p tcp -s $Any -d $Any -j ACCEPT ! -y $IPCHAINS -A input -p udp -s $DNS1 domain -d $Any 1023:65535 -j ACCEPT $IPCHAINS -A input -p udp -s $DNS2 domain -d $Any 1023:65535 -j ACCEPT $IPCHAINS -A input -p tcp -s $Any -d $Any ssh -j ACCEPT $IPCHAINS -A input -p tcp -s $Any -d $Any telnet -j ACCEPT $IPCHAINS -A input -p tcp -s $Any -d $Any smtp -j ACCEPT $IPCHAINS -A input -p tcp -s $Any -d $Any pop-3 -j ACCEPT $IPCHAINS -A input -p tcp -s $Any -d $Any auth -j ACCEPT $IPCHAINS -A input -p tcp -s $Any -d $Any www -j ACCEPT $IPCHAINS -A input -p tcp -s $Any -d $Any ftp -j ACCEPT $IPCHAINS -A input -s $Any -d $Any -j DENY -l # forward ルール $IPCHAINS -A forward -s $localnet -d $Any -j MASQ # output ルール
これは手書きで構築したファイアウォールのルールセットです。 GFCC は使いません。
#!/bin/bash
#
# Firewall Script - Version 0.9.0
# chkconfig: 2345 09 99
# 概要: 2.2.x カーネル用ファイアウォールスクリプト
# テストの際には
# -x を追加すること。
#
# 注意 -
#
# このスクリプトは RedHat 6.0 及びそれ以降のバージョン向けに書かれています。
#
# このファイアウォールスクリプトは、大部分のダイアルアップかケーブルモデム
# を使用したルータで動く筈です。
# RedHat ディストリビューション用に作成しました。
#
# web や ftp サーバのような公開サービスを提供する場合は注意してください。
#
# インストール -
# 1. このファイルは RedHat システム用に作られています。このままで他の
# ディストリビューションでも動くと思いますが、もう一度確認した方が
# いいでしょう。
# もしかして動かないかもしれないから?!!?
# これらの手順は RedHat システムに適用します。
#
# 2. /etc/rc.d/init.d の中にこのファイルを置きます (root になって...)
# "firewall" のような名前にします :-)
# 所有権を root にします --> "chown root.root <ファイル名>"
# 実行権をつけます --> "chmod 755 <ファイル名>"
#
# 3. ネットワーク、使用するインターフェース、DNS サーバの設定をします。
# uncomment で始まる行の下で、受付けサービスを選択し有効にします。
# "eth0" が使用する NIC か確認します (或はあなたのシステムのネットワーク
# インターフェース名に変更します)。
# テストするには --> "/etc/rc.d/init.d/<ファイル名> start"
# ルールを一覧するには --> "ipchains -L -n"
# 誤りがあれば修正しましょう... :-)
#
# 4. RedHat の init スクリプトにファイアウォールを追加します
# --> "chkconfig --add <ファイル名>"
# 次回ルータを起動すると firewall サービスが自動的に起動するはずです!
# *前より少しは* 脆弱でなくなっているので、夜はぐっすり寝てください。
#
# リリースノート
# 20 July, 1999 - 最初の作品 - Anthony Ball <tony@LinuxSIG.org>
# 11 Dec, 1999 - Mark Grennan <mark@grennan.com> による更新
#
################################################
# あなたのローカルネットワークに適合する値を記入してください。
PRIVATENET=xxx.xxx.xxx.xxx/xx
PUBLIC=ppp0
PRIVATE=eth0
# あなたの dns サーバの設定
DNS1=xxx.xxx.xxx.xxx
DNS2=xxx.xxx.xxx.xxx
################################################
# ネットワークの設定に用いる汎用的な値を定義します。
ANY=0.0.0.0/0
ALLONES=255.255.255.255
# 関数ライブラリを読み込みます。
. /etc/rc.d/init.d/functions
# ネットワーク設定を読み込みます。
. /etc/sysconfig/network
# ネットワークが起動しているかチェックします。
[ ${NETWORKING} = "no" ] && exit 0
# 何が呼び出されたかを見ます。
case "$1" in
start)
# アクセス機能の提供を開始します。
action "Starting firewall: " /bin/true
##
## 環境設定
##
# 全てのチェインのリストを全消去します。
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
# input チェインに蓋をかぶせて、全てのポートをふさぎます。
/sbin/ipchains -I input 1 -j DENY
# ポリシーを否定 (DENY) に設定します。 (デフォルトはACCEPT)
/sbin/ipchains -P input DENY
/sbin/ipchains -P output ACCEPT
/sbin/ipchains -P forward ACCEPT
# パケットフォワーディングを有効にします。
echo 1 > /proc/sys/net/ipv4/ip_forward
##
## モジュールのインストール
##
# アクティブ ftp モジュールを読み込みます。
# ローカルネットワーク上のマシンに非パッシヴ ftp アクセスが
# できるようにします。
# (但し、ルータ自身はマスカレードされていないので除外されます。)
if ! ( /sbin/lsmod | /bin/grep masq_ftp > /dev/null ); then
/sbin/insmod ip_masq_ftp
fi
##
## セキュリティ関係
##
# 現存するネットワークインターフェースおよび今後発生するであろう
# ネットワークインターフェースに対し、発信アドレスの立証と偽装保護を
# 有効にします。
#
#
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done
else
echo
echo "PROBLEMS SETTING UP IP SPOOFING PROTECTION. BE WORRIED."
echo
fi
# 現存する全てのネットワークインターフェースのブロードキャストを
# 否定します。
/sbin/ipchains -A input -d 0.0.0.0 -j DENY
/sbin/ipchains -A input -d 255.255.255.255 -j DENY
# これらはログ記録することなく否定します。
/sbin/ipchains -A input -p udp -d $ANY 137 -j DENY # NetBIOS over IP
/sbin/ipchains -A input -p tcp -d $ANY 137 -j DENY # ""
/sbin/ipchains -A input -p udp -d $ANY 138 -j DENY # ""
/sbin/ipchains -A input -p tcp -d $ANY 138 -j DENY # ""
/sbin/ipchains -A input -p udp -d $ANY 67 -j DENY # bootp
/sbin/ipchains -A input -p udp -d $ANY 68 -j DENY # ""
/sbin/ipchains -A input -s 224.0.0.0/8 -j DENY # Multicast addresses
##
## プライベートネットワークから発するパケットを許可します。
##
# ループバックインターフェース上の全てのパケットを許可します。
/sbin/ipchains -A input -i lo -j ACCEPT
# 内部の "信頼できる" インターフェースから発せられるパケットを全て
# 許可します。
/sbin/ipchains -A input -i $PRIVATE -s $PRIVATENET -d $ANY -j ACCEPT
/sbin/ipchains -A input -i $PRIVATE -d $ALLONES -j ACCEPT
##
## ファイアウォールへの外部サービスを許可します。
##
# ICMP を許可します。
/sbin/ipchains -A input -p icmp -j ACCEPT
# TCP を許可します。
# 【訳注: tcp syn パケット以外を許可します。】
/sbin/ipchains -A input -p tcp ! -y -j ACCEPT
# (ファイアウォール上の)DNS探索を許可します。
/sbin/ipchains -A input -p udp -s $DNS1 domain -d $ANY 1023: -j ACCEPT
/sbin/ipchains -A input -p udp -s $DNS2 domain -d $ANY 1023: -j ACCEPT
# あるいは (より良い案として) キャッシュ DNS サーバをルータ上で
# 稼動させ、上記の代わりに以下の行を用います。
# /sbin/ipchains -A input -p udp -s $DNS1 domain -d $ANY domain -j ACCEPT
# /sbin/ipchains -A input -p udp -s $DNS2 domain -d $ANY domain -j ACCEPT
# 以下の行で ssh を許可します。
/sbin/ipchains -A input -p tcp -d $ANY 22 -j ACCEPT
# 以下の行で telnet を許可します。 (お薦めしません!!)
/sbin/ipchains -A input -p tcp -d $ANY telnet -j ACCEPT
# 以下の行でルータに NTP (network time protocol: ネットワーク
# タイムプロトコル) を許可します。
# /sbin/ipchains -A input -p udp -d $ANY ntp -j ACCEPT
# SMTP を許可します。 (メールクライアントの為ではありません - サーバ
# だけです)
/sbin/ipchains -A input -p tcp -d $ANY smtp -j ACCEPT
# POP3 を許可します。(メールクライアント用)
/sbin/ipchains -A input -p tcp -d $ANY 110 -j ACCEPT
# メール送信または ftp アクセスに用いる auth プロトコルを
# 許可します。
/sbin/ipchains -A input -p tcp -d $ANY auth -j ACCEPT
# 外部からの HTTP アクセスを許可します。
# (ルータ上で web サーバを稼働している場合に限ります。)
/sbin/ipchains -A input -p tcp -d $ANY http -j ACCEPT
# 外部からの FTP アクセスを許可します。
/sbin/ipchains -A input -p tcp -d $ANY ftp -j ACCEPT
##
## マスカレード関係
##
# 内部ネットワークから転送されたパケットをマスカレードします。
/sbin/ipchains -A forward -s $PRIVATENET -d $ANY -j MASQ
##
## 上記以外の全てを拒否し、 /var/log/messages へログ記録します。
##
/sbin/ipchains -A input -l -j DENY
# input チェインにかぶせていた蓋を取り外します。
/sbin/ipchains -D input 1
;;
stop)
action "Stoping firewall: " /bin/true
echo 0 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
echo
;;
restart)
action "Restarting firewall: " /bin/true
$0 stop
$0 start
echo
;;
status)
# 設定内容をリスト表示します。
/sbin/ipchains -L
;;
test)
##
## とても単純なファイアウォールのテストです。
## (*全く*セキュアではありません)
## 【訳注: パケットフィルタリングの設定を全て取り払い、
## マスカレードの設定のみ有効にします。
## この設定は長時間続けてはなりません。】
action "WARNING Test Firewall: " /bin/true
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -A input -j ACCEPT
/sbin/ipchains -A output -j ACCEPT
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -i $PUBLIC -j MASQ
echo
;;
*)
echo "Usage: $0 {start|stop|restart|status|test}"
exit 1
esac