学习目标:
- 理解策略及规则链
- 理解并记忆基本的命令参数
- 学会根据需求编写安全策略
学习内容:
- 防火墙会按照从上到下的顺序来读取配置的策略规则。iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,如下:
PREROUTING 在进行路由选择前处理数据包 INPUT 处理流入的数据包 OUTPUT 处理流出的数据包 FORWARD 处理转发的数据包 POSTROUTING 在进行路由选择后处理数据包 -
除了需要知道以上规则外,还需要学会使用iptables服务的术语,如下表
ACCEPT 允许流量通过 REJECT 拒绝流量通过 LOG 记录日志信息 DROP 拒绝流量通过 -
基本的命令参数,如下表:
参数 作用 -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也需要理解清楚,记住他们在策略命令中是大写的。同时有一个很重要的就是对常用的参数一定要熟记会用!!