2

防火墙

防火墙作为一种内部网与外部网之间的访问控制设备,通常安装在内部网络与外部网络的边际,防火墙具有很好的网络保护作用。入侵者必须先通过防火墙的安全防线才能接触计算机。可以将防火墙配置不同的安全级别,达到不同的安全防护。

iptables与netfilter的关系

netfilter/iptables是集成在Linux2.4x版本内核中的包过滤防火墙系统。它可以实现数据包过滤网络地址转换以及数据包管理功能。Linux中的防火墙系统中,netfilter位于内核空间,负责对本机所有流入,流出,转发的数据包进行查看,修改,丢弃,拒绝等操作,由于netfilter位于内核空间,用户一般无法接触内核和修改内核,所以就需要一些命令行工具进行管理,常用的有iptables,firewalld等工具。因此,真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。

iptables结构

简单来说,iptables是由表组成,表是链的集合,链上有规则。如果将iptables比作一栋楼,那么表、链、规则是:

iptables 表(tables) 链(chains) 规则(policy)
大楼 每一层楼 一层楼的房间 房间内的布局

iptables中有四表五链

作用
filter 实现数据包的过滤(常用)
nat 修改数据包的地址和端口(常用)
mangle 修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块(用得不多)
raw 决定数据包是否被状态跟踪机制处理(用得不多)

而链分别是:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。

filter表的链
filter表是iptables默认的表,有3条链,分别是INPUT、FORWARD和OUTPUT链。

  1. INPUT:对于指定到本地套接字的包,即到达本地防火墙服务器的数据包。
  2. FORWARD:路由穿过的数据包,即经过本地防火墙服务器的数据包。
  3. OUTPUT:本地创建的数据包

nat表的链
对于nat表来说有3条链,分别是PREROUTING、OUTPUT和POSTROUTING链。

  1. PREROUTING:所有的数据包进来的时侯都先由这个链处理
  2. OUTPUT:本地创建的数据包在路由前进行改变
  3. POSTROUTING:在数据包即将出去时改变数据包信息,所有的数据包出来的时侯都先由这个链处理

iptables工作流程

  1. 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
  2. 如果数据包就是进入本机的,它就会沿着图向上移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

clipboard.png

规则表之间的优先顺序:
Raw>mangle>nat>filter

规则链的优先顺序
分3种情况

入站数据流向

从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

转发数据流向

来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。

出站数据流向

防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

工作流程小结:

1、防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
2、如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。
3、如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4、防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。

iptables语法

iptables的语法命令格式:

iptables -t [表名] 命令选项 [链名] 匹配参数 [-j目标动作]

说明:
表名和链名:用于指定iptables操作的是哪个表哪条链
命令选项:用于指定管理iptables规则的方式(增加,删除等)
匹配参数:用于指定对符合什么条件的数据包进行处理
目标动作:用于指定对数据包的处理

选项:

  • -t:指定需要维护的防火墙规则表,不使用-t时,默认操作filter表

命令选项:

  • -A:追加防火墙规则
  • -D:删除防火墙规则
  • -I:插入防火墙规则
  • -F:清空防火墙规则
  • -L:列出防火墙规则
  • -R:替换防火墙规则
  • -Z:清空防火墙数据表统计信息
  • -P:设置链默认规则

匹配参数

  • [!] -P:匹配协议,!代表取反即不匹配
  • [!] -s:匹配源地址
  • [!] -d:匹配目标地址
  • [!] -i:匹配入站网卡接口
  • [!] -o:匹配出站网卡接口
  • [!] --sport:匹配源端口
  • [!] --dport:匹配目标端口
  • [!] --src-range:匹配源地址范围
  • [!] --dst-range:匹配目标地址范围
  • [!] --limit:匹配数据表速率
  • [!] --mac-source:匹配源MAC地址
  • [!] --sports:匹配源端口
  • [!] --dports:匹配目标端口
  • [!] --state:匹配状态
  • [!] --string:匹配应用层字串

目标动作

  • ACCEPT:允许数据包通过
  • DROP:丢弃数据包
  • REJECT:拒绝数据包通过
  • LOG:将数据包信息记录syslog日志
  • DNAT:目标地址转换
  • SNAT:源地址转换
  • MASQUERADE:地址欺骗
  • REDIRECT:重定向

iptables的保存
默认的iptables防火墙规则会立刻生效,但如果不保存,当计算机重启后所有的规则都将丢失,所以对防火墙规则进行及时的保存操作是有必要的。
备份工具:

iptables-save > /etc/sysconfig/iptables

还原工具:

iptables-restore < /etc/sysconfig/iptables

或者执行service iptables save也行。

iptables常见规则示例

1、查看filter表的所有规则

iptables -nL

2、查看nat表的所有规则

iptables -t nat -nL

3、清空filter表的所有规则

iptables -t filter -F

4、往filter表添加一条规则,丢弃192.168.0.1主机发给本机的所有数据包

iptables -t filter -A INPUT -s 192.168.0.1  -j DROP

5、往filter表插入一条规则,拒绝192.168.0.2主机ping本机

iptables -I INPUT -s 192.168.0.2 -p icmp -j REJECT 

6、查看filter表中防火墙规则并显示规则编号

iptables -nL --line-number

7、删除filter表中INPUT链的第一条规则

iptables -D INPUT 1

8、替换filter表INPUT链的第二条规则,拒绝除了192.168.0.3之外的任何主机连接本机

iptables -R INPUT 2 ! -s 192.168.0.3 -j REJECT

9、修改filter表INPUT链的默认规则为接收数据包

iptables -P INPUT ACCEPT

10、禁止来自10.0.0.188 ip地址访问80端口的请求

 iptables -A INPUT -s 10.0.0.188 -p tcp --dport 80 -j DROP

11、实现把访问10.0.0.3:80的请求转到172.16.1.17:80

 iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.6:80

12、只允许远程主机访问本机的80端口

 iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 iptables -A INPUT -p tcp -j DROP

13、实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网。

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26    
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE     

14、允许任意客户端访问服务主机提供的日常服务(HTTP,HTTPS,DNS,NTP,SMTP,POP3)

iptables -A INPUT -p udp --dport 25 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

15、禁止任何主机访问本机22端口

iptables -A INPUT -p tcp -dport 22 -j DROP    

syushin
948 声望316 粉丝

引用和评论

0 条评论