网络安全之防火墙

网络安全之防火墙

防火墙的作用:过虑两个网络之间的数据包.
Linux 内核的Netfilter
 
发出去、转发出去数据包,以及发送到本机的数据包都要经过内核的处理
INPUT     链用来过滤进入本机的数据包
OUTPUT   链用来过滤从本机发送出去的数据包
FORWARD 链用来过滤从本机路由转发出去的数据包
一个数据包的头部包括源地址、源端口、目的地址、目的端口、协议类型包过滤正是根据这些特征来过滤数据包
Linux 下通过在三个链中设置规则来过滤包的处理方式
#iptables --help
#iptables -A INPUT -p icmp -j DROP 将进入本机,协议类型为icmp 的数据包丢弃。
-A 添加规则INPUT 对INPUT 链进行操作
-p 协议类型
-j 指定动作,可以是ACCEPT(接收), LOG(日志),  REJECT(弹回)
#iptables -L -n 显示三条链的过滤规则
-L 显示所有链的所有规则 -n 以数字形式显示
#iptables -F 清空所有链的所有规则
每个包进入本机时都被INPUT链检查 、出去时经过OUTPU 链检查、转发时经过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 21 -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 保存劳动成果 或 iptables-save>/etc/sysconfig/iptables
现在防火墙算配好了,不仅非常严密,还非常有效,有效防止别人攻击你的服务器的各种服务,可防止主动型的病毒或木马攻击。
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添加一条与之对应,所谓有出必有入。(IP地址好像不能出现在里面)
#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   #grep domain /etc/services
如出现无法解析,或很慢,则#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 表内容  iptables -t nat -F

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11364208/viewspace-344607/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11364208/viewspace-344607/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值