jinhucheung / blog

学习笔记
6 stars 3 forks source link

Linux 学习之服务器篇 防火墙与NAT服务器 #41

Open jinhucheung opened 8 years ago

jinhucheung commented 8 years ago

Index

jinhucheung commented 8 years ago

0. 前言

防火墙是整个数据包进入主机前的第一道关卡,那什么是防火墙?防火墙有什么机制?防火墙可以实现与不能实现的功能有哪些?其实Linux防火墙主要通过Netfilter与TCP Wrapper两个机制来管理,通过Netfilter可以实现让Private IP主机上网,也可以让Internet连接到LAN中主机,所以防火墙相当重要

jinhucheung commented 8 years ago

1. 认识防火墙

1.1 什么是防火墙

Linux 学习之服务器篇 网络安全与主机基本防护:网络升级/限制端口/SELinux中我们可以知道,数据包进入主机时,会通过防火墙/服务程序/SELinux/文件系统,防火墙作为保护主机的第一道关卡,其主要功能是限制某些服务的数据进出

所以防火墙主要任务是在规划出:

1.2 Linux上的防火墙主要类别

Linux实现防火墙功能有一些三种形式:

1.3 Netfilter防火墙的使用限制

前面提到Netfilter防火墙主要是分析数据包表头信息,其进行的分析工作主要有:

只不过即使有防火墙的限制,可是也不能说我们主机安全,比如我们向Internet开放WWW服务,由于要允许Internet上主机都可以连接我们主机的80端口,所以这些数据包要通过防火墙,达到服务进程处,这些数据包要是携带病毒,防火墙也是没办法处理的

jinhucheung commented 8 years ago

2. TCP Wrappers

TCP Wrappers是通过客服端想要连接的程序名,然后分析客服端的IP,来决定是否放行的

其通过配置文件/etc/hosts.{allow|deny}来管理

2.1 哪些服务支持TCP Wrappers

支持TCP Wrappers服务分为两类,分别是:

2.2 TCP Wrappers配置文件

TCP Wrappers的配置文件/etc/hosts.{allow|deny},其语法如下

 <service(program name)>:<ip/domain/hostname>:action

其中hosts.allow设置程序放行的ip,而hosts.deny则相反,优先级上,hosts.allow高于hosts.deny 当两个文件都不存在时,Linux默认以放行来处理

jinhucheung commented 8 years ago

3. Netfilter

Linux实现Netfilter功能(数据包过滤)的软件是iptables,其内核所提供,在效能上非常好

3.1 数据包进入的流程:规则顺序的重要

Netfilter防火墙是通过设定一条条规则来过滤数据包的,而这些规则在匹配数据包上有顺序(由上到下识别),匹配成功后就执行相应的action,不再往下匹配

如果都不匹配,那等着此数据包的就是Poliey(预设动作)了

比如下图,当一个数据包匹配rule 01,就满足,执行其action -- [DROP],那么该数据包就会被主机给丢弃

3.2 iptables的表格(table)与链(chain)

由于防火墙有很多条规则,为了方便则是某类动作,我们将一组规则整合成chain(链),比如处理进入的数据包的规则组称为INPUT,处理发出的数据包的规则组称为OUTPUT,

而再将这些链组合在一起,专门针对某些功能,那就是table

iptables预设有以下三个table,如下图

各表相关的功能如下

当数据包在防火墙规则匹配过程中,各表与链的相关性如下图

虽然上图很复杂,但我们可以看出iptables控制的三种数据包的流向:

jinhucheung commented 8 years ago

3.3 iptables的语法

1) 规则的查看与清除

2) 设置预设政策

iptables [-t tables] -P [INPUT,OUTPUT,FORWARD等] [ACCEPT,DROP]

3) 添加规则:限制IP/network/网络接口

# iptables [-AI 链名] [-io 网络接口] [-p 协议] \
> [-s 來源IP/网域] [-d 目标IP/网域] -j [ACCEPT|DROP|REJECT|LOG]

参数说明:

4) 添加规则:限制端口

 iptables [-AI 链] [-io 网络接口] [-p tcp,udp] \
> [-s 來源IP/网域] [--sport 端口范围] \
> [-d 目标IP/网域] [--dport 端口范围] -j [ACCEPT|DROP|REJECT]

参数:

5) 添加规则:匹配mac与state

匹配数据包的mac地址

iptables -A INPUT [-m mac] [--mac-source mac地址 ] -j action

匹配数据包的状态:

iptables -A INPUT [-m state] [--state 状态] -j action

数据包的状态有:

5) 添加规则:限制ICMP包的类型

iptables -A INPUT [-p icmp] [--icmp-type 类型] -j action

类型是icmp包的类型,比如8echo request,用于ping连接

6) IPv4的内核功能:/prov/sys/net/ipv4/*

内核也一些功能,来处理网络状态:

7) 简单的防火墙规则

通常一些简单的防火墙规则有以下:

可以参考 iptableRule.sh:设置防火墙规则,面向一般服务器

jinhucheung commented 8 years ago

4. NAT服务器的设置

NAT服务在于修改数据包的来源/目标的Socket Pair,其关注的是nat表的PREROUTING链(修改目标的Socket Pair)与POSTROUTING(修改来源的Socket Pair)

4.1 SNAT/DNAT以及设置方法

1) SNAT:修改数据包的来源Socket Pair

如上图所示,SNAT通常用于让LAN的主机通过服务器的Public IP连上Internet

设置方法:iptables -t nat -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE

或者设置成,经由eth0出去的数据包,将它们的来源IP改成 192.168.1.210-192.168.1.220

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.210-192.168.1.220

2) DNAT:修改数据包的目标Socket Pair

如上图所示,DNAT通过用于Internet主机访问LAN中的主机

设置方法:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
     -j DNAT --to-destination 192.168.100.10:80 

将从eth0进入且目标端口是80的数据包,都转移到192.168.100.10:80上