防火墙:位于网络之间的,根据所定义的规则对进出网络数据包进行匹配,并匹配到包用指定的处理机制进行处理的硬件,软件或者二者的结合。

防火墙分类:

包过滤防火墙:有状态监测简单包过滤

网关代理防火墙:工作在应用层,对某种特定协议进行检测,能够将检测结果记录到日志中,以便管理员在后续审计时发现潜在风险的防火墙,比包过滤防火墙效率低,但安全性好。

 

iptables软件防火墙:

数据包的走向:

  1. 数据包进入内网卡,然后读进内核缓冲区,等待进入TCP/IP协议栈进行处理。

  2. 在经过TCP/IP协议栈进行处理时,首先检查数据包的IP首部,判断其目标地址(DIP)。2.1DIP所指向的主机是内网卡地址时,将检查数据包的TCP首部,判断数据包所访问的目标端口,将访问这个套接字端口,将把该数据包从用户空间送往用户空间。

  3. 2DIP所所指向的主机不是本地主机,则将通过查找路由表将数据包从内核空间通过另一块网卡发出。

回应数据包与收到的数据包流程相同。

 

内存分配:低地址的1G是内核空间,高地址的3G是用户空间。

 

内核空间TCP/IP协议栈数据包流入流出的五个NetFilter(Hook function)

Iptables的四种功能:

Filter:包过滤。在Input,output,forward上实现。

NAT:SNAT必须在路由之后做,DNAT必须在路由之前做。在prerouting,postrouting,output实现。

Mangle:将数据包封装拆开,修改后再进行封装。五个NetFilter都可做。

Raw

 

优先级(—>)mangle, nat,filter

语法:

#iptables [-t btale] sub_command CHAIN[num] [cretiria] [-j ACCTION]

-t filter nat mangle raw

 

sub_command

新增一条规则:-A(append):追加

-I(insert):插入 -I INPUT 3

删除一条规则:-d(delete):删除 –d OUTPUT8

替换一条规则:-R(replace):替换 –RFORWARD 6

 

CHAIN

  清空一条链:-F(flush):如果不指定链,则清空所有链。

  新建一条链:-N(new)

  删除一条链:-X删除用户自定义的空链。

  清空计数器:-Z 每一条规则都有两个计数器,一个用于记录被本条规则所匹配到的包的个数,另一个用于记录所有匹配到的包的体积之和。

  重命名链(一般是自定义链)-E

 

Policy

  -P:定义在filter表上,策略有ACCEPTDROPREJECT

 

View

 -L(list):列出所有规则

-n 不反解IP地址

-v –vv -vvv 显示详细信息

-x 显示精确值

--line-numbers 显示行号

 

Cretiria匹配条件(通用匹配,扩展匹配)

