学习目标:

  • 理解策略及规则链
  • 理解并记忆基本的命令参数
  • 学会根据需求编写安全策略

学习内容:

  1. 防火墙会按照从上到下的顺序来读取配置的策略规则。iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,如下:

PREROUTING

在进行路由选择前处理数据包

INPUT

处理流入的数据包

OUTPUT

处理流出的数据包

FORWARD

处理转发的数据包

POSTROUTING

在进行路由选择后处理数据包

  1. 除了需要知道以上规则外,还需要学会使用iptables服务的术语,如下表

ACCEPT

允许流量通过

REJECT

拒绝流量通过

LOG

记录日志信息

DROP

拒绝流量通过

  1. 基本的命令参数,如下表:

参数

作用

-P

设置默认策略

-F

清空规则链

-L

查看规则链

-A

在规则链的末尾加上新规则

-I num

在规则链的头部加上新规则

-D num

删除某一条规则

-s

匹配来源地址IP/MASK,加“!”表示除这个IP地址外

-d

匹配目标地址

-i 网卡名称

匹配从这块网卡流入的数据

-o 网卡名称

匹配从这块网卡流出的数据

-p

匹配协议,如TCP、ICMP等

--dport num

匹配目标端口号

--sport num

匹配源端口号


实验输出:

实验一:将INPUT规则链设置为只允许指定网段的主机(192.168.10.0/24)访问本机的22端口,拒绝来自其他所有主机的流量。

请注意:规则链INPUT是大写,其参数-I也是大写;动作REJECT也是大写,其参数-j是小写。

[root@linuxprobe ~]# iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
[root@linuxprobe ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT  //22端口是ssh服务
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.10.0/24      anywhere             tcp dpt:ssh
REJECT     tcp  --  anywhere             anywhere             tcp dpt:ssh reject-with icmp-port-unreachable

实验二:向INPUT规则链中添加拒绝所有人访问本机12345端口的策略规则。

请注意:这里是协议参数要写出TCP以及UDP协议。

[root@linuxprobe ~]# iptables -A INPUT -p tcp --dport 12345 -j REJECT
[root@linuxprobe ~]# iptables -A INPUT -p udp --dport 12345 -j REJECT 
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination     
REJECT     tcp  --  anywhere             anywhere             tcp dpt:italk reject-with icmp-port-unreachable
REJECT     udp  --  anywhere             anywhere             udp dpt:italk reject-with icmp-port-unreachable

实验三:向INPUT规则链中添加拒绝192.168.10.5主机访问本机80端口的策略规则。

[root@linuxprobe ~]# iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  192.168.10.5         anywhere             tcp dpt:http reject-with icmp-port-unreachable

实验四: 向INPUT规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则。

请注意:如何表示1000~1024这其中的端口呢,可以这样表示---1000:1024,中间用冒号分隔。

[root@linuxprobe ~]# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT 
[root@linuxprobe ~]# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT 
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
REJECT     tcp  --  anywhere             anywhere             tcp dpts:cadlock2:1024 reject-with icmp-port-unreachable
REJECT     udp  --  anywhere             anywhere             udp dpts:cadlock2:1024 reject-with icmp-port-unreachable

实验五:从上面的四个实验,大家对iptables命令的使用肯定是有相当的理解了,但是请注意,iptables配置的命令在下一次重启时就会失效了,如果想让防火墙策略永久生效,记得执行保存命令“iptables-save”:

[root@linuxprobe ~]# iptables-save
# Generated by xtables-save v1.8.2 on Sat Jan  7 00:22:54 2023
*filter

学习小结:

        我个人认为需要掌握如INPUT、OUTPUT、FORWARD这三种规则链,同时相应的处理动作ACCEPT、REJECT、DROP也需要理解清楚,记住他们在策略命令中是大写的。同时有一个很重要的就是对常用的参数一定要熟记会用!!