一、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
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:处理入站数据包
2.OUTPUT:处理出站数据包,一般不在此链上做配置
3.FORWARD:处理转发数据包
4.PREROUTING:在进行路由选择后处理数据包,用来修改目的地址,用来做DNAT 。如:把内网中的80端口映射到路由器外网端口上
5.POSTROUTING:在进行路由选择前处理数据包,用来修改源地址用来做SNAT。 如:内网通过路由器NAT转换功能实现内网PC机通过一个公网IP地址上网
四、iptables工作流程
1.表顺序
raw — mangle — nat — filter
2.链顺序
入站:PREROUTING INPUT
出站:OUTPUT POSTROUTING
转发:PREROUTING FORWARD POSTROUTING
3.规则顺序
1.配置防火墙规则可以添加在下面,也可以添加在前面,是有顺序的
2.匹配规则时是按照从上到下依次匹配
3.只要符合匹配到的规则,就不再往下匹配
4.如果都没有匹配上,则匹配默认规则
5.默认规则最后执行,默认规则是全部都允许
6.匹配次数越多的规则越往前放
ps:按顺序依次检查,匹配即停止(LOG策略例外)。若找不到相匹配规则,则按该链的默认策略处理
4.数据匹配流程
五、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 ]