通用匹配:

  -s(!取反)IP/NETWORK 指定IP或网络地址

  -d(!取反)IP/NETWORK 指定目标地址

  -p 匹配第四层的协议(tcp|udp|icmp

  -iinterface 数据包流入的接口(不能用于OUTPUTPOSTROUTING

  -ointerface 数据包流出的接口(不能用于INPUTPREROUTING

 

-j跳转方法:ACCEPT DROPREJECT

 

防火墙分为主机防火墙和网络防火墙。

扩展匹配:

隐式扩展:一般指对-p选项中指定的协议进行的扩展。

         -p tcp

            --sport PORT[-PORT](都可以取反)

            --dport PORT[-PORT]

            --tcpflags 要检查的标记必须为1的标记(剩余的位必须为0SYN,ACK,FIN,RST,PSH,URG

               --tcpflags SYN,ACK,RST,FIN SYN(可简写为--syn)

         -p udp

              -- sport

              --dport

         -p icmp

              --icmp-type

               Echo-request8 回显请求echo-reply0 回显响应

 

显式扩展:一般指必须使用-m选项明确指定要加载扩展。

state:连接状态 –state STATE

NEW:专门匹配一个新发起的连接请求

ESTABLISHED:已建立连接的状态

RELATED:相关联的状态(主要用于FTP服务)

INVALID:无法识别的状态

 

多端口匹配,用于匹配多个非连续的端口

-m {mport|multiport}

  --source-ports

  --destination-ports

  --ports

 

-m iprange

[!]—src-range ip-ip

[!]—dst-range ip-ip

 

Connlimit 通常用于限制某个地址发起的并发连接请求个数

[!] –connlimit-above n

通常! –connlimit-above n –j ACCEPT 表示没超过连接请求个数的放行

 

Limit数据包的速率限制

--limit rate平均速率

实现流控:令牌桶过滤器

--limit-burst number峰值

 

-m time

 --timestart value

 --timestop value

 --days listofdays(format:Mon,Tue,Wed,Thu,Fri,Sat,Sun;default everyday)

 --datestart date

 --datestop date

  Format:YYYY[:MM[:DD[:hh[:mm[:ss]]]]]

 

 

-m string

--algo bm|kmp

-string pattern

例子:

  1. 禁止来自172.16.100.1的主机ping数据包

Iptables –t filter –A INPUT –s 172.16.0.0/16 –d172.16.100.1 –p icmp –j DROP

  1. 拒绝172.16.100.200访问本地web服务:80

Iptables –A INPUT –s 172.16.100.200 –d 172.16.100.1 –p tcp –dport 80–j DROP

  1. 允许172.16.100.200访问本地的ssh服务:22

Iptables –A INPUT –s 172.16.100.200 –d 172.16.100.1 –p tcp –dport22 –j ACCEPT

  1. 删除filterINPUT的第一条规则

Iptables –t filter –D INPUT 1

  1. 查看filter规则,并显示行号

Iptables –t filter –L –n –line-numbers

  1. 修改默认处理机制

Iptables –t filter –P INPUT DROP

  1. 允许172.16.100.0网段的主机ping172.16.100.1

Iptables –I INPUT 1 –s 172.16.0.0/16 –d 172.16.100.1 –picmp –icmp-type 8 –j ACCEPT

Iptables –I OUTPUT 1 –s 172.16.100.1 –d 172.16.0.0/16 –picmp –icmp-type 0 –j ACCEPT

8.拒绝eth1新发起的连接请求

Iptables –A OUTPUT –o eth1 –p tcp –syn –j DROP

Iptables –A OUTPUT –o eht1 –m state –state NEW –j DROP

9.允许172.16.100.1发出已建立连接的数据包

Iptables –P OUTPUT DROP

Iptables –A OUTPUT –s 172.16.100.1 –m state –state ESTABLISHED –jACCEPT

10.允许172.16.100.1接收新建立连接和已经建立连接的数据包

Iptables –p INPUT DROP

Iptables –A INPUT –d 172.16.100.1 –m state –state NEW, ESTABLISHED –jACCEPT

11.22238011014325端口的服务放行

Iptables –A INPUT –d 172.16.100.1 –p tcp –m mport –destination-ports22,23,80,110,143,25 –m state –state NEW,ESTABLISHED –j ACCEPT

12.仅允许来自于192.168.1.9-192.168.1.200之间的地址访问服务,且状态为NEWESTABLISHED

Iptables –A INPUT –d 172.16.100.1 -m iprange –src-range192.168.1.9-192.168.1.200 –p tcp --dport 80 –m state NEW,ESTABLISHED –j ACCEPT

13.每秒只放行1个,并发数为3,不带状态监测

Iptables –A INPUT –d 172.16.100.1 –p tcp –dport 80 –m limit –limit1/second –limit-burst 3 –j ACCEPT

14.218-2268:30-14:30允许访问本机的web服务

Iptables –A INPUT –d 172.16.100.1 –p tcp –dport 80 –m time –timestart08:30:00 –timestop 14:30:00 –datestart 2012:02:18 –datestop 2012:02:26 –jACCEPT

15.响应信息中包含web的不能访问

Iptables –A OUTPUT –s 172.16.100.1 –p tcp –sport 80 –m string –algobm –string “web” –j DROP