防火墙,位于网络之间的,根据所定义的股则对进出网络的数据包进行匹配,病匹配到包用制定的处理机制进行处理的硬件、软件或者二者的结合
防火墙按照对数据包的获取方式进行分类,可以分为两大类:
 1、包过滤防火墙(IP Filter):iptables
有状态检测
简单包过滤

 2、网关代理型防火墙(Proxy):应用层防火墙,效率较低,安全性较好

iptables 是 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。


iptables的四张表:
(1)filter:管理本机进出的数据包
INPUT:主要与想要进去Linux本机的数据包有关
OUTPUT:主要与本机想要送出的数据包有关
FORWORD:与Linux本机无关,可以将数据包转发到后端的计算 机中,与NAT的table相关性很高
(2)NAT :这个表格主要用于来源地与目的地的IP或port转换,与Linux本机无关,主要与Linux主机的局域网内的计算机相关
PREROUTING:在进行路由判断之前执行的规则
POSTROUTING:在进行路由判断之后执行的规则
OUTPUT:与发送出去的数据包相关
(3)mangle :这个表格主要是与特殊数据包的路由标记有关
把封装得数据包重新进行修改,先拆开,再封装,在INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING5个地方任意一个地方都可以
(4)raw 
优先级:1 mangle,2 nat,3 filter

#iptables [-t table] sub_command CHAIN[Num] [匹配条件]
-t 指定表格

sub_command:子命令
    rule: -A 追加,在最后边追加一条规则
-I 插入一条规则,-I INPUT 3 -->指定第三条规则
-D 删除一条规则,指定号码或规则就行     -R 替换一条规则

chain: 规则链相关的
-F (flush):清空所有链
-N :新建一条链
-X : 删除一条链
-Z:清空计数器  (每一条规则都有两个计数器,一个用于记录被本条规则所匹配到的包的个数,另一个用户记录所有匹配到包的体积之和)
-E 重命名链


iptables -L 列出来
iptables -L -n 不进行IP与hostname的反查,显示速度会更快
   -v 显示详细信息,v越多越详细
   -x 与L一块用显示精确值

iptables -L --line-numbers 显示行号

匹配条件:
一、通用匹配
-s IP/NETWORK 指定源地址
-d IP/NETWORK 指定目的地址
-p 用户定义协议后跟{tcp|udp|icmp}
-i interface 指定INPUT接口,一般不能用在OUTPUT和POSTROUTING
-o interface 指定OUTPUT接口,不能跟在INPUT和PREROUTING

二、扩展匹配
(1)隐式扩展:一般只对-p选项中指定的协议进行扩展
-p tcp
--sport PORT 指定源端口
--dport PORT 指定目的端口
--tcpflags 要检查的标记必须为1的标记(剩余的必须为0)
--tcpflags SYN,ACK,RST,FIN SYN
                0   0   0   1

-p udp
--sport PORT 指定源端口
--dport PORT 指定目的端口

-p icmp 
--icmp-type 后边跟0或8
type的类型有echo-request:8 请求的数据包
   echo-reply:0 响应的数据包

-j TARGET 跳转
   ACCEPT通过
   DROP 含蓄的拒绝
   REJECT 直接拒绝

(2)显式扩展:一般必须使用-m选项明确指定要加载扩展模块,扩展模块小写,状态大写
 state 连接状态:有四种 
 -m state --state 状态
四种状态:
NEW:新发起的请求
ESTABLISHED:所有已建立的请求
RELATED:相关联的
INVALID:无法识别的,非上边的三种状态

指定多端口:
-m {mport|multiport}
--source-ports 源端口
--destination-port 目标端口
--ports
eg: #iptables -A INPUT -d 172.16.100.1 -p tcp -m mport --destination-port 80,22,23,110,143,25 -m state --state NEW,ESTABLISHED -j ACCEPT


-m iprange IP地址范围扩展
[!]--src-range ip-ip 源地址范围
[!]--dst-range ip-ip 目标地址范围
eg:#iptables -A INPUT -d 172.16.100.1 -m iprange --src-range 192.168.1.1-192.168.1.200 -p tcp --dport 80 -m state --state ESTABLISHED -j ACCEPT


-m connlimit 限制某个IP地址上并发连接请求个数限制
[!]--connlimit-above N 超过这个数的请求都拒绝
一般都是 !--connlimit-above     -j ACCEPT


-m limit 数据包个数的发送速率的限制
--limit rate
--limit-burst number 突发限制的数量,当为空时第一次发送的数量
eg:-m limit --limit 20/second --limit-burst 30 -j ACCEPT


流量控制:通过令牌桶过滤器

-m time在某个时间运行某个请求
--timestart Value
--timestop Value
--days Listofdays 星期几,默认是ereryday
--datestart Date
--datestop Date
eg:iptables -A INPUT -d 172.16.37.1 -p tcp --dport 80 -m time --datestart 2012:02:18:08:30:00 --datestop 2.12:02:26:14:30:00 -j ACCEPT


-m string 字符的匹配
--algo bm|kmp <--字符串匹配算法
--string pattern 我们可以把字符串转换成二进制格式的,这个匹配的速度会更快


如何保存iptables定义的规则
iptables一但重启将会清空所有规则
#service iptables save   保存iptables的规则,保存到/etc/sysconfig/iptables 文件中
#iptables-save > /etc/sysconfig/iptables.test 保存到这个文件中

#iptables-restore  <  /etc/syscofig/iptables.test 生效保存的规则