【转载】Linux实践工程师学习笔记十四:网络安全

防火墙的作用:过虑两个网络之间的数据包
Linux内核的Netfilter
<!--[if !vml]--><!--[endif]-->

进出数据包,以及发送到本机的数据包都要经过内核的处理
INPUT链用来过滤进入本机的数据包
OUTPUT链用来过滤从本机发送出去的数据包
FORWARD链用来过滤从本机路由出去的数据包
一个数据包的头部包括源地址、源端口、目的地址、目的端口、协议类型
包过滤正是根据这些特征来过滤数据包
Linux 下通过在三个链中设置规则来过滤
包的处理方式
#iptables -A INPUT -p icmp -j DROP   将进入本机,协议类型为icmp的数据包丢弃。
       -A    添加规则
       INPUT 对INPUT链进行操作
       -p    协议类型
       -j     指定动作,可以是ACCEPT(接收),LOG(日志),REJECT(弹回)
#iptables -L -n        显示三条链的过滤规则
       -L    显示所有链的所有规则
       -n    以数字形式显示
#iptables -F     清空所有链的所有规则
每个包进入本机时都被INPUT链检查
出去时经过OUTPUT链检查
转发时经过FORWARD检查
TCP/IP是双向通信的,所以添加规则时必须注意使INPUT链和OUTPUT链的规则对应。
 
       -D   rulenum   删除第几条规则
       -I     rulenum   在第几条前插入规则
       -P    修改链的默认策略,如默认状态ACCEPT,默认情况下数据包的处理方式
       -s    源地址 -m     匹配扩展条件
       -d    目的地址       -t     维护的表,默认为filter,另外还有一个nat表
       --line-numbers              规则中显示编号
#iptables -L -n --line-numbers       这样方便删除指定行编号的规则或在指定编号前插入
 
拒绝所有连接到本机21端口的所有连接
#iptables -A INPUT -P tcp -d 192.168.0.22 --dport 22 -j DROP
       --dport    目的端口
       --sport    源端口
 
在实际使用过程中服务器还不够严密,还存在被利用的弱点。如22端口,为防止没有请求过的包,在本机主动发送出去,需要检查包的状态。看包是否是人家请求过我,而我回应别人的。Linux的防火墙支持状态匹配检查。
#iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
       -m   匹配状态,上面表示跟本机连接过的包才能从22端口出去
如果正在使用ssh远程管理服务器,不要将第一条的22端口规则删掉,等添加完上面这条规则,才能把存在弱点的第一条删除,否则远程管理会立刻断掉。
 
80端口也同样设置
#iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
防止服务器在80端口主动发送请求,防止病毒利用。添加完后,删除OUTPUT中以前添加的那条80端口规则。
 
假设自己是ssh客户机,访问别人的ssh服务器,先经过OUTPUT链出去
#iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
当包回就,从对方22端口,如果对方有病毒,可能会使用22端口发送请求,所以只接受已建立连接的数据包。
#iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
#service iptables save     保存劳动成果
现在防火墙算配好了,不仅非常严密,还非常有效,有效防止别人攻击你的服务器的各种服务,可防止主动型的病毒或木马攻击。
 
LOG目标
过滤包的检查机制,可以指定某种要求的包写入日志中。
#iptables -A INPUT -p tcp --dport 22 -j LOG --log-level 5 --log-prefix “IPTABLES:”
       -j LOG    记录日志
       --log-level 5    写入日志时需指定级别,与日志服务器配合使用
       --log-prefix “IPTABLES:”      指定写入日志时,记录的前缀字符,主要方便用户分析日志。
添加LOG目标规则时,保证规则前同样的包没有被丢弃或接受,即要注意添加规则的次序。
编缉日志配置文件/etc/syslog.conf 添加:
kern.=notice          /var/log/firewall.log
(消息来源内核kern,级别notice),将内核这个级别消息,记录到firewall.log文件中,等号表示刚好等于这个级别的消息。为什么是notice?因为我们曾经用man syslog知道消息的默认级别notice为5,与LOG目标一致。
注意:日志级别5要跟syslog.conf中的级别一致,级别可通过syslog的manual帮助获得。
#service syslog restart
#tail /var/log/firewall.log
注意将前面在/etc/syslog.conf文件添加过的
*.*          @192.168.0.22
那行删除,还要将/etc/sysconfig/syslog文件中,那行还原为:
SYSLOGD_OPTIONS=”-m 0”
不管哪个服务,修改过配置文件,要立刻生效,必须重启服务。
这样会将进入本机22端口的包记录在firewall.log文件,当使用ssh持续登录使用时,由于不停记录包信息,firewall.log文件会持续增大!

