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

简介: 【运维知识进阶篇】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 ~]#


目录
相关文章
|
10月前
|
网络协议 Linux 网络安全
CentOS防火墙管理:查询与配置开放端口的技巧
遵循以上步骤,CentOS系统管理员能够灵活地查询和管理系统端口的开放情况,并且能适用于大多数防火墙管理场合。务必在改变防火墙规则后认真审核和测试,以确保网络安全性与服务的正常运行。
1646 0
|
Ubuntu 安全 Linux
CentOS与Ubuntu中防火墙配置命令集汇
有了这些,你就能遨游在 CentOS 和 Ubuntu 的海洋中,频繁地改变你的防火墙设置,快速地应对各种安全威胁,同时也能保证你的系统可以正常工作。出发吧,勇敢的编程者,随着这些命令集的涌动,扬帆起航,走向安全的网络世界!
456 5
|
运维 网络性能优化 网络虚拟化
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
616 73
|
网络协议 Ubuntu 网络安全
|
运维 安全 Linux
全面提升系统安全:禁用不必要服务、更新安全补丁、配置防火墙规则的实战指南
全面提升系统安全:禁用不必要服务、更新安全补丁、配置防火墙规则的实战指南
870 12
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
2389 2
|
安全 Linux 网络安全
centos7中firewall防火墙的常用命令总结
以上命令集覆盖了 `firewalld`的基本操作,是维护CentOS 7系统安全不可或缺的工具。对于更高级的配置需求或遇到特定问题
788 3
|
监控 安全 网络安全
Windows Defender防火墙配置错误与GPO:梳理关键点
许多企业的网络中包含Windows Defender防火墙、GPO和AD基础设施等组件,这些组件可能存在漏洞,一旦被利用,可能引发连锁反应,导致严重后果。本文介绍了如何识别和减少网络中的弱点,通过优化默认设置、配置GPO来加强Windows Defender防火墙的安全性,并使用SIEM工具进行日志管理和网络监控,以提高整体网络安全水平。
160 0
|
开发框架 缓存 Ubuntu
dotnet开发框架+ubuntu防火墙命令+win11设置自动登录+阿里云短信发送限制
dotnet开发框架+ubuntu防火墙命令+win11设置自动登录+阿里云短信发送限制
284 3