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

本文涉及的产品
公网NAT网关,每月750个小时 15CU
云防火墙,500元 1000GB
简介: 【运维知识进阶篇】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 ~]#


目录
相关文章
|
26天前
|
Ubuntu 安全 Linux
CentOS与Ubuntu中防火墙配置命令集汇
有了这些,你就能遨游在 CentOS 和 Ubuntu 的海洋中,频繁地改变你的防火墙设置,快速地应对各种安全威胁,同时也能保证你的系统可以正常工作。出发吧,勇敢的编程者,随着这些命令集的涌动,扬帆起航,走向安全的网络世界!
80 5
|
3月前
|
弹性计算 人工智能 运维
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
阿里云操作系统控制台提供了便捷的服务器监控与管理功能,简化了运维工作。通过将多台服务器纳入统一监控平台,用户可以快速查看CPU、内存、磁盘和网络等关键资源的使用情况,避免了逐一远程连接查询的繁琐操作。此外,该工具支持自动化数据汇总,极大地方便了日报、周报和月报的编写。测试过程中,系统展示了良好的稳定性和响应速度,尤其在网络抖动和大文件健康状态测试中表现出色。整体体验流畅,显著提升了运维效率。 操作系统控制台地址:[点击访问](https://alinux.console.aliyun.com/)
122 26
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
|
2月前
|
域名解析 API PHP
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
本文介绍了如何通过网络穿透技术让公网直接访问家庭电脑,充分发挥本地硬件性能。相比第三方服务受限于转发带宽,此方法利用自家宽带实现更高效率。文章详细讲解了端口映射教程,包括不同网络环境(仅光猫、光猫+路由器)下的设置步骤,并提供实时同步动态IP的两种方案:自建服务器或使用三方API接口。最后附上VM虚拟机全版本下载链接,便于用户在穿透后将服务运行于虚拟环境中,提升安全性与适用性。
|
5月前
|
运维
阿里云服务器批量执行命令(系统运维管理oos)
阿里云【系统运维管理oos】批量执行详情
133 5
|
6月前
|
网络协议 Ubuntu Linux
解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)
解决 `ssh: connect to host IP port 22: Connection timed out` 报错涉及检查 SSH 服务状态、防火墙配置、网络连通性和主机名解析等多个方面。通过逐步排查上述问题,并在 `scp` 命令中正确指定端口,可以有效解决连接超时的问题,确保文件传输的顺利进行。希望本文提供的解决方案能帮助您快速定位并解决该错误。
1377 3
|
6月前
|
运维 网络安全
解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)
通过这些步骤和方法,您可以有效解决“ssh: connect to host IP port 22: Connection timed out”问题,并顺利使用 `scp`命令传输文件。
5526 7
|
7月前
|
运维 安全 Linux
全面提升系统安全:禁用不必要服务、更新安全补丁、配置防火墙规则的实战指南
全面提升系统安全:禁用不必要服务、更新安全补丁、配置防火墙规则的实战指南
352 12
|
8月前
|
运维 监控 网络协议
|
7月前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
584 3
|
7月前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
415 3