1、认识防火墙
防火墙就是定义一些有顺序的规则,并管理进入到网络内的主机数据数据包的一种机制。广义的来讲,只要能够分析与过滤出我们管理的网络的数据包的数据,就可以称为防火墙
防火墙又分为 “硬件防火墙” 和 “软件防火墙”,放火墙的最大功能是帮助你限制某些服务的访问
建议利用 Shell scripts来撰写属于你自己的防火墙机制,这样比较清晰
防火墙最重要的规划
切割被信任(子域)与不被信任(Internet)的网段
划分出可提供Internet的服务与必须受保护的服务
分析出可接受与不可接受的数据包状态
1.2、Linux系统上防火墙的主要类别
基本上,依据防火墙的管理范围,我们可以将防火墙区分为 “网络型” 和 “单一主机型” 的管理。
单一型主要是 NetFilter 和 TCP Wrapper两种,区域性防火墙都是充当路由器角色,因此包含了 NetFilter 和 利用代理服务器(Proxy Server)
Netfilter (数据包过滤机制):主要分析 Header,Port,Mac,IP,Flags。提供了 iptables 这个软件来作为防火墙数据过滤命令
TCP Wrappers(程序管理):主要是通过分析服务器程序来管理,因此与启动的端口无关,只与程序名有关
Proxy(代理服务器):代理服务器其实是一种网络服务。
1.3、防火墙的一般网络布线示意
防火墙除了保护防火墙机制本身所在的那台主机之外,还可以保护防火墙后面的主机。
1.3.1、单一网络,仅有一个路由器
架设在路由器上的防火墙可以管理整个局域网的数据包进出
因为内外网网络分开,所以安全维护在内部可以开放的权限较大
安全机制的设置可以针对 Linux 防火墙主机来维护即可
对外只看到Linux防火墙主机,对于内网的可以达到有效的保护
1.3.2、内部网络包含安全性更高的子网,需内部防火墙切开子网
防火墙对于LAN的防护不会设置的那么严密,所以公司中有什么特别重要的部门需要更安全的网络环境。那么在LAN里面在加一个防火墙,将安全等级分类,那么将会让重要的数据获得更佳的保护
1.3.3、在防火墙后面架设网络服务器主机
将网络服务器独立放置在两个防火墙中间的网络,我们称之为 ”非军事化隔离区(DMZ)“。DMZ重点在于保护服务器本身,所以将 Internet 和 LAN都隔离开来。如此依赖,不论是服务器本身还是LAN被攻陷时,另一个区域还是完好无损的。
1.4、防火墙使用的限制
拒绝让 Internet 的数据包进入主机的某些端口
拒绝让某些来源 IP 的数据包进入
拒绝让带有某些特殊标志(Flag)的数据包进入:如 SYN 连接
分析硬件地址(MAC)来决定连接与否
防火墙并不能有效阻挡病毒或木马程序
防火墙对于来自内部的LAN的攻击无能为力
所以,还是前面那几句话:
关闭几个不安全的服务
升级几个可能有问题的软件
使用防火墙架设好最起码的安全防护
2、TCP Wrappers
说穿了,TCP Wrappers 就是通过 /etc/hosts.allow、/etc/hosts.deny 这两个宝贝来管理的一个类似防火墙的机制
但必须是由
super daemon (xinetd)所管理的服务 : 配置文件在 /etc/xinetd.d/ 里面的服务就是 xinetd 所管理
支持 libwrap.so 模块的服务 : 使用 ldd 命令来查看
2.2、/etc/hosts.{ allow | deny }
这两个文件的顺序与优先级
先以 /etc/hosts.allow 进行比对,规则符合就予以放行
再以 /etc/hosts.deny 比对,规则符合就予以阻挡
若不再这两者之内,亦即规则都不符合,最终予以放行
这两者的配置举例
ALL : 127.0.0.1
xxxx : 111.222.221.15/255.255.255.0<ip, domain, hostname> #tcp wrappers 理论上不支持 CIDR形式的掩码,只支持Net mask的地址显示形式
3、IPv4的内核管理功能:/proc/sys/net/ipv4/*
除了 iptabels 这个防火墙软件外,Linux还提供了很多内核默认的攻击阻挡机制。由于是内核的网络功能,所以相关的设置数据都是放在 “/proc/sys/net/ipv4/" 这个文件夹下
Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
基于/proc文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点。例如,其中有些文件虽然使用查看命令查看时会返回大量信息,但文件本身的大小却会显示为0字节。此外,这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于RAM中)有关。
为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如/proc/scsi目录中存储的就是当前系统上所有SCSI设备的相关信息,/proc/N中存储的则是系统当前正在运行的进程的相关信息,其中N为正在运行的进程(可以想象得到,在某进程结束后其相关目录则会消失)。
3.1、/proc/sys/net/ipv4/tcp_syncookies
我们谈到的阻断式服务(Dos)攻击,就是利用 TCP 数据包的 SYN 三次握手原理实现的,这种方式称为 SYN Flooding。我们可以启用内核的 SYN Cookies 模块,在系统用来启动随机连接的端口(1024:65535)即将用完时自动启动。
当启动 SYN Cookies 时,主机在发送 SYN/ACK 确认数据包前,会要求 Client 端在短时间内回复一个序号,这个序号包含许多原 SYN 数据包内的信息,包括 IP、Port等。若 Client 端可以回复正确的序号,那么主机就确定该数据包为可信的,因此会发送 SYN/ACK 数据包,否则就不理会此数据包。
通过这一机制,可以大大降低大量无效的 SYN 等待端口,避免 SYN Flooding 的 Dos 攻击。
要启用此模块,只需把 " /proc/sys/net/ipv4/tcp_syncookie " 的值置为 1
但是这个设置值由于违反了 TCP 的三次握手(因为主机在发送 SYN/ACK之前需要先等待 Client 的序号响应),所以可能会造成某些服务的延迟现象。不适合用在负载已经很高的服务器内,因为负载太高的主机有时会让内核误判遭受 SYN Flooding 的攻击。
3.2、/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
我们来谈谈 Ping Flooding 攻击(不断发 ping,并且发送大量数据包,无数的僵尸主机)
ping广播地址就是把ping包发给网络中所有主机,只要主机在线,那么就会回包,可以用来查看有哪些主机在线。
关闭 ping broadcasts 只需把 " /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts " 的值置为 1
3.3、/proc/sys/net/ipv4/conf/网络接口/*
Linux的内核还可以针对不同的网络接口进行不一样的参数设置,网络接口的相关设置放置在此。
4、NAT服务器的设置
4.1、NAT,DNAT,SNAT
Network Address Translation,Destination,Source
修改数据包报头来源项目,修改数据包报头目标项目
4.2、最简单的NAT服务器:IP 分享功能
举例,伪装(MASQUERADE):
$innet 是内网域,MASQUERADE 就是 IP 伪装成为数据包出去(-o)的那块设备上的IP。 即只要来自于 $innet 网域的IP则从eth0这个接口的IP出去。
iptables -t nat -A POSTROUTING -s $innet -o eth0 -j MASQUERADE
除了 IP 伪装之外,我们还可以直接指定修改 IP 数据包报头的来源IP:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.xx.xx
# --to-source 192.168.xx.10-192.168.xx.20 表示某一段
4.3、在防火墙后端的网络服务器上做DNAT 设置
DNAT 是在 nat PREROUTING 链
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to-destination 192.168.xx.xx:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
重点回顾:
要拥有一台安全的主机,必须要有良好的主机权限设置、随时的更新套件、定期的重要数据备份、完善的员工教育机制。仅有防火墙是不够的。
防火墙最大的功能就是帮助你 “限制某些服务的访问来源”,可以管理来源与目标的IP。
防火墙根据数据包阻挡的层次,可以分为Proxy以及IP Filter两种类型。
在防火墙内,但不在LAN内的服务器所在网络,通常被称为DMZ(非军事化隔离区)。
数据包过滤机制的防火墙,通常至少可以分析 IP、Port、flag(如tcp的syn)
防火墙对于病毒的阻挡并不敏感
防火墙对于来自内部的网络误用或滥用的阻挡性比较不足
并不是架设了防火墙之后系统就一定安全,还是需要更新软件漏洞以及管制用户行为和权限等
内核2.4以后的Linux使用iptables作为防火墙软件
防火墙的制定与规则顺序有很大的关系,若规则顺序错误,可能会导致防火墙的失效。
iptables 的默认table共有3个,分别是Filter、NAT及Mangle,常用的为Filter(本机)和NAT(后端主机)
filter table 主要为针对本机的防火墙设置,根据数据包的流向又分为 INPUT、OUTPUT、FORWARD 3条链
NAT table主要针对防火墙的后端主机,根据数据包流向又分为PREROUTING、OUTPUT、POSTROUTING 3条链,其中 PREROUTING 与 DNAT有关,POSTROUTING 则与SNAT有关。
iptables 的防火墙规则比对,但所有规则都不符合时,则以默认的策略(Policy)作为数据包的行为依据。
防火墙可以多重设置,例如虽然已经设置了 iptables,但仍可以持续设置TCP Wrappers,因为谁也不晓得什么时候iptables会有漏洞,或者是规则规划不合适。