§ 2.7 测试
以 eth1 做为对内的网络介面,其虚拟 IP 位址为 192.168.1.0 ~ 192.168.1.255,因为其第一个为网络号码,最后一个为广播号,所以可用的虚拟 IP 为 192.168.0.1 ~ 192.168.255.254,我们将闸道器(gateway)设为 192.168.0.1、子网络遮罩设为 255.255.255.0,将 192.168.1.2 ~ 192.168.1.254 之间的 IP 分配给内部的机器,之后内部的机器就可以互相通讯(‘ping’),但对于要连出去,还需要一个步骤,那就是使用一支程序,ipchains 来达成这个目的。先针对上述的问题,如果要让内部的机器连接到外部的网络,可先执行:
/sbin/ipchains -A forward -s 192.168.0.0/24 - d 0.0.0.0/0 -j MASQ
/sbin/ipchains -P forward DENY
第一个命令会将来源 192.168.0.0 ~ 192.168.255.255 的封包使用 IP 伪装,将伪装的封包送转送给预设的路由,到外部的网络。
第二个命令会将 forward 的预设政策设为 DENY。
你可以将这两行命令加在 /etc/rc.d/rc.local 档案中,使其每次开机时执行。
对于 ipchains 的使用,会在下面作更详细的说明。
第 3 章 封包过滤防火墙ipchains
若你使用的是新版的 Linux,里面都会有 ipchains 的套件,直接使用就可以让你建立封包过滤防火墙。
§ 3.1 ipchains语法
其选项、来源 ip、目的地 ip、port 可以不加,表示为全部。
ipchains语法:
ipchains 命令 input/forward/output 选项 源ip Port 目的ip port -j目标
范例: ipchains -A input -p all -s 192.168.1.2 -d eef.oit.edu.tw 23 -j DENY
§ 3.2 ipchains命令
可以有两种形式来指定,全名方式或缩写方式来表示
--add -A 增加新的 ipchains 规则
--delete -D 删除第一个 ipchains 规则,或某一个 ipchains 规则
--inser -I 插入一个新 ipchains 规则,其插入需指定规则中的数字,如果数字为 1 表示为第一个。
--replace -R 取代所选择的规则,其取代需指定规则中的数字。
--list -L 列出所选择设定的 ipchains 规则,如果没有规则被指定,会列出所有的规则出来。
--flush -F 将某个 ipchains 规则清除(例如:input、output、forward)这相当于去删除掉规则的功效。
--zero -Z 将所有规则中的封包和位元组计数器归零它也可以去指定-L, --list (list) 选项,会先列出之前的资料,再列出归零的资料。
--check -C 检查封包是否违反所设的规则,这是一个相当有用的测试,其是-s (来源), -d (目的地), -p(协定), -i (界面)更是必要。
--new -N 产生一个新的使用者定义规则(user-defined)。
--delete-chain -X 删除使用者定义的规则,如果没有指定任何的参数,它将会所有的定义的规则。
--policy -P 设定目标的政策,只有 input,forward,output 可以去设定。
--masquerade -M 这个选项可以去查看现在的伪装连接状况(须加上-L 选项),或是去设定 kernel 伪装参数(-S选项)。
--set -S 设定伪装停止时间变数
--help -h 列出描述命令语法的说明。
§ 3.3 ipchains参数选项
可以有两种形式来指定,全名方式或缩写方式来表示
使用’!’去定义相反的意义:惊叹号’!’有’not’的意义,有许多选项可以加上’!’去使用,表示不是的意思。
例如: -s ! localhost
说明: 表示除了localhost的来源位址都可以。
--proto -p [!] protocol 协定:可以用数字或名字,例如:tcp、icmp、udp及all。
范例:
ipchains -A input -p tcp -s 192.168.1.3 -d eef.oit.edu.tw ftp -j DENY
说明:
源地址为 192.168.1.3 的主机不能对 eef.oit.edu.tw 这台主机做 ftp 的动作请求。
-- source -s [!] 指定来源位址。
--source-port [!] port 指定来源的port。
--destination -d [!] 指定目的地位址
--destination-port [!] 指定目的地的port
--icmp-type [!] 类型名称,指定ICMP类型
--interface -i [!] 网络接口名称 ,lo、eth0、eth1。
-- jump -j 指定规则的目标,如果没有指定的话,这条规则算是没有用处。
--numeric -n 取消DNS查询,直接使用IP
-- log -l 将关于ipchains的讯息记录起来,记录于/var/log/messages内。
-- verbose -v 完整模式,会列出界面名称、规则、TOS伪装,封包和位元组计数也会列出,须和-L一起使用。
[!] --syn -y 只有当SYN设定时才会符合TCP封包
--TOS -t Type Of Service
[!] --version -V 列出ipchains的版本
--bidirectional -b 双向模式