第十四课预习内容

10.12 firewalld和netfilter
10.13 netfilter5表5链介绍
10.14 iptables语法
10.15 iptables filter表案例
10.16/10.17/10.18 iptables nat表应用

1.firewalld 和netfilter

动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙,用以支持网络 “zones” ,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IPv4 和 IPv6 防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。

  1. netfilter/iptables 简介:

  2. (1)IP数据包过滤系统由 netfilter 和 iptables 两个组件构成。

  3. (2)netfilter是集成在内核中的一部分,其作用是定义、保存相应的规则,

  4. (3)iptables是一种工具,用来修改信息的过滤规则及其他配置,而这些规则会保存在内核空间之中。

  5. (4)netfilter是Linux核心中的一个通用架构,其提供了一系列的表(tables)每个表由若干个链(chains)组成,而每条链可以由一条或若干条规则(rules)组成。

1.1安装配置netfilter

1.1.1 关闭selinux

[root@knightlai ~]# setenforce 0 设置selinux
[root@knightlai ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled //配置selinux为禁止开机启动
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

1.1.2 关闭firewalld 开启netfilter

[root@knightlai ~]# systemctl stop firewalld //关闭firewalld服务
[root@knightlai ~]# systemctl disable firewalld //禁止firewalld为开机启动
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@knightlai ~]# yum -y install iptables-services //安装iptables这样就可以使用之前的版本了
[root@knightlai ~]# systemctl enable iptables //设置开机启动
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service. //启动iptables服务
[root@knightlai ~]# systemctl start iptables.service


1.2 netfilter 5个表

netfilter的5个表
filter:表主要用于过滤包,是系统预设的表,该表内建3个链:INPUT、OUTPUT以及FORWARDINPUT链作用于进入本机的包,OUTPUT链作用于本机送出的包,FORWARD链作用于那些跟本机无关的包。
nat:表主要用于网络地址转换,同样也有3个链,PREROUTING链的作用是在包刚刚到达防火墙时改变它的目的地址,OUTPUT链的作用是改变本地产生的包的目的地址,POSTROUTING链的作用是在包即将离开防火墙时改变其源地址。该表阿铭仅偶尔会用到。
mangle:表主要用于给数据包做标记,然后根据标记去操作相应的包。这个表几乎不怎么用
raw:表可以实现不追踪数据包做标记,默认系统的数据包都会被追踪,但追踪势必消耗一定的资源,所以可以用raw表来指定某些端口的包不被追踪。
security:表在Centos6里是没有的,它用于强制访问控制(MAC)的网络规则。

netfilter的5个链
5个链分别为PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARD:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外转发
POSTROUTING:发送到网卡接口之前

3.iptables语法

3.1iptables传输数据包的过程

① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。 
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。 
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

3.2 iptables 语法

3.2.1  一、iptables规则的匹配条件类型有三类 1、通用匹配:可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件 2、隐含匹配:要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件 3、显式匹配:要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件

3.2.2  iptables [-t 表名] 选项 [链名] [匹配条件] [-j 控制类型]

未指定表名时,默认用filter表;链名,控制类型要大写;除非设置默认策略,否则必须指定匹配条件;不指定链名时,默认表内所有链。

1. iptables -nvL 查看规则

[root@knightlai ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   29  2096 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.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
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 19 packets, 1828 bytes)
 pkts bytes target     prot opt in     out     source               destination    

3.2.3 iptables 控制类型

b、常用的控制类型
  ACCEPT:允许数据包通过
  DROP:直接丢弃数据包,不给出回应
  REJECT:拒绝包通过,必要时会给数据包发送端一个响应信息
  LOG:在/var/log/messages文件中记录日志信息,然后将包传给下一条规则,防火墙规则的"匹配即停止"对于log操作来说是一个特例,因为log只是一种辅助动作,并没有真正处理包。

