一、什么是防火墙

防火墙就是通过定义一些有顺序的规则,并管理进入到网络内的主机数据数据包的一种机制,更广义的来说,只要能够分析与过滤进出我们管理的网络的数据包的数据,就可以成为防火墙。

二、防火墙分类分类

防火墙又可以分为硬件防火墙本机软件防火墙。硬件防火墙是由厂商设计好的主机硬件,这台硬件防火墙内的操作系统主要以提供数据包数据的过滤机制为主,并将其他不必要的功能拿掉。软件防火墙是保护系统网络安全的一套软件或机制,例如Netfilter与TCP Wrappers都可以成为软件防火墙。

三、软件防火墙分类

对于单一主机型防火墙主要的防火墙有数据包过滤型的Netfilter与依据服务软件程序作为分析的TCP Wrappers两种。如果是区域型的防火墙防火墙的类型则主要有数据包过滤的Netfilter与利用代理服务器(proxy server)进行访问代理的方式。

  • 3.1 Netfilter(数据包过滤机制)

所谓的数据包过滤,也就是分析进入主机的网络数据包,将数据包的头部数据提取出来进行分析,以决定改连接为放行还是阻挡的机制。由于这种方式可以直接分析数据包头部分数据,所以包括硬件地址(MAC)、软件地址(IP)、TCP、UDP、ICMP等数据包的信息都可以进行过滤分析(通过分析OSI七层协议的2.3.4层)。
在linux上使用内核内建了Netfilter这个机制,而Netfilter提供了iptables这个软件来作为防火墙数据包过滤命令。

  • 3.2TCP Wrappers(程序管理)

还有一种抵挡数据包进入的方法,是通过服务程序的外挂(tcpd)来处置的。与数据包过滤不同,这种机制主要是分析谁对某某程序进行访问,然后通过规则去分析改服务器程序谁能够连接谁不能连接。由于主要是通过分析服务器程序来管理,因此与启动端口无关,只与程序的名称有关

四、软件分析工具/etc/hosts.deny和/etc/hosts.allow介绍

linux默认提供一个软件分析工具,那就是/etc/hosts.deny和/etc/hosts.allow这两个配置文件。如果安装了tcp wrappers套件,可以增加一些额外的跟踪功能。

  • 4.1/etc/hosts.deny和/etc/hosts.allow这两个配置文件配置语法

这两个文件的设置语法都是一样的,如下

<service(program_name)>  : <IP,domain,hostname> :< action>
   #<服务(程序名称)            :<ip或者域 或主机名>     :<操作>

例如:rsync服务的配置,阻挡127.0.0.100连接

vim /etc/hosts.deny
    rsync : 127.0.0.100     :  deny
 第一第二字段特殊参数说明:
   **ALL**:代表全部的program_name或者是IP都接受的意思,例如ALL:ALL:deny
   **LOCAL**:代表来自本机的意思,例如ALL:LOCAL:allow
   **UNKNOWN**:代表不知道的ip或者domain或者服务时接受
   **KNOWN**:代表为可解析的ip,domain等信息时
  • 4.2/etc/hosts.deny和/etc/hosts.allow这两个配置文件说明

写在/etc/hosts.allow当中的ip与网段默认是allow放行的,而写在/etc/hosts.deny当中的ip与网段默认是阻止deny的。判断顺序是先以/etc/hosts.allow进行优先对比,符合规则就放行,再以/etc/hosts.deny比对,规则符合就予以抵挡。若这两个文件的规则都不符合,则予以放行。
例如:只允许192.168.0.0/255.255.255.0 这个域以及203.71.65.34这个主机可以进入rsync服务器其他的ip全部阻挡

vim /etc/hosts.allow
    rsync : 192.168.0.0/255.255.255.0 
    rsync : 203.71.65.34
    rsync : LOCAL
    
    vim /etc/hosts.deny
    rsync : ALL

五、TCP Wrappers软件介绍

TCP Wrappers通过客户端想要连接的程序文件名,然后分析客户端IP,看看是否要放行。
TCP Wrappers软件可以提供额外更安全的设置,例如当有人扫描我的rsync port时,TCP Wrappers软件可以记录他的ip。可以使用rpm -q tcp_wrappers查询是否安装。
主要操作有:
spawn(acton字段)
可以利用后续的shell来进行额外的工作,且具有变量功能,主要变量有:%h(hostname)、%a(address)、%d(daemon)等。还可以利用safe_finger去跟踪对方的主机信息(包括主机名,用户相关信息等)
twist(action字段)
立刻以后续的命令进行,且执行完后终止该次连接的请求
例如:

rsync : ALL :spawn (echo"security notice from $(/bin/hostname)";echo; /usr/sbin/safe_finger @%h)|/bin/mail -s "%d-%h security" root &  : twist (/bin/echo -e "\n\nWARNING connection not aloowd. \n\n")

六、什么服务程序可以通过/etc/hosts.deny和/etc/hosts.allow这两个文件来管理

TCP Wrappers就是通过/etc/hosts.deny和/etc/hosts.allow这两个文件来管理的一个类似防火墙的机制。只有满足下面条件之一的软件才能用/etc/hosts.deny和/etc/hosts.allow这两个文件来管理。

1.由super daemon(xineted)所管理的服务

2.支持libwrap.so模块的服务
怎么判断一个服务程序是否支持libwrap.so模块
利用 命令 ldd $(which 服务程序名)来查看。服务程序名可通过/etc/xinetd.d/*中server(程序文件名)来查看。ldd(library dependency discovery)这个命令可以查询某个程序的动态函数库支持状态。
例如:查看sshd是否支持TCP Wrappers

ldd $(which sshd) 
    linux-vdso.so.1 =>  (0x00007ffe11ebe000)
    libfipscheck.so.1 => /lib64/libfipscheck.so.1 (0x00007f0e0c8f5000)
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f0e0c6ea000)  
    #存在  libwrap.so模块,所以支持
    libaudit.so.1 => /lib64/libaudit.so.1 (0x00007f0e0c4c1000)
    libpam.so.0 => /lib64/libpam.so.0 (0x00007f0e0c2b2000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f0e0c08b000)
    libsystemd.so.0 => /lib64/libsystemd.so.0 (0x00007f0e0be5a000)

例如查看rsyslogd、sshd、xinetd、httpd四个程序有没有支持TCP Wrappers的阻挡功能

for name in rsyslogd sshd xinetd httpd; do echo $name;ldd $(which $name) |grep libwrap;done
rsyslogd
 sshd
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fa390c22000)
xinetd
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f448b531000)
httpd

可以看到sshd和xinetd可以使用/etc/hosts.{allow|deny}来进行防火墙机制控制