【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(一)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)

这篇文章给大家介绍下iptables防火墙,防火墙大致分三种,分别是硬件、软件和云防火墙。硬件的话部署在企业网络的入口,有三层路由的H3C、华为、Cisco(思科),还有深信服等等;软件的话一般是开源软件,写在网站内部,最常见的有iptables(写入Linux内核)和firewalld(CentOS7有的),云防火墙就是阿里云业务的防火墙安全组等等。

名词解释

在介绍防火墙之前,我们先了解几个名词

容器:可以存放东西

表(table):存放链的容器

链(chain):存放规则的容器

规则(policy):准许或拒绝规则

这几个像俄罗斯套娃那样环环相套!

iptables执行过程

NetFilter框架

最底层是网络接口层,网络接口层上面是网络层,网络层部署了NetFilter(网络过滤框架)

网络层上面部署了TCP、UDP传输层,这一层部署了Filter表、NAT表、Mangle表,表种存放要检查的条件和操作,这些都是内核层,再往上就是用户层,也就是应用层,可以设置iptables命令。

Linux服务器双网卡路由器

从物理层和数据链路层进入先通过PREROUTING链,进入路由判决,如果可以进入会通过INPUT链进入TCP、UDP,再进入应用层,由应用层再返回到TCP、UDP,通过OUTPUT链进入路由判决,再通过POSTROUTING链传输到物理层和数据链路层出来。

如果在路由判决那里不能进入的话,则会通过FORWARD链传输到出口的路由判决,在通过POSTROUTING链进入物理层和数据链路层传输出来。

表与链

iptables是4表5链,4表是filter表、nat表、raw表、mangle表,5链是input、pouput、forward、prerouting、postrouting

filter表有input链、output链、forward链

nat表有prerouting链、output链、postrouting链

mangle表有prerouting链、forward链、input链、output链、postrouting链

1、filter表

负责流量进出,屏蔽或准许端口IP

filter表

主要和主机自身相关,真正负责主机防火墙功能的(过滤流入与流出主机数据包)filter标识iptables默认使用的表,这个表定义了三个链。企业工作场景:主机防火墙

INPUT 负责过滤所有目标地址是本机地址的数据包,通俗说就是过滤进入主机的数据包
FORWARD 负责转发流经主机的数据包,起转发的作用,和NAT关系很大,有专门的LVS NAT模式,net.ipv4.ip_forward=0
OUTPUT 处理所有源地址是本机地址的数据包,通俗说就是从主机发送出去的数据包

2、NAT表

双网卡的,负责接受到后转发,类似于路由器,可以实现NAT功能:共享上网(内网服务器上外网)、端口映射和ip映射

NAT

负责网络地址转换,即来源与目的IP地址和端口的转换。

应用:和主机本身无关,一般用于局域网共享上网或者特殊的端口转换服务

工作场景:

1、用于企业路由(zebra)或网关(iptables),共享上网(postrouting)

2、做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,ftp服务(prerouting)

3、web,单个端口的映射,直接映射80端口(prerouting),这个表定义了3个链,nat功能相当于网络的acl控制,和网络交换机acl类似。

OUTPUT 和主机放出去的数据包有关,改变主机发出数据包的目的地址
PREROUTING

在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等

就是收信时,根据规则重写收件人的地址

例如:把公网IP映射到局域网的服务器上,如果是web服务,可以把80转换为局域网的服务器9000端口上10.0.0.61:80(目标端口)----nat----10.0.0.7:22

POSTROUTING

在数据包离开防火墙时进行路由判断之后执行的规则,作用是改变数据包的源地址,源端口等

写好发件人的地址,要让家人的回信时能够有地址可以回

例如:默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为了公网地址

生产应用:局域网共享上网

3、Mangle表

存放头部信息

环境准备及命令

准备Ansible(10.0.0.61,172.16.1.61)和Web01(10.0.0.7、172.16.1.7)两台主机

安装iptables

[root@Ansible ~]# yum install -y iptables-services

查看iptables服务的配置文件

1. [root@Ansible ~]# rpm -ql iptables-services
2. /etc/sysconfig/ip6tables
3. /etc/sysconfig/iptables        #防火墙的配置文件
4. /usr/lib/systemd/system/ip6tables.service
5. /usr/lib/systemd/system/iptables.service        #防火墙服务配置文件(命令)
6. /usr/libexec/initscripts/legacy-actions/ip6tables
7. /usr/libexec/initscripts/legacy-actions/ip6tables/panic
8. /usr/libexec/initscripts/legacy-actions/ip6tables/save
9. /usr/libexec/initscripts/legacy-actions/iptables
10. /usr/libexec/initscripts/legacy-actions/iptables/panic
11. /usr/libexec/initscripts/legacy-actions/iptables/save
12. /usr/libexec/iptables
13. /usr/libexec/iptables/ip6tables.init
14. /usr/libexec/iptables/iptables.init

将防火墙相关的模块、加载到内核中

1. [root@Ansible ~]# modprobe ip_tables
2. [root@Ansible ~]# modprobe iptable_filter
3. [root@Ansible ~]# modprobe iptable_nat
4. [root@Ansible ~]# modprobe ip_conntrack
5. [root@Ansible ~]# modprobe ip_conntrack_ftp
6. [root@Ansible ~]# modprobe ip_nat_ftp
7. [root@Ansible ~]# modprobe ipt_state

永久加入,写进开机自启动

1. cat >>/etc/rc.local<<EOF
2. modprobe ip_tables
3. modprobe iptable_filter
4. modprobe iptable_nat
5. modprobe ip_conntrack
6. modprobe ip_conntrack_ftp
7. modprobe ip_nat_ftp
8. modprobe ipt_state  
9. EOF

