#!/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