iptables 通配符 iptables ipset_IP

 

一、IPtables 入门简介:+

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

防火墙在做信息包过滤时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在linux内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包是一款功能强大的工具,可用于编辑、添加和移除规则。

 

 

二、linux防火墙工具的分类

 

(1)netifilter(内核空间,kernelspace):是内核的一部分,有一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

(1)位于linux内核中的包过滤功能体系。

(2)称为linux 防火墙的“内核态”。

(2)iptables

(1)位于/sbin/iptables,用来管理防火墙规则的工具

(2)称为linux 防火墙的“用户态”

 

 

 

三、包过滤的工作层次(网络层,针对ip数据包),如下图

 

iptables 通配符 iptables ipset_包过滤_02

 

 

 

 

 

 

 

 

 

 

 

四、IPtables 表与链功能详解

 

 

iptables 通配符 iptables ipset_包过滤_03

注意:当配置iptables 规则时,许多协议都是双向通信。所以需要同时配置输入链和输出链。

 

iptables 通配符 iptables ipset_IP_04

 

iptables 通配符 iptables ipset_IP_05

 

 

iptables 通配符 iptables ipset_IP_06

 

 

 

 

 

iptables 通配符 iptables ipset_iptables 通配符_07

 

 

 

 

 

五、Iptables 的基本语法:

(1)语法构成

iptables  [-t 表名]  选项 [链名]   [条件]  [-j 控制类型]

如下图所示,禁止ping 包输入到这台主机

iptables 通配符 iptables ipset_包过滤_08

 

(2)数据包的常见控制类型:

ACCEPT:允许通过

DROP:直接丢弃,不给出任何回应

REJECT:拒接通过,必要时会给出提示

LOG:记录日志信息,然后传给下一条规则继续匹配

 

iptables 通配符 iptables ipset_包过滤_09

 

(3)添加新的规则:

-A  :在链的末尾追加一条规则

-I  :在链的开头(或指定序号)插入一条规则

实例如下

iptables 通配符 iptables ipset_linux_10

(4)查看规则列表:

  -L:列出所有的规则条目

  -n:以数字形式显示地址、端口等信息

  -v:以更详细的方式显示规则信息

  --line-numbers:查看规则时,显示规则的序号

 

iptables 通配符 iptables ipset_IP_11

 

(5)删除、清空、清除规则

     -D     //删除链内的指定序列号的一条规则

-F          //清空所有规则

-Z     //清除链中使用的规则

 

iptables 通配符 iptables ipset_包过滤_12

 -

 

(6)设置默认策略,大写字母P

iptables 通配符 iptables ipset_IP_13

 

六、规则的匹配条件:

 

iptables 通配符 iptables ipset_iptables 通配符_14

 

 

 

 

 

(1)常见的通用匹配条件:

iptables 通配符 iptables ipset_包过滤_15

例子:

iptables   -I  INPUT  !  —p  icmp   -j   ACCEPT   // ! 号表示取反

禁止除了ICMP以外的协议可以通信

iptables 通配符 iptables ipset_包过滤_16

 

(2)隐含匹配的条件:

-P                   // tcp、udp、icmp
--sport       //指定源端口
--dport       //指定目的端口
-s                          // 源地址
-d                          // 目的地址
-i                           // 数据包进入的网卡
-o                          // 数据包出口的网卡

例子:

iptables 通配符 iptables ipset_包过滤_17

 

iptables 通配符 iptables ipset_linux_18

 

 

(3)常用的显示匹配条件:

1.多端口匹配: -m    multiport  --sports      源端口列表
                            -m       multiport   --dports    目的端口列表
  2.ip范围分配:  -m   iprange     --src-range   IP范围
  3.mac地址匹配: -m   mac           --mac-source      mac地址
  4.匹配状态: -m   state --state       连接状态
  5. -m  limit   --limit 3/minutes         每三分钟一次
  6. -m  limit   --limit-burst  5       只匹配五个数据包
 7. -mtime--timestart 8:00  --timestop 12:00   表示从哪个时间到那个时间

 

例子:

iptables 通配符 iptables ipset_包过滤_19

iptables 通配符 iptables ipset_linux_20

 

iptables 通配符 iptables ipset_iptables 通配符_21

 

保存防火墙规则:

service  iptables    save

 

 

 

 

iptables 通配符 iptables ipset_包过滤_22

 

 

注意:配置INPUT时,要清空filter 表,清空filter表,表示防火墙不起任何作用(相当于关闭),可以设置自己的策略,

七、iptables (企业) 案例分析:

(1)INPUT   ACCEPT [0:0]   #该规则表示INPUT表的默认策略是ACCEPT;

(2)FORWARD  ACCEPT [0:0]   #该规则表示FORWARD表的默认策略是ACCEPT;

(3)OUTPUT  ACCEPT  [0:0]  #该规则表示OUTPUT表的默认策略是ACCEPT;

(4)-A  INPUT -m state --state ESTABLSHED,RELATED  -j  ACCEPT  #意思是允许进入的数据包只能是刚刚我发出去的数据包回应,ESTABLISHED:已建立的连接状态。RELATED:该数据包与本机发出的数据包有关。

(5)-A   INPUT  -p  icmp   -j  ACCEPT #允许icmp包进来
-A  INPUT  -i lo  -j  ACCEPT  #意思是允许本地回环接口在INPUT表的所有数据通信,-i 参数是指定接口,接口就是lo,lo是loopback(本地回环接口)

(6)-A  INPUT -j  REJECT  -reject-with  icmp-host-prohibited

     -A  FORWARD  -j REJECT  -reject-with  icmp-host-prohibited

#这两条意思是表示在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包,并且发送一条 host prohibited的消息给被拒绝的主机。
 
-m  state  --state  //模糊匹配一个状态
NEW  //用户发起一个新连接
ESTABLISHED  //对一个新的请求进行回应
RELATED   // 两个完整连接之间的相互关系,一个完整连接,需要依赖于另一个完整的连接
INVALID   //无法识别的状态
(7)web服务器,开启80端口:
iptables  -A  INPUT  -p  tcp   --dport  80  -j  ACCEPT
(8)邮件服务器,开启25,110端口
iptables  -A  INPUT  -p  tcp   --dport  25  -j  ACCEPT
iptables  -A  INPUT  -p  tcp   --dport  110  -j  ACCEPT
(9)ftp服务器,开启21 端口:
iptables  -A  INPUT  -p  tcp   --dport  21  -j  ACCEPT
iptables  -A  INPUT  -p  tcp   --dport  20  -j  ACCEPT
 
(10)DNS服务器,开启53端口
iptables  -A  INPUT  -p  tcp   --dport  53  -j  ACCEPT
(11)允许icmp包通过,也就是允许ping
iptables  -A  INPUT  -p  icmp   --j  ACCEPT
iptables  -A  OUTPUT  -p  icmp   --j  ACCEPT
(12)将本机的8080端口转发至其他主机,主机ip:192.168.1.12,目标主机ip和端口:192.168.1.13:8080,
iptables  -t nat  -A   PREROUTING  -p tcp   -m  tcp  --dport  8080  -j  DNAT  --to-destination  192.168.1.13:8080
iptables  -t nat  -A  POSTROUTING  -p  tcp   -m  tcp  --dport  8080  -j  SNAT  --to-source  192.168.1.12
echo  1 >  /proc/sys/net/ipv4/ip_forward

同时开启端口转发