firewall和netfilter
时间: 2019-10-05来源:OSCHINA
前景提要
「深度学习福利」大神带你进阶工程师,立即查看>>>
firewall和netfilter 临时关闭防火墙 selinux 使用命令 setenforce 0 如果想永久关闭防火墙,需要修改配置文件 配置文件地址是 /etc/selinux/config 可以使用 vi /etc/selinux/config 进行修改 如图,打开config文件后,可以看到上图内容 这里需要把 SELINUX=enforcing 的值 修改为 disabled 也就是 SELINUX=disabled ,然后保存退出,重启系统就生效了 如图,命令 getenforce 可以查看 selinux 的状态 上图显示为 Enforcing 表示是打开状态 使用 setenforce 0 命令把 selinux 临时关闭 然后再使用 getenforce 查看 selinux 的状态 可以看到变成了 Permissive Permissive的意思是,一些会触发防火墙的操作,系统会提出警告 如果是 Enforcing 状态,系统会直接打断操作 而 Permissive 状态下,系统不会打断操作,但是会在后台记录警告信息 也就是说,可以进行一些会触发 selinux 的操作 除了selinux这个防火墙外,还有另外一个防火墙叫做 netfilter selinux防火墙是对内的,而 netfilter 是对外的 网络过来的包会被netfilter处理,如果通过了netfilter 进入到系统内部,则会受到 selinux 的限制 想要控制 netfilter 工作 可以使用 iptables 和 firewalld 这两个工具来操作netfilter centOS7 之前的版本,都是使用 iptables 来操作 netfilter 从centOS7开始,新增了 firewalld 工具也可以操作 netfilter firewalld 本质上是 iptables 的封装 firewalld 的命令实际上也是由 iptables 来实现的 等于是把复杂的iptables命令封装起来,变成一条简单的firewalld命令 与iptables相比,firewalld操作简单一些,也有更强大的功能 centOS7 的默认防火墙工具是 firewalld 而不是 iptables 在firewalld里面也可以使用iptables的命令 但是不推荐使用,在firewalld工具里面最好还是使用firewalld命令为佳 因为firewalld也是用iptables来实现的,很多公司也在用centOS6,不支持firewalld 所以 iptables 也是要了解清楚的 centOS7 默认使用的是 firewalld 如果想使用 iptables 需要先关闭 firewalld 如图,systemctl disable firewalld 关闭firewalld,这样重启后就不会启动firewalld 下面的命令 systenctl stop firewalld 是停止正在运行的firewalld服务 这样就把 firewalld 设置为关闭,并且停止了正在运行的firewalld 要使用 iptables 要先安装一个包,如上图 关闭了 firewalld 服务后,需要开启 iptables 服务 如图,systemctl enable ipptables 命令将iptables 设置为可开启状态 然后 systemctl start iptables 打开 iptables 服务 如图,使用命令 iptables -nvL 可以查看 iptables 的默认规则信息
netfilter5表5链介绍 使用命令 man iptables 往下翻页,可以看到上图中的信息 filter,nat,mangle,raw,security 代表5张表 默认的表是 filter 如图,filter 解释里面有三个链的信息 filter内置了3个链,分别是 input,output,forward 三个链 input 可以对进入本机系统内核的数据包进行处理 forward 是指进入机器的数据包,但是不进入系统内核 因为有些数据包经过本机,但是目标地址并不是本机 如果数据包的目标地址不是本机,只是路过本机就会进入 forward 链 forward链就可以对这些数据包进行操作,比如 修改目标地址 output链可以对 本机内核出去的数据包进行一些操作 举例说明,本机要发一个数据包到一个ip地址去 但是管理员不希望本机有任何数据包被发送到这个ip地址 这时就可以在output链设置规则,所有目标地址是这个ip地址的包都不能出去 前提是这些数据包是本机产生的,因为output只对本机产生的包有效 如图所示,外面发送数据包到本机 数据包会从 in 的位置进入,首先经过 prerouting 链 在 prerouting 链里面,会经过三张表的策略进行判断数据包的去向 每个链里面,都有显示 表 的名称 就说明,经过这个链的时候,这些表里面写好的规则会起作用 比如说,prerouting 里面有三个表,nat,mangle,raw 这说明,在这三个表里面,可以写一些针对经过 prerouting 链的数据包的规则 每一个经过 prerouting 链的数据包,都会被这些规则处理一遍 从链的流向来看,数据包到达 prerouting链,这里会判断数据包的目的地 目的地是本机,数据包会进入 input 链,然后到达本机内核 经过内核处理,本机发出的数据包会进入 output 链,然后到达postrouting链 如果数据包的目的地不是本机,而是由本机进行转发 prerouting链 就会判断将数据包发向 forward链 数据包经过 forward链 进入 postrouting链,然后从网卡出去 每经过一条链的时候,如果在相应的表里面写了规则 那么数据包经过这条链的时候,就会按照这些规则进行处理 如果没写规则,就直接放行了 每条链有不同的表可以设置规则,每条链并不可以使用所有表的规则 只有 对应的表的规则 可以使用 filter,nat,mangle,raw,security 这5个表里面 常用的就是 filter 和 nat 剩下的三个都不怎么常用,主要了解 filter 和 nat filter 主要是用来过滤数据包的,可以设置怎样的数据包不能通过之类的 nat 则是处理网络地址转换,也就是跟ip有关的规则
iptables语法 使用 iptables -nvL 查看规则信息 如图,可以看到 input,forward,output三条链上的规则 iptables 如果不指定表的话,默认就是显示 filter 的规则信息 所以图中显示的链是 filter 可以操作的链 上图命令可以重启 iptables 上图是 cat 默认规则的配置文件,/etc/sysconfig/iptables 就是规则的配置文件 每次重启iptables后,都会从这个配置文件里面导入规则 所以如果不把自己修改的规则保存到这个配置文件里面的话 每次重启,之前自己修改的规则就会消失,因为会重新加载这个配置文件的规则 如图, iptables -F 命令可以把目前正在运行的规则清空 执行上面命令后,再使用 iptables -nvL 查看规则 可以看到,下面的规则表已经清空了,没有任何规则信息了 但是 -F 参数只能清空正在运行的规则列表 这时打开 iptables配置文件查看的话,就会发现 iptables配置文件里面还是有规则,并没有清空 如果重启 iptables 的话,配置文件里面的规则会被重新加载 如果想把当前运行状态的规则保存到配置文件里面 可以使用上图命令 例如,当前状态是 空规则,如果使用 service iptables save 那么配置文件里面的规则就会被空规则覆盖掉,也就是说没有任何规则 不过一般不这样做,因为可以在需要的时候重新加载配置文件 把清空的规则加载回来 因为不指定表的话,默认表就是 filter 所以上面的操作都是针对 filter表的,包括清空规则 如果想指定修改的表 如图,可以使用 -t 参数 上图中,-t nat 就是指定显示 nat 表的规则 如上图所示,规则信息,第一列是包的数量 第二列是数据包总的大小,单位是字节 这两列数据是可以清空的 使用命令 iptables -Z 就可以清空这两列数据 参数 -Z 可以把计数器清零 上图命令是添加规则的命令 iptables 后面的参数里面,没有 -t 说明没有指定表 在没有指定表的情况下,就是对默认表 filter 进行操作 参数 -A 是 add 增加规则的意思 后面接 INPUT 是指增加的规则是针对 input链的 也就是说,这条规则会对 input链的数据包进行操作 后面的 -s 参数是指定数据包来源的 ip,后面接来源 ip地址 参数 -p 是指定数据包传输协议的,后面接协议名称,这里是 tcp 参数 --sport 是指定数据包来源端口的,后面是端口号 1234 参数 -d 是指定数据包目标ip的,后面接目标ip地址 参数 --dport 是指定数据包目标ip端口的,后面接端口号,这里是80 参数 -j 是指定操作规则的,后面接规则名称,这里是 DROP DROP 是指符合以上设置的数据包会被直接扔掉,不能通过 也可以使用 REJECT 规则,这个规则也是不让数据包通过 与 DROP的区别是,drop会直接扔掉,reject会通知对方自己扔掉了数据包 一般都是使用 DROP 执行完增加规则的命令后,使用 -nvL 查看filter规则信息 如上图,input链所有规则,最下面增加了一条规则 第三列是 DROP 表示这是 drop 规则 后面是他 tcp 表示协议,然后是来源ip 和 目标ip 最后是 来源端口 和 目标端口 一般来说,增加规则后,新规则都会出现在原来规则的最下面,优先级是靠后的 上图命令也可以增加规则 参数 -I 是插入一条规则的意思, INPUT 是规则插入input链 后面指定了 -p tcp 协议,还有 --dport 80 指定端口,前面必须先指定协议,不然会报错 最后是规则 -j DROP 这条命令是把 目标地址端口号为 80 的数据包 drop掉 如上图,插入的规则出现在所有规则的最上面 如果是使用 -A 增加规则,新规则会出现在所有规则的最下面 插入 -I 的意义就是可以把新规则插入到所有规则最上面,提高优先级 一条链里面规则的执行顺序是从上到下的,会先执行上面的,一条一条往下执行 所以 I 参数可以让新规则插入到最高优先级 上图是删除命令,如果想删除刚才插入的规则 把 -I 参数 换成 -D 参数 后面跟插入命令一模一样,就可以删除刚才插入的命令 但是有一个问题,如果忘记了后面的命令怎么写,应该怎样删除旧的命令 上图是显示规则编号的命令 iptables -nvL --line-number 可以多显示一列,num列 参数 --line-number 可以显示规则的编号 然后使用命令 iptables -D INPUT + 规则编号 就可以删除相应编号的规则 如图,参数 -D表示删除,INPUT表示规则是input链的,7表示编号7的规则 执行这条命令后,如图,编号7的规则就已经删除了 如图所示,policy 是指默认的策略,后面接 ACCEPT 说明,默认的规则就是 ACCEPT 如果一条链上面没有设置任何规则 那么通过这条链的数据包就会按照默认策略进行处理 比如这里,默认策略是 ACCEPT ,如果没有设置规则的话,数据包都是直接通过的 默认策略是可以更改的,上图命令 iptables -P OUTPUT DROP 就可以把 OUTPUT链上的默认策略改为DROP 参数 -P 就是设置 policy的意思,OUTPUT是指output链,DROP就是具体策略 所以上面命令就是,设置 OUTPUT链的policy为 DROP 如果是通过xshell远程连接,执行上面命令的话就会直接断线 因为远程连接需要跟主机有数据包的往返操作 这条命令把主机出来的数据包drop掉了,主机就没办法跟外界有交流 如果执行了这条命令断线后,需要在主机的终端 重新把默认策略修改为 ACCEPT 才能恢复远程连接 所以,默认策略一般不用修改,都是保持 ACCEPT 状态 需要拦截数据包就添加规则
iptables filter表小案例 这个案例是把 80端口,21端口,22端口的数据放行 22端口指定一个ip段,只有这个ip段才可以访问 如上图,编辑一个iptables.sh文件 在iptables.sh内输入上图内容 #!/bin/bash ipt="/usr/sbin/iptables" $ipt -F $ipt -P INPUT DROP $ipt -P OUTPUT ACCEPT $ipt -P FORWARD ACCEPT $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT $ipt -A INPUT -p tcp --dport 80 -j ACCEPT $ipt -A INPUT -p tcp --dport 21 -j ACCEPT 然后 wq 保存退出,这是一个脚本 /usr/sbin/iptables 是iptables命令的文件路径 把这个文件赋值给了变量 ipt 下面的命令,$ipt -F 就是执行了清空规则的命令 $ipt -P INPUT DROP 是把input链的策略修改为DROP $ipt -P OUTPUT ACCEPT,$ipt -P FORWARD ACCEPT 就是把output和forward链的策略 设置为 ACCEPT $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT input策略是DROP,这条命令是设置通过条件 符合上面规则的数据包就可以通过 参数 -m 是设置模块,模块指定为 state 指定了state模块后,就可以使用 --state 指定状态 RELATED,ESTABLISHED 表示两个状态 参数 -j 指定规则为 ACCEPT 所以条件就是 状态为 RELATED,ESTABLISHED 的数据包可以通过 $ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT 上面命令是指定特定网段的数据才可以通过 参数 -s 指定来源ip端口为 192.168.133.0/24 参数 -p指定协议为 tcp tcp的扩展模块 --dport 指定目标端口为 22 所以来自于192.168.133.0/24 这个网段/端口的数据包,如果目标端口是22就可以通过 $ipt -A INPUT -p tcp --dport 80 -j ACCEPT $ipt -A INPUT -p tcp --dport 21 -j ACCEPT 以上两条命令是 目标端口为 80 或者 21 的数据包都可以通过 也就是开放了80和21端口,向这两个端口发送数据就可以通过 如图,sh 执行这个脚本 如图,查看filter规则,可以看到,input链的规则已经变成脚本设置的规则了 上图命令的作用是,使外部的机器无法 ping 通本机 本机网络是通的,使用了这条规则后 本机ping外面的ip是可以通的,外面的ip ping进来是无法ping通的 但是本机网络却是通的,也就是说,这条命令就是让外面无法ping通本机 不影响本机网络的使用

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行