- ptables 防火墙
- iptables概述
- 防火墙中的四表五链
- 四表
- 五链
- 规则链之间的匹配顺序
- 那么我们来小结一下?
- 安装iptables 服务
- iptables命令行配置方法
- 脱离纸上谈兵,进入实战
- 查看序号
- 删除规则
- 设置默认规则
- 修改规则
Linux 系统的防火墙:IP信息包过滤系统,他实际上由两个组件netfilter和iptables组成。
主要工作在网络层,针对ip数据包。体现在对包内的ip地址、端口、协议等信息处理上。
netfilter/iptables关系:
netfilter:属于“内核态”(Kernel Space,又称为内核空间)的防火墙功能体系。
是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。
iptables:属于“用户态”(User Space,又称为用户空间)的防火墙体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables文件下。
netfilter/iptables后期简称为iptables。iptables是基于内核防火墙,其中内置了 raw、mangle、nat 和filter四个规则表。表中所有规则配置后,立即生效,不需要撑起服务。
规则表的作用:容纳各种规则链。
规则链的作用:容纳各种防火墙规则。
总结:表里有链,链里有规则。
1.raw表:确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、PREROUTING。
2.mangle表:修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、OUTPUT、FORWARD、PREROUTTING
POSTROUTING。
3.nat表:负责网络地址转换,用来修改数据包中的源、目标ip地址或端口。包含三个规则链,INPUT、FORWARD、OUTPUT。
4.filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD、OUTPUT。
在iptables的四个规则表中,mangle表和raw表的应用相对较少。
INPUT:处理入站数据包,匹配目标ip为本机的数据包。
OUTPUT:处理出站数据包,一般不在此链上做配置。
FORWARD:处理转发数据包,匹配流经本机的数据包。
PREROUTING:在进行路由选择前处数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的ip和端口映射到路由器的外网ip和端口上。
POSTROUTING:在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网ip地址上网。
数据包到达防火墙时,规则表之间的优先顺序:
raw > mangle > nat > filter
主机型防火墙:
入站数据(来组外界的数据包,且目标地址是防火墙本机):PREROUTING- - - ->INPUT- - - ->本机的应用程序。
出站数据(从防火墙本机向外部地址发送的数据包):本机应用程序- - - ->OUTPUT- - - ->postrouting。
网络型防火墙:
转发数据(需要经过防火墙转发的数据包):PREROUTING- - - ->FORWARD- - - ->POSTROUTING。
规则链内的匹配顺序
自上向下按顺序依次进行检查,找到相匹配的规则则停止(LOG策略例外,表示记录相关日志)。
若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的情况下,默认策略为允许)。
####例如:
1、拒绝 源地址为100.100.100.0/24的
2、放通 目的地址为192.168.80.0/24的
3、放通 目的地址为192.168.100.0/24的
当数据包 源地址为100.100.100.100 目的地址为192.168.80.15 时能通过吗?
答案是不能的。为匹配即停止,第一条符合条件就不再匹配下一条。
默认策略 默认值为 放通 ACCEPT
那么我们来小结一下?linux 防火墙 系统
组成: 内核态 netfilter(保存包过滤处理的规则集,过滤数据包) 用户态 iptables(防火墙规则管理工具)
四表
raw 对数据包进行状态跟踪
mangle 修改数据包内容,给数据包设置标记
nat 地址转换。转换源/目的IP 或者 端口
filter 过滤数据包 放行 丢弃
五链
INPUT 入站
OUTPUT 出站
FORWARD 转发
PREROUTING 路由前修改目的地址
POSTROUTING 路由后修改源IP
链中的规则集
从上往下一次匹配,匹配到规则即停止;若都没匹配到则按默认策略处理
好了经过一番总结,大家对linux防火墙也有了一定的了解。那么就要开始实 *** 环节了。
首先要在系统中安装iptables防火墙服务。
Centos7中默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables。
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# yum -y install ipstables iptables-services.x86_64
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl status iptables.service
安装完成查看状态。
iptables命令行配置方法命令格式:
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
注意事项:
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
控制类型使用大写字母,其余均为小写
常用的控制类型:
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给出任何回应信息。
REJECT:拒绝数据包的原地址。
SNAT:修改数据包的源地址。
DNAT:改数据包的目的地址。
MASQUERADE:伪装成一个非固定公网IP地址。
LOG:在/var/log/message文件中记录日志信息,然后讲数据包传递给下一条规则。LOG只是一种辅助动作,并没有真正处理数据包。
常用的管理选项:
-A:在指定链的末尾追加一条新的规则
-I:在指定链的开头插入一条新的规则,未指定序号时默认作为第一条规则
-R:修改、替换指定链中的某一条规则,可以指定规则序号或具体内容
-P:设置指定链的默认策略
-D:删除指定链中的某一条规则,可以指定规则序号或Juin内容
-F:清空指定链中的所有规则,可以指定规则序号或具体内容
-L:列出指定链中所有规则,若未指定链名,则列出表中所有链
-n:使用数字形式显示输出结果,如显示ip地址而不是主机名
-v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
–line–numbers:查看规则时,显示规则的序号
了解了语法格式,我们来做一个ping包小实验
[root@localhost ~]# iptables -F ####清空所有规则
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT #######拒绝包含icmp,并回应
[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
然后用另一台机ping它的IP地址
[root@localhost ~]# ping 192.168.43.22
PING 192.168.43.22 (192.168.43.22) 56(84) bytes of data.
From 192.168.43.22 icmp_seq=1 Destination Port Unreachable
From 192.168.43.22 icmp_seq=2 Destination Port Unreachable
From 192.168.43.22 icmp_seq=3 Destination Port Unreachable
From 192.168.43.22 icmp_seq=4 Destination Port Unreachable
From 192.168.43.22 icmp_seq=5 Destination Port Unreachable
CFrom 192.168.43.22 icmp_seq=6 Destination Port Unreachable
ping不通,并给出回应。
脱离纸上谈兵,进入实战 查看序号[root@localhost ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
2 DROP icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
删除规则
1.按指定序号删除
[root@localhost ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
2 DROP icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@localhost ~]# iptables -D INPUT 2
[root@localhost ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
2.按指定内容删除,多条内容相同,则会先删除序号最小的。
[root@localhost ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@localhost ~]# iptables -D INPUT -p icmp -j ACCEPT
[root@localhost ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
设置默认规则
[root@localhost ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@localhost ~]# iptables -P INPUT DROP #####修改完成
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
修改规则
我们常用的方法是,先添加一个新规则在进行修改,以免 *** 作失误带来的损失。
[root@localhost ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@localhost ~]# iptables -R INPUT 1 -p icmp -j DROP ######修改序号1 的icmp 为DROP
[root@localhost ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 ####修改完成
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)