-----原始郵件-----
寄件者: borchen.bbs@vlsi1.csie.ncku.edu.tw
<borchen.bbs@vlsi1.csie.ncku.edu.tw>
收件者: netman2000@crosswinds.net <netman2000@crosswinds.net>
日期: 星期六, 1 一月 2000 PM 15:01
主旨: Re: ???????????? (?????O?n???]?w...)


>發信人: borchen (搖屁屁小水鴨)
>標  題: Re: 防火牆的疑問 (我不是要問設定...)
>日  期: Sat Jan  1 12:01:48 2000
>
>: 【原信件中提到】
>: 搖屁屁小水鴨 撰寫於文章 <3YFiJQ$ITn@vlsi1.iie.ncku.edu.tw>...
>: 只要有網絡界面的存在﹐您都可以使用火牆。只不過如果只有一個界面的話﹐其
>: forward 功能就沒有了﹐但基本的 input 和 output 還是可以設定的。
>
>    所以如果我拿貴站 所設定 簡單防火牆 的設定,將
>    有 forward 該行都拿掉 亦可?

如果您只有一個界面的話﹐看來有沒有 forward 都沒關係。拿掉不拿掉並不影響到界
面本身的設定。
我們要設定火牆﹐通常有三個 chains 要追蹤﹕
input﹐可以限制哪些封從這個界面傳入
output, 可以限制哪些封包從這個界面傳出
forward, 可以限制哪些封包從哪個界面傳到哪個界面。

雖然還不知道您所用的界面是什麼﹐如果只有一個的話﹐只設定 input 和 output 就
可以了﹐如﹕

# 允許本地網路﹕
ipchains -A input  -i lo -j ACCEPT
ipchains -A output -i lo -j ACCEPT
ipchains -A input  -i eth0 -j ACCEPT
ipchains -A output -i eth0 -j ACCEPT
(如果不設定 lo 的話﹐可能(不肯定﹐自己試試吧)本機的存儲不工作了)

# 限制傳入﹕
ipchains -A input  -j DENY -i eth0 -s  203.75.73.150/29  -d 0.0.0.0/0
# 限制傳出﹕
ipchains -A output -j DENY -i eth0 -s  203.75.73.150/29  -d 0.0.0.0/0
#只允許回應封包傳入﹕
ipchains -A input -p TCP -j ACCEPT -i eth0 ! -y -s 0.0.0.0/0

....... 等等﹐諸如此類。

>    又,我去看過很多站的 防火牆範例,都是拿 虛擬 ip
>    來當內部區域網路的 ip,對於這個我似乎沒有太大的

這可能是他們使用 NAT (Network Address Tranlating) 技術﹐在火牆上用 ip aliase
傾聽外部的請求﹐再把請求重導向(redirect) 到內部地址用的。

>    意義,因為我是直接 用真實 ip 來當剛 linux 工作站
>    ip 之用,不曉得拿你那邊的設定,必須要更改什麼地方?
>    以下識我在 rc.local 後方 加入的 設定,不曉得是否有誤?(參考自貴站)
>    我只去掉以下的設定:
>      ipchains -P forward DENY
>      # 如果您使用 SSH 的話﹐考慮開放下面句子
>      #ipchains -A output -p TCP -j ACCEPT -i ppp0 -s $ALL ssh -t 0x01 0x10
>      #ipchains -A output -p UDP -j ACCEPT -i ppp0 -s $ALL ssh -t 0x01 0x10
>      #ipchains -A input -p TCP -j ACCEPT -i ppp0 ! -y -d $ALL ssh -t 0x01
0x10
>      #ipchains -A input -p UDP -j ACCEPT -i ppp0 -d $ALL ssh -t 0x01 0x10
>    而以下是 /etc/sysconfig/network 設定:
>     NETWORKING=yes
>     FORWARD_IPV4=yes
>     HOSTNAME=king.smallduck.t3c.net
>     DOMAINNAME=smallduck.t3c.net
>     #GATEWAY=203.75.73.145
>     GATEWAYDEV=eth0
>    而以下是 /etc/sysconfig/network-scripts/ifcfg-eth0 設定:
>     DEVICE=eth0
>     IPADDR=203.75.73.150
>     NETMASK=255.255.255.248
>     NETWORK=203.75.73.144
>     BROADCAST=203.75.73.151
>     ONBOOT=yes
>     BOOTPROTO=none
>
>   不曉得這樣的設定,是否有錯誤?是否能夠提點一二? 非常感謝...


