iptables:超详细Iptables防火墙基础规则(四个规则表,5个种规则链)与编写Iptables防火墙规则,

Linux包过滤防火墙概述

■netfilter
●位于Linux内核中的包过滤功能体系
称为Linux防火墙的“内核态”

■iptables
●位于/sbin/iptables,用来管理防火墙规则的工具
●称为Linux防火墙的“用户态”

上述2种称呼都可以表示L inux防火墙

在这里插入图片描述

■iptables的表、链结构

■规则链

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

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

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

■默认包括5种规则链

●INPUT:处理入站数据包

●OUTPUT:处理出站数据包

●FORWARD:处理转发数据包

●POSTROUTING链:在进行路由选择后处理数据包

●PREROUTING链:在进行路由选择前处理数据包

■规则表的作用

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

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

■默认包括4个规则表

●raw表:确定是否对该数据包进行状态跟踪

●mangle表:为数据包设置标记

●nat表:修改数据包中的源、目标IP地址或端口

●filter表:确定是否放行该数据包(过滤)

■表链的结构示意图

在这里插入图片描述

数据包过滤的匹配流程

■规则表之间的顺序

●raw>mangle-→nat >filter

■规则链之间的顺序

●入站: PREROUTING> INPUT

●出站: OUTPUT→POSTROUTING

●转发: PREROUTING→FORWARD>POSTROUTING

■规则链内的匹配顺序

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

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

在这里插入图片描述

iptables安装

CentOS 7默认使用firewalld防火墙,若想使用iptables防火墙,
■关闭firewalld防火墙
必须先关闭firewalld防火墙


[root@localhost ~]systemctl stop firewalld
[root@localhost ~]systemctl disable firewalld

■安装iptables防火墙


[root@localhost ~]yum -y install iptables iptables-services

■设置iptables开机启动


[root@localhost ~]systemctl start iptables
[root@localhost ~]systemctl enable iptables

iptables的基本语法

■语法构成

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

[root@localhost ~]# iptables -t filter -I INPUT -P icmp -j REJECT

阻止ping测试
-I 为插入
-P用来指定协议

意思为:去filter表中在第一行插入阻止 icmp 入站的命令 ,必要时给出提醒

■注意事项

●不指定表名时,默认指filter表

●不指定链名时,默认指表内的所有链

●除非设置链的默认策略,否则必须指定匹配条件

●选项、链名、控制类型使用大写字母,其余均为小写

■数据包的常见控制类型

●ACCEPT : 允许通过

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

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

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

iptables的管理选项

■添加新的规则

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

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


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

去filter末行添加允许tpc入站规则

[root@localhost ~]iptables -I ANPUT -p udp -j ACCEPT
不指定表明时,默认指filter表
去filter表第一行添加入站规则:允许udp放通
[root@localhost ~]iptables -I INPUT 2 -p icmp -j ACCEPT
去filter表第二行添加入站规则:允许icmp放通

-p用来指定协议

■查看规则列表;

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

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

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

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

比如:

[root@localhost ~]iptables -L INPUT     列出INPUT所有的规则条目
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     icmp --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere     
[root@localhost ~]   iptables -vL INPUT   以更详细的信息列出INPUT所有的规则条目
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    4   344 ACCEPT     udp  --  any    any     anywhere             anywhere            
    0     0 ACCEPT     icmp --  any    any     anywhere             anywhere            
    8   890 REJECT     icmp --  any    any     anywhere             anywhere             reject-with icmp-port-unreachable
  863 82931 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
    1    52 ACCEPT     tcp  --  any    any     anywhere             anywhere             state NEW tcp dpt:ssh
  390 35169 REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-host-prohibited
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            
[root@localhost ~]  iptables -nL INPUT     以数字形式显示地址端口等列出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           
REJECT     icmp --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHE
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22

      
[root@localhost ~]# iptables -L INPUT --line-numbers
列出INPUT所有的规则条目,显示规则的序号

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            
prohibited

■删除、清空规则

●-D:删除链内指定序号(或内容)的一条规则

●-F:清空所有的规则

比如:

[root@localhost ~]# iptables -nL INPUT --line-numbers
以数字形式显示地址端口等列出INPUT所有的规则条目  并显示规则的序号
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    REJECT     icmp --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED

[root@localhost ~]# iptables -D INPUT 4     删除INPUT规则里的第四条

[root@localhost ~]# iptables -nL INPUT --line-numbers 
以数字形式显示地址端口等列出INPUT所有的规则条目  并显示规则的序号
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    REJECT     icmp --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
[root@localhost ~]# iptables -nL INPUT --line-numbers
以数字形式显示地址端口等列出INPUT所有的规则条目  并显示规则的序号 
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    REJECT     icmp --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

[root@localhost ~]# iptables -F INPUT         清空INPUT所有规则

[root@localhost ~]# iptables -nL INPUT --line-numbers 
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

■设置默认策略

●-P:为指定的链设置默认规则

