iptables由两部分组成
1.工具 iptables 面对用户 用户态
2.防火墙模块 netfilter 内核模块 内核态
linux的防火墙现在有两种
1.iptables
2.firewalld
这两个关系非常微妙,以前用的都是iptables,红帽7出来之后,红帽搞得新的防火墙用来替代iptables,在iptabels的基础上包了一次,更靠上层了,让操作更简单点,实际底层还是调用的iptables。看起来firewalld用的简单,实际上要记得东西更多。还不如直接用ipatables。这两个通用,用其中任意一个工具写的都规则用另外一个工具都能看,是互通的。在实现一些功能,用firewalld不如iptables方便。
安装iptables管理工具
yum search iptables 有一个services,把它装上
# yum install iptables-services -y
启动防火墙
# systemctl start iptables
只要开了防火墙,所有被系统处理的数据包都会经过防火墙处理,除非没开防火墙。
查看防火墙规则
#iptables -nL
-n不做解析,以数字形式显示协议和地址
-L list列出
#iptables -nl --line-numbers 给每一条规则加一个序列号(显示规则号)
可以用防火墙看服务器的流量
#iptables -nL --line-numbers -v -v 显示详细信息,查看流量
# iptables -S -S 以另外一种形式查看规则
四表五链
对应防火墙来讲表的查看顺序是从上到下查看
表 | 说明 |
raw | 数据包追踪 |
mangle | 数据包标记 |
nat | 地址转换 |
filter | 数据包过滤 |
同一个链里的规则是从上到下按顺序访问,只要匹配到一条规则,就停止其他匹配
链 | 说明 |
PREROUTING | 路由之前 |
INPUT | 数据包进入 |
FORWARD | 路过 经过 |
OUTPUT | 数据包出去 |
POSTROUTING | 路由之后 |
opt就是额外的选项,source原地址 destination目标地址
防火墙语法
#iptables -t 表名 动作 链名 匹配条件 -j 目标动作
清空规则 -F
#iptables -F
追加规则 -A 追加一条规则
#iptables -t filter -A INPUT -p tcp --dport 80 -j REJECT
测一下规则生效吗 直接被拒绝
删除规则 -D
#iptables -t filter -D INPUT -p tcp --dport 80 -j REJECT (不介意用这种)
#iptables -t filter -D INPUT 1 删除INPUT列里的第几条规则,这种比较简单,不用知道条件
清空计数 -Z
#iptables -Z
插入规则 -I
#iptables -t filter -I INPUT 1 -p tcp --dport 80 -j REJECT 放到第一条
修改规则(替换规则) -R
#iptables -t filter -R INPUT 1 -p tcp --dport 80 -j DROP
修改默认规则
#iptables -P INPUT DROP
默认规则是ACCEPT,要把修改哪个列里的默认规则,要把它修改成什么规则,这里只能写两个,ACCEPT,DROP没有第三个选项,到了公司里面,如果对安全比较高,会把所有的默认规则全部都改成DROP,所有需要放行包,再单独写规则给它ACCEPT。
自定义链 -N 自定义链大小写自己定义
#iptables -N k 创建自定义链k
自定义链和系统链不一样,每一个系统链都有自己的功能,代表的不同的数据包的位置点。放在自定义链里的东西默认不会生效,就是用来保存规则的。
添加规则到自定义链
#iptables -t filter -R -A k -p tcp --dport 80 -j DROP
还是能访问
这个链里的规则是不生效的,就是用来保存规则的,保存规则有什么用?哪天想用的时候,就直接可以调用链。iptables -A INPUT -j k我的目标直接变成自定义的名字,再去查看,这就是在系统链里调用自定义链,最终的结果就访问不了
有什么好处?
可以写一堆规则,去完成你想的一个目标,一个功能,但这些规则可能哪一天不想要了,就把它删掉,过了两天又需要规则了,还得重新再写一遍,向这种东西一套规则可以先放在一个自定义链里边,想用直接调用这个链,不想用直接把自己定义的删掉就行了,没必要去删除所有的规则。就是用来保存规则。
使用自定义链 -A
#iptables -A INPUT -j k
改名自定义链 -E 系统链不可以改,自定义链可以改
#iptables -E wing K
删除自定义链 -X
自定义链不能被调用,并且是清空状态
#iptables -X K
删除失败?设备资源忙,是被用着
iptables -D INPUT 1 把INPUT的第一条规则删掉,再删还忙,是因为没有把它清空,删除k链里的规则,iptables -D K 1
iptables -X K
这些动作基本就是在 iptables --help 前面