首页 > 代码库 > iptables防火墙(一)

iptables防火墙(一)

Linux的防火墙主要工作在网络层,针对TCP/IP数据包实现过滤和限制,属于包过滤防火墙(或称为网路层防火墙)。

 

1.LINUX防火墙:Netfilteriptables的主要区别如下:

netfilter 位于Linux内核中的包过滤功能体系

称为Linux防火墙的内核态

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

称为Linux防火墙的用户态

 

  规则的作用:对数据包进行过滤或处理

 

2.规则表:

表的作用:容纳各种规则链

表的划分依据:防火墙规则的作用相似

默认包括4个规则表

raw表:确定是否对该数据包进行状态跟踪
       mangle表:为数据包设置标记
       nat表:修改数据包中的源、目标IP地址或端口
       filter表:确定是否放行该数据包(过滤)

3.规则链

      链的作用:容纳各种防火墙规则

  链的分类依据:处理数据包的不同时机

 

默认包括5种规则链

 INPUT:处理入站数据包
  OUTPUT:处理出站数据包
  FORWARD:处理转发数据包
  POSTROUTING链:在进行路由选择后处理数据包
  PREROUTING链:在进行路由选择前处理数据包

4.默认的表、链结构示意图

技术分享

6.规则表之间的顺序

raw?mangle?nat?filter

6.规则链之间的顺序

入站:PREROUTING?INPUT
出站:OUTPUT?POSTROUTING
转发:PREROUTING?FORWARD?POSTROUTING

7.规则链内的匹配顺序

按顺序依次检查,匹配即停止(LOG策略例外)

若找不到相匹配的规则,则按该链的默认策略处理

 

8.基本语法:

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

  默认处理filter

 

9.数据包的常见控制类型

ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配

例子:在filter表的input链中插入(-I)一条规则,拒绝发给本机的icmp协议的数据包

[root@crushlinux~]# iptables -t filter -I INPUT -p icmp -j REJECT

10.添加新的规则

 

选项:

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

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

    -D: 删除指定链中的某一条规则

    -L:制定并列出

    -F:清空指定链中的所有规则

    -P:设置指定链中的默认策略

    -n:使用数字形式

    -v:查看规则列表时显示详细信息

    -h:查看命令的详细信息

    -line-numbers:查看并显示序列号

添加一条防火墙规则

[root@crushlinux ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT

添加的两条规则分别位于filter表的第一条和第二条

[root@crushlinux~]# iptables -I INPUT -p udp -j ACCEPT
[root@crushlinux~]# iptables -I INPUT 2 -p icmp -j ACCEPT

12.查看规则表

[root@crushlinux~]#  iptables -L INPUT --line   
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  anywhere             anywhere            
2    ACCEPT     icmp --  anywhere             anywhere            
3    REJECT     icmp --  anywhere             anywhere            reject-with icmp-port-unreachable 
4    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
5    ACCEPT     icmp --  anywhere             anywhere            
6    ACCEPT     all  --  anywhere             anywhere            
7    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
8    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 
9    ACCEPT     tcp  --  anywhere             anywhere

13. 删除,清空规则

[root@crushlinux~]#  iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0   

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22

REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0

删除INPUT

[root@CentOS6-node1 ~]# iptables -D INPUT 3

14.设置默认策略

iptables的各条链中,默认策略是规则匹配的最后一个环节,当找不到任何一条能够匹配数据包的规则时,则执行默认策略

[root@crushlinux~]# iptables -t filter -P FORWARD DROP
[root@crushlinux~]# iptables -t filter -P OUTPUT ACCEPT        

15.通用匹配

 

1)协议匹配

丢弃通过icmp协议访问防火墙本机的数据包,允许转发经过防火墙的除icmp协议之外的数据包

[root@crushlinux~]# iptables -I INPUT -p icmp -j DROP
[root@crushlinux~]# iptables -A FORWARD ! -p icmp -j ACCEPT

2)地址匹配

拒绝转发源地址为192.168.1.11的数据,允许转发源地址位于192.168.7.0/24网段的数据

[root@crushlinux~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
[root@crushlinux~]# iptables -A FORWARD -s 192.168.7.0/24 -j ACCEPT

3)网络接口匹配

若要丢弃从外网接口访问访问防火墙本机且源地址为私有地址的数据包

[root@crushlinux~]# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
[root@crushlinux~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
[root@crushlinux~]# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP

隐含匹配

1) 端口匹配

允许为网段192.168.4.0/24转发DNS查询数据包

[root@crushlinux~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
[root@crushlinux~]# iptables -A FORWARD -d 192.168.4.0/24 -p udp --dport 53 -j ACCEPT

1) ICMP类型匹配

要禁止从其他主机ping本机,但是允许本机ping其他主机

[root@crushlinux~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@crushlinux~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@crushlinux~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
[root@crushlinux~]# iptables -A INPUT -p icmp -j DROP

列出所有支持类型

[root@crushlinux~]# iptables -p icmp –h
Valid ICMP Types:
any
echo-reply (pong)
destination-unreachable
   network-unreachable
   host-unreachable
……………………………………………..

显示匹配

1) 多端口匹配

允许本机开放25,80,110,143端口

[root@crushlinux ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT

2) IP范围匹配

禁止192.168.4.21-192.168.4.28之间的TCP数据包

[root@crushlinux ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT

3) MAC地址匹配

根据mac地址封锁主机

[root@crushlinux ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:a9:8a:dc -j DROP

4) 状态匹配

禁止转发与正常TCP连接无关的非—syn请求数据包

[root@crushlinux ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

只开放本机的80端口,但对发给本机的TCP应答数据包予以放行,其它入站数据包均丢弃,则对应的入站控制规则

[root@crushlinux ~]# iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
[root@crushlinux ~]# iptables -I INPUT -p tcp -m state --state  ESTABLISHED -j ACCEPT
[root@crushlinux ~]# iptables -P INPUT DROP

 

 

iptables防火墙(一)