您暫時用下面的 script 試試吧。如果您用在商業用途﹐請先聯絡 pgsery@swcp.com
以獲得許可。


#!/bin/sh
# Paul Sery, pgsery@swcp.com
#April 27, 1999
#
# Copyright (C) 1999 by Paul Sery
# Redistribution of this file is permitted under the terms of the GNU
# General Public License (GPL)
# Please look for updates to these rules at
http://www.swcp.com/~pgsery/RHBIZ
#
# ------------- 設定變數--------------
HI="1024:65535"
ALL="0.0.0.0/0"
PRIV_NET="203.75.73.144/29"
LOCAL_HOME="203.75.73.150/29"
IF="eth0"
# -------------清理------------------
ipchains -Fipchains -X
# 全部 DENY
ipchains -P input   DENY
ipchains -P output  DENY
ipchains -P forward DENY
# 允許本地網路
ipchains -A input  -i lo -j ACCEPT
ipchains -A output -i lo -j ACCEPT
ipchains -A input  -i eth0 -j ACCEPT
ipchains -A output -i eth0 -j ACCEPT
# 限制 界面 eth0
ipchains -A input  -j DENY -i $IF -s $LOCAL_HOME    -d $ALL
ipchains -A output -j DENY -i $IF -s $PRIV_NET -d $ALL
# 設定常用協定及優化處理
ipchains -A output -p TCP -j ACCEPT -i $IF -d $ALL telnet -t 0x01 0x10
ipchains -A output -p TCP -j ACCEPT -i $IF -d $ALL www -t 0x01 0x10
ipchains -A output -p TCP -j ACCEPT -i $IF -d $ALL ftp -t 0x01 0x10
ipchains -A output -p TCP -j ACCEPT -i $IF -d $ALL https -t 0x01 0x10
ipchains -A output -p TCP -j ACCEPT -i $IF -d $ALL ftp-data -t 0x01 0x08
ipchains -A output -p TCP -j ACCEPT -i $IF -d $ALL nntp  -t 0x01 0x02
ipchains -A output -p TCP -j ACCEPT -i $IF -d $ALL pop-3  -t 0x01 0x02
ipchains -A output -p TCP -j ACCEPT -i $IF -d $ALL imap  -t 0x01 0x02
ipchains -A output -p TCP -j ACCEPT -i $IF -d $ALL smtp  -t 0x01 0x02
# 開放 DNS
ipchains -A output -p UDP -j ACCEPT -i $IF -d $ALL domain
ipchains -A input -p UDP -j ACCEPT -i $IF -s $ALL domain
# 如果您使用 SSH 的話﹐考慮開放下面句子
#ipchains -A output -p TCP -j ACCEPT -i $IF -s $ALL ssh -t 0x01 0x10
#ipchains -A output -p UDP -j ACCEPT -i $IF -s $ALL ssh -t 0x01 0x10
#ipchains -A input -p TCP -j ACCEPT -i $IF ! -y -d $ALL ssh -t 0x01 0x10
#ipchains -A input -p UDP -j ACCEPT -i $IF -d $ALL ssh -t 0x01 0x10
# 只允許回應封包進入
ipchains -A input -p TCP -j ACCEPT -i $IF ! -y -s $ALL
#允許 FTP
ipchains -A input -p TCP -j ACCEPT -i $IF -s $ALL ftp-data
# 設定 log
echo "ipchains.rules up at `date`" >> /var/log/ipchains.log


我一早就已經在“網絡基礎”中指出﹕設定火牆是一件非常複雜的事情﹐您需要慎密的
規劃和反復的測試。我不敢保證上面的 script 合您用﹐我建議您最好將每一行的意思
都讀懂了才好執行。

祝順利﹗

網中人