2018年8月25日第十五节课笔记——日常运维(2)

内容摘要

  • firewalld和netfilter
  • netfilter5表5链介绍
  • iptables语法
  • iptables filter表小案例
  • iptables nat表应用
  • 课堂笔记及扩展

一、SELINUX相关

  • 命令setenforce 0  临时关闭防火墙。
  • 永久关闭selinux,可以编辑vi /etc/selinux/config。将SELINUX=enforceing,更改为SELINUX=disabled,重启后即可生效永久关闭。

2018年8月25日第十五节课笔记——日常运维(2)

二、netfilter的使用,netfilter是Centos7之前使用的,现在的Centos7则使用firewalld。他们的内部工具都是iptables。

 在CentOS7中如何切换到netfilter呢?,步骤如下:

  • 禁止启动firewalld:systemctl disable firewalld
  • 关闭firewalld:systemctl stop firewalld
  • 命令yum install -y iptables-services ,安装netfilter,系统默认是未安装的。
  • 开机启动iptables:systemctl enable iptables
  • 启用iptables:systemctl start iptables

三、netfilter的5表5链接

       netfilter的5个表:

  • filter:该表主要用于过滤包,是系统预设的表。该表内建3个链:INPUT、OUTPUT、FORWARD。INPUT链作用于进入本机的包,OUTPUT链作用于本机送出的包,FORWARD作用于那些跟本机无关的包。
  • nat:该表主要用于网络地址转换,它也有三个链。PREROUTING链的作用是在包刚刚到达防火墙时改变它的地址(如果需要的话),OUTPUT的链作用是改变本地产生的包的目的地,POSTROUTING链的作用是在包即将离开防火墙时改变其源地址。(该表使用率较低)
  • mangle:该表主要用于给数据包做标记,然后根据标记去操作相应的包。(使用率很低的一个表,网络相关的会使用较多)
  • raw:该表可以实现不追踪某些数据包,默认系统的数据包都会被追踪,但追踪势必消耗一定的资源,所以可以使用raw表来指定某些端口的包不被追踪。(也是使用率很低的一个表)
  • security:该表在CentOS6中时没有的,它用于强制访问控制(MAC)的网络规则。(很少会用到的一个表)

      netfilter的5个链:

  • PREROUTING:数据包进入路由表之前。
  • INPUT:通过路由表目的地为本机。
  • FORWARDING:通过路由表后,目的地不为本机。
  • OUTPUT:由本机产生,向外转发。
  • POSTROUTIONG:发送到网卡接口之前。

      数据包流向图:

2018年8月25日第十五节课笔记——日常运维(2)

  • 非本机:PREROUTING----------FORWARD-----------POSTROUTING
  • 本机:PREROUTING----------INPUT------------OUTPUT--------------POSTROUTING

四、netfiltre——iptables的基本语法

  • 重启iptables:service iptables restart
  • 查看默认规则:iptables -nvL  ,其中-n表示不针对IP反解析主机名,-L表示列出,-v表示列出的信息更加详细。
  • 清空规则:iptables -F  该命令只会临时清空规则,重启后会被/etc/sysconfig/iptables(iptables的配置文件)中的内容覆盖。
  • 覆盖并保存:service iptables save 会保存修改的规则到配置文件中(永久生效)。
  • 指定查看某一个表:iptables -t nat  ,不使用-t选项时默认查看的表就是filter表。
  • 计数器清理:iptables -Z  ,清空pkts(数据包)和bytes(多少大小)的数据。
  • 添加规则举例:iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP  。
  1. 其中-A为增加一条规则(-D为删除一条规则)
  2. INPUT为针对哪一条链
  3. -s后面指定一条来源ip
  4. -p指定协议(如tcp,udp等)
  5. --sport指定来源端口
  6. -d指定目标的ip
  7. --dport指定目标的端口
  8. -j后面跟动作(ACCEPT表示允许,DROP表示直接丢掉包,选项REJECT表示查看后发送通知拒绝)
  • 插入一条规则:iptables -I INPUT  -p tcp --dport 80 -j DROP
  1.    选项-I为将这条规则插入到最前面。(排序在前的规则优先匹配)
  • 显示规则的***:iptables -nvL --line-number。可以根据***删除对应的规则,例:iptables -D INPUT 1
  • 默认规则:iptables -P INPUT DROP,-P后面跟链名,策略内容为DROP或ACCEPT,默认为ACCEPT。(如果你在远程连接时使用该命令,远程连接就会被断开,只有使用iptables -P INPUT ACCEPT才能恢复到原始状态。)

五、iptables filter表小案例

需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.188.0/24开通22端口,所有网段开放80端口,对所有网段开放21端口。

操作:因为规则较多,使用脚本的形式达成最方便。步骤如下:

  • 命令vim /usr/local/sbin/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

  • 运行该脚本:sh /usr/local/sbin/iptables.sh
  • 关于icmp包的一个常见的应用:iptables -I INPUT -p icmp --icmp-type 8 -j DROP  ,这里--icmp-type选项和-p icmp要一起使用,后面指定类型编号。这个8指的时本机ping通其他机器,而其他机器不能ping本机。

六、netfilter——iptables nat表应用

A机器两块网卡ens33(192.168.229.128)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens33可以通信互联。

需求1:可以让B机器连接外网。