列出三表相关的内核模块,lsmod是列出系统当前载入的所有内核模块

1. [root@Ansible ~]# lsmod |egrep 'filter|nat|ipt'
2. nf_nat_ftp             12809  0
3. nf_conntrack_ftp       18478  1 nf_nat_ftp
4. iptable_nat            12875  0
5. nf_nat_ipv4            14115  1 iptable_nat
6. nf_nat                 26583  2 nf_nat_ftp,nf_nat_ipv4
7. nf_conntrack          139264  6 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4
8. iptable_filter         12810  0
9. ip_tables              27126  2 iptable_filter,iptable_nat
10. libcrc32c              12644  3 xfs,nf_nat,nf_conntrack

关闭firewalld,启用iptables,并设置开机自启动

1. [root@Ansible ~]# systemctl stop firewalld
2. [root@Ansible ~]# systemctl disable firewalld
3. [root@Ansible ~]# systemctl start iptables.service
4. [root@Ansible ~]# systemctl enable iptables.service
5. Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.

列出iptables所有规则

1. [root@Ansible ~]# iptables -nL
2. Chain INPUT (policy ACCEPT)        #链默认规则
3. target     prot opt source               destination
4. ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED 
5. ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          #规则 
6. ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
7. ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
8. REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
9. 
10. Chain FORWARD (policy ACCEPT)        #链默认规则
11. target     prot opt source               destination
12. REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
13. 
14. Chain OUTPUT (policy ACCEPT)        #链默认规则
15. target     prot opt source               destination

iptables命令参数

参数 含义
-L 显示表中的所有规则
-n 不要把端口或ip反向解析为名字
-t 指定表,不指定默认是filter表
-A append追加,加入准许类规则
-D delete删除,-D INPUT 1
-I insert拒绝类规则放在所有规则的最上面
-p 协议protocal tcp/udp/icmp/all
--dport 目标端口dest destination指定端口加上协议 -p tcp
--sport 源端口,source源
-d --destination 目标IP
-m 指定模块 multiport
-i input输入的时候,从哪个网卡进来
-o output输出的时候,从哪个网卡出去
-j

满足条件后的工作:DROP/ACCEPT/REJECT

DROP REJECT拒绝

DROP把数据丢掉,不会返回信息给用户

REJECT拒绝,返回拒绝信息

-F flush 清楚所有规则,不会处理默认的规则
-X 删除用户自定义的链
-Z 链的计数器清零(数据包计数器和数据包字节计数器)

配置filter表规则

正式配置之前,先备份,清空规则

1. [root@Ansible ~]# iptables -F
2. [root@Ansible ~]# iptables -X
3. [root@Ansible ~]# iptables -Z
4. 
5. [root@Ansible ~]# iptables -nL
6. Chain INPUT (policy ACCEPT)
7. target     prot opt source               destination
8. 
9. Chain FORWARD (policy ACCEPT)
10. target     prot opt source               destination
11. 
12. Chain OUTPUT (policy ACCEPT)
13. target     prot opt source               destination

1、禁止访问22端口

1. [root@Ansible ~]# iptables -t filter -I INPUT -p tcp   --dport 22  -j DROP
2. [root@Ansible ~]# 
3. Connection closed by foreign host.
4. 
5. Disconnected from remote host(Linux86-10.0.0.61-Ansible) at 22:43:23.
6. 
7. Type `help' to learn how to use Xshell prompt.
8. [c:\~]$ 
9.

删除规则

1. Connecting to 10.0.0.61:22...
2. Connection established.
3. To escape to local shell, press Ctrl+Alt+].
4. 
5. Last login: Sat May  6 22:44:26 2023
6. [root@Ansible ~]#


目录
相关文章
|
18天前
|
网络协议
iptables配置tcp端口转发
iptables配置tcp端口转发
25 1
|
18天前
|
Linux 网络安全
Centos 防火墙端口控制命令
Centos 防火墙端口控制命令
28 3
|
3月前
|
运维 Cloud Native Devops
云原生 DevOps 自动化运维 概述
【1月更文挑战第7天】云原生 DevOps 自动化运维 概述
|
3月前
|
Linux 网络安全
Linux - firewall-cmd 命令添加端口规则不生效排查
Linux - firewall-cmd 命令添加端口规则不生效排查
150 0
|
4月前
|
监控 网络协议 Unix
Linux命令-nc(端口监控、文件传输、反弹shell等)
Linux命令-nc(端口监控、文件传输、反弹shell等)
102 0
|
2月前
|
前端开发 Java 数据库连接
Springboot-MyBatis配置-配置端口号与服务路径(idea社区版2023.1.4+apache-maven-3.9.3-bin)
Springboot-MyBatis配置-配置端口号与服务路径(idea社区版2023.1.4+apache-maven-3.9.3-bin)
33 0
|
4月前
|
数据安全/隐私保护 时序数据库
InfluxData【部署 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
InfluxData【部署 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
129 0
|
30天前
|
人工智能 Linux Shell
用命令修改宝塔面板修改默认端口
用命令修改宝塔面板修改默认端口
50 0
|
1月前
|
弹性计算 网络协议 安全
宝塔面板放行阿里云端口命令操作教程
布署宝塔面板阿里云服务器需要开放哪些端口?阿里云服务器“安全组设置”详解
176 1
|
1月前
|
存储 安全 网络协议
使用 firewall-cmd 管理 Linux 防火墙端口
本文将介绍如何使用 firewall-cmd 工具在 Linux 系统中进行简单端口管理,包括开放、查询、关闭等操作。通过实例展示相关命令的用法,希望能对大家有所帮助。