文章目录
- 防火墙概述
- Netfilter
- netfilter五个勾子函数
- 三种报文流向
- iptables的组成
- 五表table
- 五链chain
- iptables规则添加时考量点
- 实验:控制某个主机谁可以访问谁不能访问
- 1.实验环境准备
- 2.iptables命令格式详解:
- 3.拒绝某个服务器ping
防火墙概述
防火墙(FireWall ) :隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ(demilitarized zone)网络中.
Netfilter
Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中。
Netfilter是Linux2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作。
官方帮助文档:https://netfilter.org/documentation/
netfilter五个勾子函数
Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则,规则
由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上
三种报文流向
三种报文流向
1.流入本机: PREROUTING --> INPUT --> 用户空间进程
2.流出本机: 用户空间进程 --> OUTPUT --> POSTROUTING
3.转发: PREROUTING --> FORWARD --> POSTROUTING
iptables的组成
前面提到用户可以通过一个命令工具(iptables)向Netfilter写入规则, 也就是说iptables是一个提供命令行的工具,它工作在用户空间,用来编写规则,写好的规则被送到netfilter,告诉内核如何去处理信息包。
[root@centos8 ~]# rpm -qi iptables
Name : iptables
Version : 1.8.4
Release : 17.el8
Architecture: x86_64
Install Date: Sun 12 Nov 2023 10:28:15 AM CST
Group : Unspecified
Size : 1989969
License : GPLv2 and Artistic 2.0 and ISC
Signature : RSA/SHA256, Fri 29 Jan 2021 06:10:36 AM CST, Key ID 05b555b38483c65d
Source RPM : iptables-1.8.4-17.el8.src.rpm
Build Date : Fri 29 Jan 2021 01:05:26 AM CST
Build Host : x86-01.mbox.centos.org
Relocations : (not relocatable)
Packager : CentOS Buildsys <bugs@centos.org>
Vendor : CentOS
URL : http://www.netfilter.org/projects/iptables
Summary : Tools for managing Linux kernel packet filtering capabilities
Description :
The iptables utility controls the network packet filtering code in the
Linux kernel. If you need to set up firewalls and/or IP masquerading,
you should either install nftables or this package.
Note: This package contains the nftables-based variants of iptables and
ip6tables, which are drop-in replacements of the legacy tools.
iptables由五个表table和五个链chain以及一些规则组成
五表table
五个表table: filter、nat、mangle、raw、security
filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表nat: network address translation地址转换规则表
mangle:修改数据标记位规则表
raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现优
优先级由高到低的顺序为:
security --> raw --> mangle --> nat --> fi1ter
root@zabbix-server:~# iptables -vnL -t filter
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
[root@centos8 ~]# iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
[root@centos8 ~]# iptables -vnL -t mangle
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
[root@centos8 ~]# iptables -vnL -t raw
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
[root@centos8 ~]# iptables -vnL -t security
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
五链chain
链chain
内置链:每个内置链对应于一个钩子函数
自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效
五个内置链chain:
INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING
表和链的对应关系
数据包过滤匹配流程
内核中数据包的传输过程
1.当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去
2.如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它。
本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING链输出
3.如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出
iptables规则添加时考量点
iptables规则添加时考量点
1.要实现哪种功能:判断添加在哪张表上
2.报文流经的路径:判断添加在哪个链上
3.报文的流向:判断源和目的
4.匹配规则:业务需要
实验:控制某个主机谁可以访问谁不能访问
1.实验环境准备
[root@centos8 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
关闭firewalld,并不是就此关闭掉了linux的防火墙,而是关掉系统默认的防火墙规则,系统默认的防火墙规则不能满足我们自己的需求,于是我们自定义防火墙规则。
2.iptables命令格式详解:
iptables -t filter -A INPUT -s 192.169.10.1 -j DROP
# -t 表示使用的那个表 默认使用的filter,可以不加
# -A 表示append,追加规则,有前后次序
# INPUT 表示INPUT链
# -s 表示source源地址,哪个源地址的请求
# -j 表示jump,跳跃
# DROP 表示删除或抛弃
3.拒绝某个服务器ping
当前152可以ping通148
配置148拒绝152的ping
iptables -A INPUT -s 192.168.10.152 -j DROP
此时可以在148上抓包看看
tcpdump -i ens33 -nn icmp
# ubuntu安装tcpdump
apt install -y tcpdump
可以查看148上配置的规则
iptables -vnL
当我删除iptables的配置规则后,152和148就有去有回了
iptables -D INPUT -s 192.168.10.152 -j DROP