操作步骤如下:

  • 在虚拟机上操作两台机器时,需在设置处添加一个新的网卡,并将两台机器新设置的网卡,均设置到同一个lan段,其中第一台机器的ens33不做更改,第二台机器的网卡ens33网卡断开链接。如图:

2018年8月25日第十五节课笔记——日常运维(2)

  • 使用命令为A机器网卡ens33设置IP:ifconfig ens37 192.168.100.1/24 (临时设定,重启后会被配置文件的内容覆盖),再为B机器网卡ens37设置网卡:ifconfig ens37 192.168.100.100/24
  • A机器上打开路由转发   echo "1" > /proc/sys/net/ipv4/ip_forward    (默认为关闭0,更改为1后即打开)
  • 设置转发规则:iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
  • B机器设置网关:route add default wg 192.168.100.1
  • 设置dns:vi /etc/resolv.conf

需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口

操作步骤如下:

  • A机器上打开路由转发   echo "1" > /proc/sys/net/ipv4/ip_forward    (默认为关闭0,更改为1后即打开)

  • 在A机器上添加规则:iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22 (将进来的数据包由192.168.133.130转发到B机器192.168.100.100:22)
  • 继续在A机器上添加规则:iptables -t nat -A PROSTROUTING s 192.168.100.100 -j SNAT --to 192.168.133.130   (将发回来的数据包目标改为A机器的192.168.133.130)
  • 在B机器设置网关:route add default wg 192.168.100.1

七、课堂笔记及扩展

  • 关于SELINUX

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。

  • 关于SELINUX的运行状态
  1. enforcing    开启状态,会强制执行SELINUX的安全策略
  2. permissive   提示状态,会打印触发SELINUX安全策略的警告,但是不会执行相应的策略。
  3. disabled     关闭SELINUX,重启后也不会再启动SELINUX。

  • firewalld、iptables和netfilter之间的关系
  1. 在centos6上,我们用的是iptables服务,而在centos7上,我们用的是firewalld服务。
  2. 同样的,centos6上安装的是iptables包,而centos7上安装的是firewalld包。
  3. 不管是centos6还是centos7,核心其实都是netfilter,netfilter是linux的一个内核模块,iptables命令是linux内核自带的。
  4. centos6上的iptables服务和centos7上的firewalld服务,其实都是用来定义防火墙规则功能的防火墙管理工具。
  5. 它们都是将定义好的规则交由内核中的netfilter即网络过滤器来读取,从而真正实现防火墙功能,所以在配置规则的思路上是完全一致的。

  • iptables 针对一个网段:
  1. 过滤源地址范围:iptables -I INPUT -m iprange --src-range 61.4.176.0-61.4.191.255 -j DROP
  2. 过滤目标地址范围:iptables -I INPUT -m iprange --dst-range 61.4.176.0-61.4.191.255 -j DROP

  • iptables中DNAT、SNAT和MASQUERADE的理解
  1. DNAT(Destination Network Address Translation,目的地址转换) 通常被叫做目的映谢。而SNAT(Source Network Address Translation,源地址转换)通常被叫做源映谢。
  2. 在任何一个IP数据包中,都会有Source IP Address与Destination IP Address这两个字段,数据包所经过的路由器也是根据这两个字段是判定数据包是由什么地方发过来的,它要将数据包发到什么地方去。而iptables的DNAT与SNAT就是根据这个原理,对Source IP Address与Destination IP Address进行修改2018年8月25日第十五节课笔记——日常运维(2)
  3. 图中正菱形的区域是对数据包进行判定转发的地方。在这里,系统会根据IP数据包中的destination ip address中的IP地址对数据包进行分发。如果destination ip adress是本机地址,数据将会被转交给INPUT链。如果不是本机地址,则交给FORWARD链检测。
  4. 我们要做的DNAT要在进入这个菱形转发区域之前,也就是在PREROUTING链中做,比如我们要把访问202.103.96.112的访问转发到192.168.0.112上:iptables -t nat -A PREROUTING -d 202.103.96.112 -j DNAT --to-destination 192.168.0.112
  5. 而SNAT自然是要在数据包流出这台机器之前的最后一个链也就是POSTROUTING链来进行操作:iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 58.20.51.66 这个语句就是告诉系统把即将要流出本机的数据的source ip address修改成为58.20.51.66。这样,数据包在达到目的机器以后,目的机器会将包返回到58.20.51.66也就是本机。如果不做这个操作,那么你的数据包在传递的过程中,reply的包肯定会丢失。
  6. 假如当前系统用的是ADSL/3G/4G动态拨号方式,那么每次拨号,出口IP都会改变,SNAT就会有局限性。:iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE 重点在那个『 MASQUERADE 』!这个设定值就是『IP伪装成为封包出去(-o)的那块装置上的IP』!不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去,这样就实现了很好的动态SNAT地址转换。

  • iptables限制syn速度
  1. 原理,每5s内tcp三次握手大于20次的属于不正常访问。
  2. iptables -A INPUT -s ! 192.168.0.0/255.255.255.0 -d 192.168.0.101 -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name httpuser --rsource
  3. iptables -A INPUT -m recent --update --seconds 5 --hitcount 20 --name httpuser --rsource -j DROP

  4. 其中192.168.0.0/255.255.255.0 为不受限制的网段, 192.168.0.101  为本机IP。
  5. 该iptables策略,可有效预防syn攻击,也可以有效防止机器人发垃圾帖。