荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: zzt (好好学习,天天向上), 信区: Linux
标 题: Linux中的防火墙 IPCHAINS和/proc/sys
发信站: BBS 荔园晨风 (Thu Sep 16 08:55:54 1999), 站内信件
Linux中的防火墙
IPCHAINS和/proc/sys
ipchains是linux中的新一代防火墙配置方式, 在ipchains中, 将防火墙规则
整理成chains, 一个 chains 中可以包含多条规则. 系统缺省建立了三条chains
: input output forward.
规则的样子象下面这样:
例如
-p tcp -d 192.168.1.7 80 -j ACCEPT
-p tcp -s 192.168.1.1 !80 -j DENY
-p指定协议 -d 指定目的地址 -s 指定源地址 -j 指定如何处理匹配该条规则
的ip包.
任何一个进入的包都要经过input的处理 任何出去的包都要经过output的处理
任何穿过该机器的包都要经过forward的处理.
一个穿过该机器的ip包
ip packet ----> input --------> forward -------> output ---->
chains chains chains
一个发往本机的ip包
ip packet ----> input ---->
chains
如果你不希望你的机器响应ping包括你可以这样作:
ipchains -A input -p icmp -j REJECT
-A是指在指定的chains中加入一条规则 这条规则是说所有进来的包如果它的协议
类型是icmp的话就抛弃它
ipchains -A input -p icmp -s 192.168.1.0/255.255.255.0 -j REJECT
这一条规则可以使192.168.1.0/255.255.255.0的机器ping不通你 其中的源地址
也可以写成 192.168.1.0/24
下面介绍一些常用的参数
-N chains_name new一个新的chains
-X chains_name delete一个空的chains
-A chains_name 在指定的chains中加入一条规则
-F chains_name 删除指定chains中的全部规则
-D chains_name 删出一条规则
-p protocol_name 协议的名字(tcp udp icmp)
-i interface_name 接口的名字
对于input来说是指包进入的接口
对于output来说是指包出去的接口
对于forward来说是指包出去的接口
-P chains rule 改变指定chains的策略(是指它的缺省处理方式)
下面讲一讲目标 就是-j后面的参数 它们可以是下列值
ACCEPT 接受 也就是说按正常方式处理它
REJECT 抛弃 好象根本没有收到过它
DENY 拒绝 有点象REJECT 但发送icmp包 报错
MASQ 作ip 伪装
REDIRECT 重定向到本地的一个端口(只限于tcp, udp)
RETURN 立即结束本chains的处理
Other_chains 跳到其他chains中继续处理
大家可以看到 正是由于 可以在chains之间跳来跳去的才使得它很方便
在指定协议后可以指定一些与协议相关的参数 例如tcp udp 中的端口号 icmp中的包文
类型
icmp
0 echo-reply
3 destination-unreachable
5 redirect
8 echo-request
11 time-exceeded
例如你只想拒绝ping的数据包 你可以这样
ipchains -A input -p icmp -s 192.168.1.7 0 -j DENY
下面看一看ip伪装
它通常用于这种情况 你只有少量的合法ip 却希望很多台机器可以上网 你使用一台
机器作
伪装 而其它的机器将他设成网关 这样大家就都可以上网了 实际上 这个网关起了一个
代理服
务器的作用 linux中还专门写了几个模块用于一些特殊的服务 如 FTP
(/lib/modules/2.2.5-15/ipv4/ip_masq_ftp.o). 注意 目标为MASQ的规则只能加在
forward中.
大家看一下下面的图
Internet
|
| eth0
-------------------- eth1
| 202.118.67.254
|---------------------202.118.67.252
-------------------- 202.118.67.253 WWW
server
192.168.1.1 | eth2
|
-----------------------------------------
subnet 192.168.1.0/255.255.255.0
这里用一台装了三块网卡的 Linux box 作网关 三快网卡的ip地址分别为
eth0 : 202.118.67.254 接internet
eth1 : 202.118.67.253 接非军事区
eth2 : 192.168.1.1 接内网
设定ipchains :
ipchains -P input REJECT
ipchains -P forward REJECT
ipchains -P output REJECT
ipchains -A input -i eth2 -s 192.168.1.0/24 -j ACCEPT
ipchains -A input -p tcp -i eth1 -s 202.118.67.252 80 -j ACCEPT
ipchains -A input -p tcp -d 202.118.67.252 80 -j ACCEPT
ipchains -A forward -s 192.168.1.0/24 -j MASQ
这样就足够了 对内部作伪装 又允许 外部同自己的www server通信.
不要忘了插入模块ip_masq_ftp
insmod /lib/modules/2.2.5-15/ipv4/ip_masq_ftp.o
下面是一些细节
指定端口号
-p tcp -s 192.168.1.1 80
-p tcp -s 192.168.1.1 !80
-p tcp -s 192.168.1.1 80:1000
注意第二个 !80是指除了80以外端口 第三条是指从80 到1000 之间的端口
'!' 的用法很广 如
-s !192.168.1.1
另外在指定端口号时也可以用符号名 如 www ftp telnet等
注意在使用icmp的类型时不可以用'!'.
还可以用下面的参数
--source-port [!] [port [: port]]
--destation-port [!] [port [: port]]
控制syn包 (相当于控制tcp的连接方向)
[!] -y
如:
-p tcp -s 192.168.1.0/24 -y -d 192.168.0.0/24 -j DENY
这一条相当于使192.168.1.0无法连向192.168.0.0
在配制linux的防火墙时经常要对 linux 的 tcp/ip 作特殊控制
/proc是linux中的一个特殊目录 它可以提供很多的统计信息 也可以对内核作控制
/proc/sys就是用于控制的
许多文件中只包含了一个0或1, 用于表示真或假.
/proc/sys/net/ipv4目录下的一些文件
icmp_echo_ignore_all 是否忽略所有的ping包
icmp_echo_ignore_broadcasts 是否忽略广播的ping包
ip_always_defrag 是否处理分片
ip_forward 是否作IP forward 实际上这于
/etc/sysconfig/network
中的FORWARD_IPV4是一样的
ip_local_port_range 本地使用的端口范围(在不指定本地端口的情
况下)
文件中包含了两个整数指明了范围
ipfrag_time 处理一个分片的最长时间以秒为单位
/proc/sys/net/ipv4/conf下有几个目录 其中all对应于所有的网络设备
accept_redirects 是否接受重定向包
forwarding 是否允许forward
send_redirects 是否发送重定向包
accept_source_route 是否接受源路由
rp_filter 是否只允许直接连接的网络通信
shared_media 是否是共享介质
secure_redirects 是否允许安全重定向(只接受由网关来的)
--
☆ 来源:.BBS 荔园晨风 bbs.szu.edu.cn.[FROM: bbs@192.168.1.144]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店