第三章 IPtables防火墙基本使用

一、iptables防火墙基本概述

netfilter/iptables:IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables 组成。

netfilter/iptables 关系:
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。

netfilter/iptables 后期简称为:iptables。 iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。所有规则配置后,立即生效,不需要重启服务。

二、iptables应用场景

1.主机安全
2.端口转发/ip转发
3.内部共享上网

三、iptables四表五链

#四表:
1.filter表
2.nat表
3.raw表
4.mangle表

#五链:
1.INPUT
2.OUTPUT
3.FORWARD
4.PREROUTING
5.POSTROUTING

image

1.filter表

确定是否放行该数据包(过滤),主要作用就是阻止和允许访问
#包含的链:
1.INPUT:过滤进入主机的数据包
2.OUTPUT:过滤从主机出去的数据包
3.FORWARD:转发经过主机的数据包

2.nat表

修改数据包中的源、目标IP地址或端口,主要作用就是IP和端口转发
#包含的链:
1.PREROUTING:数据流入时,改写数据包地址
2.POSTROUTING:数据流出时,改写数据包地址
3.OUTPUT:过滤从主机出去的数据包

3.mangle表

为数据包设置标记,主要应用在修改数据包内容上,用来做流量整形的,给数据包打个标识
#包含的链:
1.INPUT
2.OUTPUT
3.FORWARD
4.POSTROUTING
5.PREROUTING

4.raw 表

确定是否对该数据包进行状态跟踪,用于处理异常,一般使用不到,raw在整个防火墙体系优先级最高,如果启动用raw表,数据将会跳过conntrack(连接跟踪机制)
#包含的链:
1.PREROUTING
2.OUTPUT

5.五链

1.INPUT:处理入站数据包

image

2.OUTPUT:处理出站数据包,一般不在此链上做配置

image

3.FORWARD:处理转发数据包

image

4.PREROUTING:在进行路由选择后处理数据包,用来修改目的地址,用来做DNAT 。如:把内网中的80端口映射到路由器外网端口上

image

5.POSTROUTING:在进行路由选择前处理数据包,用来修改源地址用来做SNAT。 如:内网通过路由器NAT转换功能实现内网PC机通过一个公网IP地址上网

image

四、iptables工作流程

1.表顺序

raw — mangle — nat — filter

2.链顺序

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

3.规则顺序

1.配置防火墙规则可以添加在下面,也可以添加在前面,是有顺序的
2.匹配规则时是按照从上到下依次匹配
3.只要符合匹配到的规则,就不再往下匹配
4.如果都没有匹配上,则匹配默认规则
5.默认规则最后执行,默认规则是全部都允许
6.匹配次数越多的规则越往前放

ps:按顺序依次检查,匹配即停止(LOG策略例外)。若找不到相匹配规则,则按该链的默认策略处理

4.数据匹配流程

image

五、iptables安装

1.安装

[root@m01 ~]# yum install -y iptables-services

2.安装iptbles支持的内核模块

[root@m01 ~]# modprobe ip_tables
[root@m01 ~]# modprobe iptable_filter
[root@m01 ~]# modprobe iptable_nat
[root@m01 ~]# modprobe ip_conntrack
[root@m01 ~]# modprobe ip_conntrack_ftp
[root@m01 ~]# modprobe ip_nat_ftp
[root@m01 ~]# modprobe ipt_state

#查看加载的模块
[root@m01 ~]# lsmod | egrep 'filter|nat|ipt'

3.启动

#1.关闭firewalld
[root@m01 ~]# systemctl stop firewalld.service

#2.启动iptables
[root@m01 ~]# systemctl start iptables.service
[root@m01 ~]# systemctl enable iptables.service

六、iptables常用参数

1.语法构成

#1.语法构成:
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

#2.注意事项:
• 不指定表名时,默认指filter表
• 不指定链名时,默认指表内的所有链
• 除非设置链的默认策略,否则必须指定匹配条件
• 选项、链名、控制类型使用大写字母,其余均为小写

2.常见的动作类型

1.ACCEPT:允许通过
2.DROP:直接丢弃,不给出任何回应
3.REJECT:拒绝通过,必要时会给出提示
4.LOG:记录日志信息,然后传给下一条规则继续匹配
5.SNAT:修改数据包源地址
6.DNAT:修改数据包目的地址
7.REDIRECT:重定向

3.链管理

-N:new, 自定义一条新的规则链;
-X:delete,删除自定义的规则链;
    注意:仅能删除 用户自定义的 引用计数为0的 空的 链;
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
    ACCEPT:接受
    DROP:丢弃
    REJECT:拒绝
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;