c、常用的选项
  -A  在链末尾添加一条新规则
  -I   插入一条新规则,未指定序号时默认为第一条规则
  -D  删除链中的某条规则,可指定规则序号或具体内容  
  -L  列出链中的规则
  -F  清空链中规则
  -n  使用数字形式显示结果,如显示IP地址,而不是主机名
  -P  为指定链设置默认规则
  -v  显示详细信息
  --line-numbers  查看规则表时,同时显示规则在链中的序列号
    -p :指定协议,可以是tcp,udp或者icmp;
    --dport :跟-p一起使用,指定目标端口;
     --sport :跟-p一起使用,指定源端口;
     -s :指定源IP(可以是一个ip段);
    -d :指定目的IP(可以是一个ip段);
    -j :后跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包;
    -i :指定网卡(不常用,但有时候能用到);

3.2.4 iptables 增加和删除规则

1、增加规则  
  #iptables -t filter -A INPUT -p tcp -j ACCEPT(在filter表的INPUT链中最后一个规则后面添加一个新的规则)
  #iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT (在filter表INPUT链第二行插入规则,允许tcp的80端口通过)
2、删除规则
     #iptables -D INPUT 3(删除filter表中INPUT链的第三条规则)
     #iptables -t raw -F(清空raw表中所有链内的规则)
     #iptables -F OUTPUT(清空filter表output链内所有规则)

3.2.5 示例: 

[root@knightlai ~]# iptables -A INPUT -s 192.168.139.10 -p tcp --sport 1234 -d 192.168.139.22 --dport 80 -j DROP

-A 表示增加一条规则,另外还有-I 表示插入一条规则,-D删除一条规则;后面的INPUT即链名称,还可以是OUTPUT或者FORWORD;-s 后跟源地址;-p 协议(tcp, udp, icmp); --sport/--dport 后跟源端口/目标端口;-d 后跟目的IP(主要针对内网或者外网);-j 后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包)


[root@knightlai ~]#iptables -I OUTPUT -p tcp --dport 22 -d 10.0.2.34 -j DROP
 把发送到10.0.2.34的22端口的数据包丢掉

4 iptables nat表应用

4.1 在A机器上面增加一块网卡,设置ip段,设置B机器,并让B机器和A机器通信

4.1.1 在虚拟机上增加一块网卡设置LAN段

[root@knightlai ~]# ifconfig //可以看到我们这里多了一个ens36网卡
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.139.168  netmask 255.255.255.0  broadcast 192.168.139.255
        inet6 fe80::20c:29ff:feec:fccf  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ec:fc:cf  txqueuelen 1000  (Ethernet)
        RX packets 88  bytes 9926 (9.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 92  bytes 10125 (9.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::55eb:33b2:ae7c:4082  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ec:fc:d9  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 25  bytes 4326 (4.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

在B机器上设置IP地址

现在可以发现A机器和B机器可以ping通了

4.2 

4.2.1 在A机器上设置路由转发

[root@knightlai ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@knightlai ~]# echo "1">/proc/sys/net/ipv4/ip_forward
[root@knightlai ~]# cat /proc/sys/net/ipv4/ip_forward
1

4.2.2 在A上执行iptables

[root@knightlai ~]# iptables -t nat -A POSTROUTING -s 192.168.100.1/24 -o ens33 -j MASQUERADE
[root@knightlai ~]# service iptables save

在B机器上面发现也可以ping通外网了,说明我们这里设置成功!

4.3 

4.3.1 在A机器上面配置iptables

[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.12.129 -p tcp --dport 1222 -j DNAT --to 192.168.100.10:22
[root@localhost ~]# iptables -t nat -A PREROUTING -s 192.168.100.10 -j SNAT --to 192.168.12.129

4.3.2 现在我们用XSHELL试一下是否可以连通B机器

Connecting to 192.168.12.129:1222...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Last login: Fri Aug 24 10:11:44 2018
[root@localhost ~]# 

扩展内容:iptables限制syn速度

原理,每5s内tcp三次握手大于20次的属于不正常访问。

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
iptables -A INPUT -m recent --update --seconds 5 --hitcount 20 --name httpuser --rsource -j DROP

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

iptables 针对一个网段

iptables -I INPUT -m iprange --src-range 61.4.176.0-61.4.191.255 -j DROP

猜你喜欢

转载自blog.csdn.net/a1779078902/article/details/82013248