[root@localhost ~]# iptables -t filter -P FORWARD DROP
filter表默认 转发数据包  直接丢弃
[root@localhost ~]# iptables -P OUTPUT ACCEPT
filter表默认 入站数据包  放通通

清空所有默认策略要么是ACCEPT、
要么是DROP表的所有链

■常用管理选项汇总

在这里插入图片描述

规则的匹配条件

■通用匹配

●可直接使用,不依赖于其他条件或扩展

●包括网络协议、IP地址、 网络接口等条件

■隐含匹配

●要求以特定的协议匹配作为前提
●包括端口、TCP标记、ICMP类型等条件

■显式匹配

●要求以 “-m扩展模块” 的形式明确指出类型
●包括多端口、MAC地址、IP范围、数据包状态等条件

■常见的通用匹配条件

●协议匹配: -p 协议名

●地址匹配 : -s 源地址、 -d 目的地址

●接口匹配 :-i入站网卡、 -0出站网卡

[root@localhost ~]# iptables -I INPUT -P icmp -j DROP
在filter第一条插入处理入站数据包规则: icmp数据直接丢弃,不给任何会用
[root@localhost ~]# iptables -A FORWARD ! -P icmp -j ACCEPT
在filter最后一行追加一条处理转发数据包规则: 不允许 icmp数据 放通

叹号!表示条件取反

[root@localhost ~]# iptables -A FORWARD -S 192.168.1.11 -j REJECT
在filter最后一行追加一条处理转发数据包规则:拒绝源地址为192.168.1.11的数据通过,必要时会给出提醒
[root@localhost ~]# iptables -I INPUT -S 10.20.30.0/24 -j DROP
在filter第一行插入一条 处理入站数据包规则:直接丢弃源地址为10.20.30.0网段的数据 不给出任何回应

[root@localhost ~]# iptables -A INPUT -i ens33 -S 192.168.0.0/16 -j DROP
在filter表链的最后行追加一条 处理入站数据包规则:入站网卡为ens33 源地址为190.168.0.0网段的数据 直接丢弃,不给任何回应

[root@localhost ~]# iptables -A INPUT -i ens33 -S 10.0.0.0/8 -j DROP
这个留给你们翻译
[root@localhost ~]# iptables -A INPUT -i ens33 -S 172.16.0.0/12 -j DROP
这个留给你们翻译


ens33指的是 外网接口

■常用的隐含匹配条件

●端口匹配: --sport 源端口、–dport 目的端口

●ICMP类型匹配: --icmp-type ICMP类型

比如:允许网段为192.168.4.0/24 转发DNS查询数据包可执行以下这条:
[root@localhost ~]# iptables -A FORWARD -S 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
在filter表链的最后行追加一条 处理转发数据包规则:源地址为192.168.4.0网段,使用的是udp协议,目的端口号为53号的数据  允许放通


[root@localhost ~]# iptables -A INPUT -P tcp --dport 20:21 -j ACCEPT
在filter表链的最后行追加一条tcp默认 处理入站数据包规则:目的端口为20  21的数据全部放通
比如:若要禁止从其他主机ping本机,但是允许本机ping其他主机,可执行以下操作 
[root@localhost ~]# iptables -A INPUT -P icmp --icmp-type 8 -j DROP
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp j DROP
8请求,0回显,3不可达

编写iptables规则时,使用“--icmp-type ICMP类型”的形式,针对的协议为ICMP,用来检查ICMP数据包的类型(--icmp-type)
ICMP类型使用字符串或数字代码表示,如“echo-request”代码为(8) ,“echo-Reply”代码为(0)
“Destination-Unreachable”代码为(3),8请求,0回显,3不可达

■常用的显式匹配条件

●多端口匹配: -m multiport --sports源端口列表
-m multiport --dports目的端口列表

●IP范围匹配: -m iprange --src-range IP范围

●MAC地址匹配: -m mac --mac-source MAC地址

●状态匹配: -m state - -state连接状态

若要允许本机开放25  80  110  143 端口,以便提供电子邮件服务,可执行以下这条
[root@localhost ~]iptables -A INPUT -P tcp -m multiport --dport 25,80,110,143 -j ACCEPT


若要禁止转发源IP地址位于192.168.4.21与192.168.4.28之间的TCP数据包,可执行以下这条
[root@localhost ~]iptables -A FORWARD -P tcp -m iprange --src-range 192.168.4.21
192.168.4.28 -j DROP


若要根据MAC地址封锁主机,禁止其访问本机的任何应用,可以参考以下操作
[root@localhost ~]iptables -A INPUT -m mac --mac-source 00:0C:29:c0:55:3f j DROP

■本章总结

■iptables的基本语法

■iptables常用管理选项

●A、|、L、n、V、–line-numbers、 D、F、P

■iptables规则匹配条件

●通用匹配、隐含匹配、显式匹配

猜你喜欢

转载自blog.csdn.net/weixin_48190891/article/details/107815698