4.规则管理

-A:append,在链的末尾追加一条规则;
-I:insert, 在链的开头(或指定序号)插入一条规则,要指明位置,省略时表示第一条;
-D:delete,删除;
    (1) 指明规则序号;
    (2) 指明规则本身;
-R:replace,替换指定链上的指定规则;
-F:flush,清空指定的规则链;
-Z:zero,置零;
    iptables的每条规则都有两个计数器:
        (1) 匹配到的报文的个数;
        (2) 匹配到的所有报文的大小之和;

5.查看规则列表

-L:list, 列出所有的规则条目;
-n:numberic,以数字格式显示地址和端口号;
-v:verbo,以更详细的方式显示规则信息;
--line-numbers:查看规则时,显示规则的序号;

七、iptables常用操作

1.查看防火墙

#默认是filter表
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
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

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

2.查看指定表

#-t:	指定表
[root@m01 ~]# iptables -nL -t nat

3.清除防火墙规则

[root@m01 ~]# iptables -F
[root@m01 ~]# iptables -X
[root@m01 ~]# iptables -Z

4.添加防火墙规则

[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

5.删除防火墙规则

#防火墙规则加序号
[root@m01 ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

#删除指定id的规则
[root@m01 ~]# iptables -D INPUT 1

八、iptables常见匹配类型

#1.通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口等条件

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

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

1.通用匹配

#1.常见的通用匹配条件:
1.协议匹配:-p 协议名
2.地址匹配:-s 源地址、-d 目的地址
3.接口匹配:-i 入站网卡、-o 出站网卡

# iptables -A FORWARD -s 192.168.1.11 -j REJECT
# iptables -I INPUT -s 10.20.30.0/24 -j DROP
# iptables -I INPUT -p icmp -j DROP
# iptables -A FORWARD -p ! icmp -j ACCEPT
# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP

2.隐含匹配

#1.常用的隐含匹配条件:
1.端口匹配:--sport 源端口、--dport 目的端口
2.ICMP类型匹配:--icmp-type ICMP类型

# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
# iptables -A INPUT -p icmp -j DROP

3.显示匹配

#1.常用的显式匹配条件:
1.多端口匹配:-m multiport --sport 源端口列表
  -m multiport --dport 目的端口列表
2.IP范围匹配:-m iprange --src-range IP范围
3.MAC地址匹配:-m mac –mac1-source MAC地址
4.状态匹配:-m state --state 连接状态

# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
# iptables -P INPUT DROP
# iptables -I INPUT -p tcp -m multiport --dport 80-82,85 -j ACCEPT
# iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

九、iptables防火墙配置实例

1.禁止访问22端口

[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

iptables 	#防火墙命令
-t 			#指定表
filter 		#filter表
-A 			#追加规则到链
INPUT 		#指定链
-p 			#指定协议
tcp 		#tcp协议
--dport 	#指定端口
22 			#端口号
-j 			#指定动作
DROP		#丢弃

2.禁止IP访问

[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.7 -j DROP

-s			#指定IP
10.0.0.7	#IP地址或网段

3.禁止IP网段

[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j DROP

-i			#指定网卡

4.只允许某个IP访问

#方式一:
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -j ACCEPT
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -j DROP

#方式二:
[root@m01 ~]# iptables -t filter -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP

!  			#取反

5.拒绝端口范围

#如果端口是连续的
[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22:200 -j DROP

#如果端口不是连续的
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 22:200,3000:4000 -j DROP 

十、iptables防火墙企业级配置案例

1.配置之前

1.考虑一下哪些机器需要防火墙
2.该服务器部署了哪些服务
	nginx
	sshd
3.服务的端口
	80
	443
	22
4.其他端口全部拒绝

2.配置

[root@m01 ~]# iptables -F
[root@m01 ~]# iptables -X
[root@m01 ~]# iptables -Z
[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22  -s 10.0.0.1  -j ACCEPT
[root@m01 ~]# iptables -t filter -I INPUT -p tcp -m multiport  --dport 80,443   -j ACCEPT
[root@m01 ~]# iptables -t filter  -P INPUT DROP

3.防火墙规则永久生效

#防火墙配置文件,当重启防火墙时,会读取配置文件,配置文件中的配置才会永久生效
[root@m01 /home/lhd]# vim /etc/sysconfig/iptables

#想要永久生效配置,配置好防火墙策略,测试成功
[root@m01 /home/lhd]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
posted @ 2022-02-11 12:11  年少纵马且长歌  阅读(260)  评论(0编辑  收藏  举报