实际配置防火墙时,首先将所有门都关闭,如将三条链的默认策略都改为DROP,再根据服务器需要一个端口一个端口地打开。首先需要分析这台服务器是干什么用的,假设只是一台提供http服务的Web服务器。
首先把服务器所有端口关闭,为了方便远程管理开一个22的端口,端口可以在/etc/services文件中查看。添加规则时分析一下数据包的格式,再确定规则参数。
#iptables -A INPUT -p tcp -d 192.168.0.22 --dport 22 -j ACCEPT
#iptables -A OUTPUT -p tcp -s 192.168.0.22 --sport 22 -j ACCEPT
注意通信的双向性,在INPUT添加一条规则,一般要在OUTPUT添加一条与之对应,所谓有出必有入。
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -p FORWARD DROP
上面首先打开22端口,防止正在使用的远程管理断掉,再改变三条链的默认策略。
#iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
打开一个80端口,本机地址可省略
#service iptables save     保存劳动成果(保存规则)
将刚才添加的规则保存到/etc/sysconfig/iptables文件
或使用#iptables-save > /etc/sysconfig/iptables
系统启动时会加载这个文件中的规则。
现在服务器挡住所有服务,只开了两个端口80,22,对一台网络服务器来说,绝不能缺少DNS服务,任何联网的主机都需要做DNS请求,目前这台服务器还无法发送DNS请求。增加一条DNS通道,首先作为一台客户机出现:
#iptables -A OUTPUT -p udp --dpott 53 -j ACCEPT   首先经过OUTPUT链
#iptables -A INPUT -p udp --sport 53 -j ACCEPT      请求后得到回复数据雹,允许进入
测试#host fedora.cyrich.com
如出现无法解析,或很慢,则#more /etc/resolv.conf查看域名解析配置文件,看是否本机为DNS服务器,如果是还需添加一条规则,在规则时,应该分析这个数据包如何进出哪条链,以及这人数据包的格式,如上面#host fedora.cyrich.com因为本身作为DNS服务器,所以会发送一个包到自己,
192.168.0.22:*――>102.168.0.22:53   (允许)
但当时入INPUT链时,没有一条跟它匹配,所以会拒绝。所以如果同时作为DNS服务器和客户机,还需添加下面规则:
#iptables -A INPUT -p udp --dport 53 -j ACCEPT
#iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
当同时作为某种服务的服务端和客户端时,需在规则中添加两条规则,即源端口和目标端口。
当前的规则设置忽略了本机的内部服务,在本机上有很多端口守护在127.0.0.1上,当本机的客户端访问回环设备时会拒绝。
127.0.0.1上的服务如不打开,会影响本机内部服务的正常运行,打开了也不会造成服务器什么危害,所以还是最好打开:
#iptables -A INPUT -s 127.0.0.1 -j ACCEPT
#iptables -A INPUT -d 127.0.0.1 -j ACCEPT
#service iptables save     (保存劳动成果)
 
经过FORWARD链的数据包不是发送给本机,而是发送给别人的,当作为路由器使用时才需配置FORWARD链。现配置一台路由器,如允许局域网用户浏览网页配置方法与INPUT.OUTPUT一样。
#iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT     允许局域网发送数据包
#iptables -A FORWARD -d 10.0.0.0/24 -j ACCEPT     允许局域网接收数据包
这样相当于把局域网和互联网打通了,任何包都可通过,在实际使用中可以加上端口,做些限制,过滤某些数据包,也可以使用LOG目标加进日志。其实光打开FORWARD链还不行,还需要打开内核的转发文件。
#echo 1 >/proc/sys/net/ipv4/ip_forward              (默认为0)
0表示关闭转发,1为启用,要永久启用,可修改配置文件/etc/sysctl.conf:
net.ipv4.ip_forward =1
如需访问互联网,这样的配置还不行,因为私有地址是无法直接访问互联网的,这里我们做NAT网络地址转换,这时网需两个地址,一个局域网的,一个互联网的,当收到访问互联网的包时,将源地址替换为互联网地址。
#iptables -t nat -L -n      查看nat表内容

Netfilter的NAT表:
三条链用来做包过滤
用来翻译地址的也有三条链,常用的有PREROUTING,POSTROUTING

SNAT(源地址翻译)



 
数据包进入内核前,首先进入PREROUTING这个点,然后进入内核进行处理,就是ROUTING那个点,如果数据包不是发送给本机,而内核启用了转发功能,则内核将把数据包从FORWARD,再到POSTROUTING。如果FORWARD允许数据包通过,这个包可以在POSTROUTING这个点上做源地址替换,而且只能在这个点上做,这是内核的一种机制,所以数据包的源地址是在经过POSTROUTING这个点后改变的。
 
DNAT(目标地址翻译)
数据包进入时,首先进入PREROUTING。然后内核ROUTING会根据包的目标地址决定是从INPUT链走还是FORWARD链走。所以数据包的目标地址非常重要。在PREROUTING上可以做目标地址替换。
 

SNAT应用

 


 
 
网关有两块网卡分别连接两台主机或两个网络。
#iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.0.254
将源地址为10.0.0.0/24的包的源地址替换为192.168.0.254,如果这是一台ADSL拨号网关,可以将整个局域网带进互联网
#iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
有人会想数据包怎么回来?其实将数据包翻译成192.168.0.254源地址时,192.168.0.1回应一个数据包到服务器会被服务器认出来,那服务器会自动将翻译地址还原,然后退还给10.0.0.241。所以做网关时,只要加SNAT,然后配合前面的过滤规则就可配一个安全且强大的防火墙,同时具有路由器的功能。
 

 

DNAT应用



 
DNAT应用一般用来做DMZ,保护局域网内部
如192.168.0.1作为一台Web服务器,主机10.0.0.241访问10.0.0.254网关,网关将请求发送到192.168.0.1,这样就起到保护Web服务器的作用
#iptables -t nat -A PREROUTING -d 10.0.0.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.1
将访问网关80端口的数据包目标地址翻译或192.168.0.1,这样本来发送给本机的数据包就会从FORWARD链转发出去。
Web服务器在内部,它收到请求后回应数据包给网关,然后返回到10.0.0.241。这样就把内部主机保护起来,外面的人只能看见那台网关服务器,所以NAT应用非常广,而且非常强大,更多帮助和介绍可参考www.netfilter.org
 
为软件打补丁,首先用gpg导入公钥文件,再校验patch文件的正确性。
#bzcat 9.3.0-patch | patch -p0
一般需查文件里面的目录,然后再将软件目录改名。

posted on 2007-07-30 18:12 黑虫 阅读(261) 评论(0)  编辑 收藏 引用 所属分类: Unix/Linux

只有注册用户登录后才能发表评论。
<2007年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(4)

随笔分类(31)

随笔档案(31)

awmsky

搜索

最新评论

阅读排行榜

评论排行榜