当前位置: 首页 > news >正文

wordpress搜索怎么用不了wordpress 内存优化

wordpress搜索怎么用不了,wordpress 内存优化,重庆网站建设 菠拿拿,经典网站设计欣赏1.安全技术和防火墙 1.1安全技术 入侵检测系统#xff08;Intrusion Detection Systems#xff09;#xff1a;特点是不阻断任何网络访问#xff0c;量化、定位来自内外网络的威胁情况#xff0c;主要以提供报警和事后监督为主#xff0c;提供有针对性的指导措施和安全决…1.安全技术和防火墙 1.1安全技术 入侵检测系统Intrusion Detection Systems特点是不阻断任何网络访问量化、定位来自内外网络的威胁情况主要以提供报警和事后监督为主提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署默默的看着你方式。 入侵防御系统Intrusion Prevention System以透明模式工作分析数据包的内容如溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断在判定为攻击行为后立即予以 阻断主动而有效的保护网络的安全一般采用在线部署方式。必经之路 防火墙 FireWall 隔离功能工作在网络或主机边缘对进出网络或主机的数据包基于一定的规则检查并在匹配某规则时由规则定义的行为进行处理的一组功能的组件基本上的实现都是默 认情况下关闭所有的通过型访问只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中. 防水墙 广泛意义上的防水墙防水墙Waterwall与防火墙相对是一种防止内部信息泄漏的安全产品。   网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。防水墙针对这四种泄密途径在事前、事  中、事后进行全面防护。其与防病毒产品、外部安全产品一起构成完整的网络安全体系。 1.2 防火墙的分类 OSI七层模型 应用层           进程 程序 表示层 会话层 传输层               端口          防火墙 网络层                ip             路由器 三层  数据链路层        mac          交换机 物理层      定义标准 按保护范围划分 主机防火墙服务范围为当前一台主机 网络防火墙服务范围为防火墙一侧的局域网 按实现方式划分: 硬件防火墙在专用硬件级别实现部分功能的防火墙另一个部分功能基于软件实现如华为 山石hillstone,天融信启明星辰绿盟深信服, PaloAlto , fortinet, Cisco, Checkpoint NetScreen(Juniper2004年40亿美元收购)等 软件防火墙运行于通用硬件平台之上的防火墙的应用软件Windows 防火墙 ISA -- Forefront 按网络协议划分 网络层防火墙OSI模型下四层又称为包过滤防火墙 应用层防火墙/代理服务器proxy 代理网关OSI模型七层 包过滤防火墙 网络层对数据包进行选择选择的依据是系统内设置的过滤逻辑被称为访问控制列表ACL通过检查数据流中每个数据的源地址目的地址所用端口号和协议状态等因素或他们的组合来确定是否 允许该数据包通过 优点对用户来说透明处理速度快且易于维护 缺点无法检查应用层数据如病毒等 应用层防火墙 应用层防火墙/代理服务型防火墙也称为代理服务器Proxy Server) 将所有跨越防火墙的网络通信链路分为两段 内外网用户的访问都是通过代理服务器上的“链接”来实现优点在应用层对数据进行检查比较安全 缺点增加防火墙的负载 提示现实生产环境中所使用的防火墙一般都是二者结合体即先检查网络数据通过之后再送到应用 层去检查 2.linux防火墙基本认识 2.1 Netfilter Linux防火墙是由Netfilter组件提供的Netfilter工作在内核空间集成在linux内核中 Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制是linux内核的一个子系统。Netfilter采用模块化设计具有良好的可扩充性提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合并允许对数据报进行过滤、地址转换、处理等操作 Netfilter官网文档https://netfilter.org/documentation/ [rootwg named]#grep -m 10 NETFILTER /boot/config-3.10.0-693.el7.x86_64 CONFIG_NETFILTERy # CONFIG_NETFILTER_DEBUG is not set CONFIG_NETFILTER_ADVANCEDy CONFIG_BRIDGE_NETFILTERm CONFIG_NETFILTER_NETLINKm CONFIG_NETFILTER_NETLINK_ACCTm CONFIG_NETFILTER_NETLINK_QUEUEm CONFIG_NETFILTER_NETLINK_LOGm CONFIG_NETFILTER_NETLINK_QUEUE_CTy CONFIG_NETFILTER_SYNPROXYm 2.2 防火墙工具介绍 2.2.1 iptables 由软件包iptables提供的命令行工具工作在用户空间用来编写规则写好的规则被送往netfilter告诉内核如何去处理信息包 [rootcentos7 ~]# iptables --version iptables v1.4.21 2.2.2 firewalld 从CentOS 7 版开始引入了新的前端管理工具 软件包 firewalld firewalld-config 管理工具 firewall-cmd 命令行工具 firewall-config 图形工作 2.2.3 nftables 此软件是CentOS 8 新特性,Nftables最初在法国巴黎的Netfilter Workshop 2008上发表然后由长期的netfilter核心团队成员和项目负责人Patrick McHardy于2009年3月发布。它在2013年末合并到Linux内核中自2014年以来已在内核3.13中可用。 它重用了netfilter框架的许多部分例如连接跟踪和NAT功能。它还保留了命名法和基本iptables设计的几个部分例如表链和规则。就像iptables一样表充当链的容器并且链包含单独的规则这些规则可以执行操作例如丢弃数据包移至下一个规则或跳至新链。 从用户的角度来看nftables添加了一个名为nft的新工具该工具替代了iptablesarptables和ebtables中的所有其他工具。从体系结构的角度来看它还替换了内核中处理数据包过滤规则集运行时评估的那些部分。 2.3 netfilter Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING)而这五个hook function向用户开放用户可以通过一个命令工具 iptables向其写入规则。 由信息过滤表table组成包含控制IP包处理的规则集rules规则被分组放在链chain上 提示从 Linux kernel 4.2 版以后Netfilter 在prerouting 前加了一个 ingress 勾子函数。可以使用这个新的入口挂钩来过滤来自第2层的流量这个新挂钩比预路由要早基本上是 tc 命令流量控制工具的替代品。 iptabales   调用   netfiter   功能    5个  函数    拒绝  允许 三种报文流向 流入本机PREROUTING -- INPUT--用户空间进程(访问我的服务) 流出本机用户空间进程 --OUTPUT-- POSTROUTING穿过我 转发PREROUTING -- FORWARD -- POSTROUTING分摊流量 链chain 内置链每个内置链对应于一个钩子函数 自定义链用于对内置链进行扩展或补充可实现更灵活的规则组织管理机制只有Hook钩子调用自定义链时才生效。 内核中数据包的传输过程 1.当一个数据包进入网卡时数据包首先进入 PREROUTING链内核根据数据包目的 IP 判断是否需要 转发出去。 2.如果数据包是进入本机的数据包会沿着向上移动到达 INPUT 链。数据包到达INPUT链后任何进程都会收到它。 本机上运行的程序可以发送数据包这些数据包经过OUTPUT链然后到达POSTROUTING链。 3.如果数据包是要转发出去的且内核允许转发数据包就会向右移动经过FORWARD 链然后到达POSTROUTING链输出。 防火墙 四表五链 表中有链 链中有规则 四表 raw 确定是否对该数据包进行状态跟踪 mangle 为数据包设置标记 nat 地址转换      公网和私网的地址转换 filter 地址过滤       允许与拒绝 其实是五个表tablefilter、nat、mangle、raw、security 五链 Input 入栈数据 output 出栈数据 forward 转发数据 postrouting 路由选择后处理数据包 prerouting 路由选择前处理数据包 3. firewalld服务 3.1.1 firewalld 介绍 firewalld是CentOS 7.0新推出的管理netfilter的用户空间软件工具,也被ubuntu18.04版以上所支持(apt install firewalld安装即可) firewalld是配置和监控防火墙规则的系统守护进程。可以实iptables,ip6tables,ebtables的功能firewalld服务由firewalld包提供 归入zone顺序 先根据数据包中源地址将其纳为某个zone 纳为网络接口所属zone 纳入默认zone默认为public zone,管理员可以改为其它zone 网卡默认属于public zone,lo网络接口属于trusted zone firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则 1. 已经存在了zone区域 2. 使用firewall就是将特定的流量关联到某个zone中 通过源网段关联zone通过网卡关联zone区域如果两者都没有关联的数据报文那就会去default zone 3. 进入到zone以后开始匹配zone内的规则 firewalld zone 分类 zone名称默认配置trusted允许所有流量home拒绝除和传出流量相关的以及ssh,mdsn,ipp-client,samba-client,dhcpv6-client预 定义服务之外其它所有传入流量internal和home相同work拒绝除和传出流量相关的以及ssh,ipp-client,dhcpv6-client预定义服务之外的其它所有传入流量public拒绝除和传出流量相关的以及ssh,dhcpv6-client预定义服务之外的其它所有传入流 量新加的网卡默认属于public zoneexternal拒绝除和传出流量相关的以及ssh预定义服务之外的其它所有传入流量属于external zone的传出ipv4流量的源地址将被伪装为传出网卡的地址。dmz拒绝除和传出流量相关的以及ssh预定义服务之外的其它所有传入流量block拒绝除和传出流量相关的所有传入流量drop拒绝除和传出流量相关的所有传入流量甚至不以ICMP错误进行回应 预定义服务 服务名称配置sshLocal SSH server. Traffic to 22/tcpdhcpv6- clientLocal DHCPv6 client. Traffic to 546/udp on the fe80::/64 IPv6 networkipp- clientLocal IPP printing. Traffic to 631/udp.samba- clientLocal Windows file and print sharing client. Traffic to 137/udp and 138/udp.mdnsMulticast DNS (mDNS) local-link name resolution. Traffic to 5353/udp to the 224.0.0.251 (IPv4) or ff02::fb (IPv6) multicast addresses. firewalld预定义服务配置 firewall-cmd --get-services 查看预定义服务列表/usr/lib/firewalld/services/*.xml预定义服务的配置 firewalld 三种配置方法 firewall-config 图形工具: 需安装 firewall-config包firewall-cmd 命令行工具: firewalld包,默认安装/etc/firewalld/ 配置文件一般不建议,如:/etc/firewalld/zones/public.xml 远程工具图形化 可以打开 Xmanager - Passive [rootlocalhost ~]# export DISPLAY192.168.91.1:0.0 ###ip地址为自己的Windows地址 [rootlocalhost ~]# firewall-configcentos6 iptables export DISPLAY192.168.91.1:0.0 system-config-firewall 图形化操作 1.打开图形化界面 2.以httpd 服务为例子打开http服务 主机1 开启httpd服务 主机2 使用 curl 命令测试 关于配置后面的运行时 运行时 修改后立即生效 永久 需要 重新加载或者重启 修改端口号 主机1上修改 端口号 vim /etc/httpd/conf/httpd.conf Listen 80 Listen 8080 systemctl  restart httpd 3.1.2 命令行配置 3.1.2.1 基础命令 firewall-cmd [OPTIONS...] firewall-cmd #基础命令--permanent #设置永久生效--add-port端口号/协议(tcp/udp) 设置端口号和协议--reload #重新加载防火墙设置--remove #移除规则--get-zones 列出所有可用区域 --get-default-zone 查询默认区域 --set-default-zoneZONE 设置默认区域 --get-active-zones 列出当前正使用的区域 --add-sourceCIDR[--zoneZONE] 添加源地址的流量到指定区域如果无--zone 选项使用 默认区域 --remove-sourceCIDR [--zoneZONE] 从指定区域删除源地址的流量如无--zone 选项 使用默认区域 --add-interfaceINTERFACE[--zoneZONE] 添加来自于指定接口的流量到特定区域如果无-- zone 选项使用默认区域 --change-interfaceINTERFACE[--zoneZONE] 改变指定接口至新的区域如果无--zone 选项使用默认区域 --add-serviceSERVICE [--zoneZONE] 允许服务的流量通过如果无--zone 选项使用默 认区域 --add-portPORT/PROTOCOL[--zoneZONE] 允许指定端口和协议的流量如果无--zone 选 项使用默认区域 --remove-serviceSERVICE [--zoneZONE] 从区域中删除指定服务禁止该服务流量如果 无--zone 选项使用默认区域 --remove-portPORT/PROTOCOL[--zoneZONE] 从区域中删除指定端口和协议禁止该端口 的流量如果无--zone 选项使用默认区域 --reload 删除当前运行时配置应用加载永久配置 --list-services 查看开放的服务 --list-ports   查看开放的端口 --list-all [--zoneZONE] 列出指定区域的所有配置信息包括接口源地址端口服务等如 果无--zone 选项使用默认区域 3.1.2.2 查看现有firewalld设置 [rootlocalhost ~]#systemctl start firewalld #开启 [rootlocalhost ~]#systemctl stop firewalld.service #关闭 [rootlocalhost ~]#systemctl status firewalld #查看状态 [rootlocalhost ~]#firewall-cmd --list-all public (active)target: defaulticmp-block-inversion: nointerfaces: ens33sources: services: ssh dhcpv6-clientports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: [rootlocalhost ~]#firewall-cmd --list-all --zones区域名字 3.1.2.3设置查看默认区 [rootlocalhost ~]#firewall-cmd --zone #查看区域 block dmz drop external home internal public trusted work [rootlocalhost ~]#firewall-cmd --get-default-zone #查看默认区域[rootlocalhost ~]#firewall-cmd --set-default-zone block dmz drop external home internal public trusted work [rootlocalhost ~]#firewall-cmd --set-default-zone block dmz drop external home internal public trusted work [rootlocalhost ~]#firewall-cmd --set-default-zone home success [rootlocalhost ~]#firewall-cmd --get-default-zone home 3.1.2.4添加源地址网段及端口 及服务 [rootlocalhost ~]#firewall-cmd --permanent --add-port80/tcp #添加80端口[rootlocalhost ~]#firewall-cmd --permanent --remove-port80/tcp #移除80端口 [rootlocalhost ~]#firewall-cmd --permanent --add-port80/tcp --zonehome #可以指定区域 success[rootlocalhost ~]#firewall-cmd --add-servicehttp #允许http服务 [rootlocalhost ~]#firewall-cmd --permanent --add-icmp-blockecho-request #禁止ping success [rootlocalhost ~]#firewall-cmd --reload success[rootlocalhost ~]#firewall-cmd --permanent --add-source192.168.100.0/24 # 基础命令 永久生效 添加 源 网段 子网掩码 [rootlocalhost ~]#firewall-cmd --reload success [rootlocalhost ~]#firewall-cmd --list-all #查看生效策略小实验 尝试打开 httpd服务####删除source [rootlocalhost ~]#firewall-cmd --zonehome --remove-source192.168.91.0/24 --remove-source192.168.50.0/24 --remove-source192.168.100.0/24 --permanent 3.1.3 其它规则 当基本firewalld语法规则不能满足要求时可以使用以下更复杂的规则 rich-rules 富规则功能强,表达性语言 Direct configuration rules 直接规则灵活性差, 帮助man 5 firewalld.direct 3.1.3.1 管理rich规则 rich规则比基本的firewalld语法实现更强的功能不仅实现允许/拒绝还可以实现日志syslog和 auditd也可以实现端口转发伪装和限制速率 规则实施顺序 该区域的端口转发伪装规则 该区域的日志规则 该区域的允许规则 该区域的拒绝规则 每个匹配的规则生效所有规则都不匹配该区域默认规则生效 rich语法 rule[source][destination]service|port|protocol|icmp-block|masquerade|forward-port[log][audit][accept|reject|drop] man 5 firewalld.richlanguage 选项描述--add-rich-ruleAdd to the specified zone, or the default zone if no zone is specified.--remove-rich-ruleRemove to the specified zone, or the default zone if no zone is specified.--query-rich-ruleQuery if has been added to the specified zone, or the default zone if no zoneis specified. Returns 0 if the rule is present, otherwise 1.--list-rich-ruleOutputs all rich rules for the specified zone, or the default zone if no zone is 例子 拒绝从192.168.0.100的所有流量当address 选项使用source 或 destination时必须用family ipv4 |ipv6[rootlocalhost ~]# firewall-cmd --permanent --zonepublic --add-rich-rulerule   familyipv4 source address192.168.0.100/32 reject[rootlocalhost ~]#firewall-cmd --remove-rich-rulerule familyipv4 source address192.168.91.101 reject限制每分钟只有两个连接到ftp服务 [rootlocalhost ~]#firewall-cmd --add-rich-rule‘rule service nameftp limit value2/m accept’接受所有192.168.1.0/24子网端口5900-5905范围的TCP流量 [rootlocalhost ~]#firewall-cmd --permanent --zonevnc --add-rich-rulerule familyipv4 source address192.168.1.0/24 port port5900-5905 protocoltcp accept 4. iptables 4.1 iptables的组成概述 Linux 的防火墙体系主要工作在网络层针对 TCP/IP 数据包实施过滤和限制属于典型的包过滤防火墙或称为网络层防火墙。Linux 系统的防火墙体系基于内核编码实现 具有非常稳定的性能和高效率也因此获得广泛的应用。 netfilter/iptablesIP 信息包过滤系统它实际上由两个组件 netfilter 和 iptables组成。 主要工作在网络层针对IP数据包体现在对包内的IP地址、端口等信息的处理。 -netfilter/iptables关系 netfilter 属于“内核态”又称内核空间kernel space的防火墙功能体系。linux 好多东西都是内核态 用户态那我们运维人员关注的是用户态 内核我们关注不是很多内核基本是我们开发人员关心的事情是内核的一部分由一些信息包过滤表组成这些表包含内核用来控制信息包过滤处理的规则集。 iptables : 属于“用户态”(User Space 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序它使插入、修改和删除数据包过滤表中的规则变得容易通常位于/sbin/iptables目录下。 netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后立即生效不需要重启服务。 iptables由五个表table和五个链chain以及一些规则组成 五个表tablefilter、nat、mangle、raw、security filter过滤规则表根据预定义的规则过滤符合条件的数据包,默认表         放行    拒绝natnetwork address translation 地址转换规则表mangle修改数据标记位规则表               raw关闭启用的连接跟踪机制加快封包穿越防火墙速度security用于强制访问控制MAC网络规则由Linux安全模块如SELinux)实现   (了解) 优先级由高到低的顺序为 security -- raw -- mangle -- nat -- filter 总结 规则表的作用:容纳各种规则链;     表的划分依据防火墙规则的作用相似规则链的作用:容纳各种防火墙规则;规则的作用对数据包进行过滤或处理 ;链的分类依据处理数据包的不同时机总结:表里有链链里有规则 四表 raw主要用来决定是否对数据包进行状态跟踪 包含两个规则链OUTPUT、PREROUTINGmangle :  修改数据包内容用来做流量整形的给数据包设置标记。包含五个规则链INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTINGnat负责网络地址转换用来修改数据包中的源、目标IP地址或端口。包含三个规则链OUTPUT、PREROUTING、POSTROUTING。filter负责过滤数据包确定是否放行该数据包(过滤)。包含三个链即PREROUTING、POSTROUTING、OUTPUT 注在iptables 的四个规则表中mangle 表 和raw表的应用相对较少 五链 INPUT:  处理入站数据包匹配目标IP为本机的数据包。OUTPUT:  处理出站数据包一般不在此链上做配置。FORWARD:  处理转发数据包匹配流经本机的数据包。PREROUTING链:  在进行路由选择前处理数据包用来修改目的地址用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上。POSTROUTING链:  在进行路由选择后处理数据包用来修改源地址用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。 内核中数据包的传输过程 1.当一个数据包进入网卡时数据包首先进入 PREROUTING链内核根据数据包目的 IP 判断是否需要 转发出去。 2.如果数据包是进入本机的数据包会沿着向上移动到达 INPUT 链。数据包到达INPUT链后任何进程都会收到它。 本机上运行的程序可以发送数据包这些数据包经过OUTPUT链然后到达POSTROUTING链。 3.如果数据包是要转发出去的且内核允许转发数据包就会向右移动经过FORWARD 链然后到达POSTROUTING链输出。 三种报文流向 流入本机PREROUTING -- INPUT--用户空间进程流出本机用户空间进程 --OUTPUT-- POSTROUTING转发PREROUTING -- FORWARD -- POSTROUTING 4.2 实际操作 CentOS7默认使用firewalld防火墙没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙再安装iptables 前期准备工作 systemctl stop firewalld.service setenforce 0 systemctl disable  --now  firewalld.service ##开机不自启  并且立即关闭 systemctl enable  --now  firewalld.service ##开机自启  并且 立即开启 yum -y install iptables iptables-services systemctl start iptables.service systemctl enable iptables.service 配置方式 iptables防火墙的配置方法: 1、使用iptables命令行。 2、使用system-config-firewall centso7不能使用 centos 6可以使用 基本格式 iptables   指定表    怎么在链中插入规则    指定链     规则 -s 指定源地址 -j  指定规则 iptables  [-t 表名]  管理选项  [链名]  [匹配条件]  [-j 控制类型]  其中表名、链名用来指定 iptables 命令所操作的表和链未指定表名时将默认使用 filter 表 管理选项:表示iptables规则的操作方式如插入、增加、删除、查看等 匹配条件:用来指定要处理的数据包的特征不符合指定条件的数据包将不会处理 控制类型指的是数据包的处理方式如允许、拒绝、丢弃等。  注意事项 不指定表名时默认指 filter 表 不指定链名时默认指表内的所有链 除非设置链的默认策略否则必须指定匹配条件 选项、链名、控制类型使用大写字母其余均为小写 数据包的常见控制类型 对于防火墙数据包的控制类型非常关键直接关系到数据包的放行、封堵及做相应的日志记录等。在 iptables 防火墙体系中最常用的几种控制类型如下 - ACCEPT 允许数据包通过。  - DROP 直接丢弃数据包不给出任何回 应信息。  - REJECT 拒绝数据包通过必要时会给数据发送端一个响应信息。  - LOG 在/var/log/messages 文件中记录日志信息然后将数据包传递给下一条规则。 iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix sshnewlink: 生成日志文件 tail -f /var/log/messages Aug 15 10:01:20 localhost kernel: ftp new link: INens33 OUT MAC00:0c:29:fe:e5:bf:00:0c:29:2a:d6:05:08:00 SRC192.168.91.101 DST192.168.91.100 - SNAT :修改数据包的源地址。 - DNAT :修改数据包的目的地址。 - MASQUERADE :伪装成一个非固定公网IP地址。 防火墙规则的“匹配即停止”对于 LOG 操作来说是一个特例因为 LOG 只是一种辅助 动作并没有真正处理数据包。  注需要大写 iptables 添加、查看、删除规则等基本操作 管理选项用法示例-A在指定链末尾追加一条 iptables -A INPUT 操作-I在指定链中插入一条新的未指定序号默认作为第一条 iptables -I INPUT 操作-P指定默认规则 iptables -P OUTPUT ACCEPT 操作-D删除 iptables -t nat -D INPUT 2 操作-p服务名称 icmp tcp-R修改、替换某一条规则 iptables -t nat -R INPUT 操作-L查看 iptables -t nat -L 查看-n所有字段以数字形式显示比如任意ip地址是0.0.0.0而不是anywhere比如显示协议端口号而不是服务名 iptables -L -n,iptables -nL,iptables -vnL 查看-v查看时显示更详细信息常跟-L一起使用 查看--line-number规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number-F清除链中所有规则 iptables -F 操作-N新加自定义链-X清空自定义链的规则不影响其他链 iptables -X-Z清空链的计数器匹配到的数据包的大小和总和iptables -Z-S看链的所有规则或者某个链的规则/某个具体规则后面跟编号 基本匹配条件 [!] -s, --source address[/mask][,...]源IP地址或者不连续的IP地址 [!] -d, --destination address[/mask][,...]目标IP地址或者不连续的IP地址 [!] -p, --protocol protocol指定协议可使用数字如0allprotocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“  参看/etc/protocols  iptables -I INPUT 2 -p icmp -s 192.168.91.101 -j REJECT  禁止icmp协议ssh协议可以继续使用     [!] -i, --in-interface name报文流入的接口只能应用于数据报文流入环节只应用于INPUT、FORWARD、PREROUTING链 [!] -o, --out-interface name报文流出的接口只能应用于数据报文流出的环节只应用于FORWARD、OUTPUT、POSTROUTING链 4.2.1 加新的防火墙规则 添加新的防火墙规则时使用管理选项“-A”、“-I”前者用来追加规则后者用来插入规则。例如若要在 filter 表 INPUT 链的末尾添加一条防火墙规则可以执行以下操作其中 “-p 协议名”作为匹配条件。例1iptables -t filter -A INPUT -p icmp -j REJECT //不允许任何主机ping本主机DROP //直接丢弃数据包ACCEPT //允许任何主机ping本主机iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT //允许主机ssh端口 通过我的其他 iptables -t filter -A INPUT -p tcp -j ACCEPT //允许任何主机tcp iptables -I INPUT -p udp -j ACCEPT //允许任何主机udp 4.2.2 查看规则表 查看已有的防火墙规则时使用管理选项“-L”结合“--line-numbers”选项还可显示各条规则在链内的顺序号。例如若要查看 filter 表 INPUT 链中的所有规则并显示规则序号 可以执行以下操作 iptables [-t表名] -n -L [链名] |[-- line-numbers] 或 iptables - [vn]L #注意:不可以合写为-Lniptables -vnL -v 查看时显示更详细信息 -n 所有字段以数字形式显示 -L 查看规则列表[rootlocalhost ~]#iptables -vnL --line-numbers #查看规则表并显示序号默认查看filter4.2.3 删除、清空、替换、插入规则 清空 [rootlocalhost ~]# iptables -F INPUT #清空 filter 表中 INPUT 链的所有规则。[rootlocalhost ~]# iptables -t nat -F INPUT #清空 nat 表中 INPUT 链的所有规则。 删除 iptables -t nat -D INPUT 2 #删除 nat 表 INPUT 链中的第二个规则。iptables -t filter -D INPUT -p icmp -j REJECT #删除 filter 表 INPUT 链中 服务名称为 icmp 控制类型为 REJECT 的规则 替换 iptables -A INPUT -s 192.168.80.50 -j DROP[rootserver1 ~]#iptables -vnL INPUT --line-numbers Chain INPUT (policy ACCEPT 156 packets, 10233 bytes) num pkts bytes target prot opt in out source destination 1 10 868 DROP all -- * * 192.168.80.50 0.0.0.0/0iptables -R INPUT 1 -s 192.168.91.101 -j ACCEPT #替换 filter 表 INPUT 链中的第一条规则。[rootserver1 ~]#iptables -vnL INPUT --line-numbers Chain INPUT (policy ACCEPT 7 packets, 440 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- * * 192.168.80.50 0.0.0.0/0 注意: 1.若规则列表中有多条相同的规则时按内容匹配只删除的序号最小的一条 2.按号码匹配删除时确保规则号码小于等于已有规则数否则报错 3.按内容匹配删数时确保规则存在否则报错 插入规则 iptables -I INPUT 编号 -s 192.168.80.20 -j DROP #在filter表 INPUT 链中 第 几编号 行 插入规则。iptables -I INPUT -s 192.168.91.1 -j ACCEPT 允许本地 #不指定编号默认第一行插入规则。iptables -A INPUT -s 192.168.91.0/24 -j REJECT 拒绝所有91段的 #默认最后一行插入规则。 4.2.4 设置默认策略 黑白名单 iptables 的各条链中默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时则执行默认策略。默认策略的控制类型为 ACCEPT允许、DROP丢弃两种。例如执行以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃 OUTPUT 链的默认策略设为允许。 iptables [-t表名] -P 链名 控制类型 iptables -P INPUT DROP 输入后没显示 清除所有规则之后生效因为下面只剩下DROP 添加远程端口22iptables -P FORWARD DROP #--般在生产环境中设置网络型防火墙、主机型防火墙时都要设置默认规则为DROP并设置白名单################################################## 拒绝所有前 先将 22 端口 放开 ##################################################[rootlocalhost ~]# iptables -t filter -P FORWARD DROP[rootlocalhost ~]# iptables -P OUTPUT ACCEPT#需要注意的是当使用管理选项“-F”清空链时默认策略不受影响。因此若要修改默认 策略必须通过管理选项“-P”重新进行设置。另外默认策略并不参与链内规则的顺序编排 因此在其他规则之前或之后设置并无区别。[rootserver1 ~]#iptables -A INPUT -s 192.168.80.0/24 -j ACCEPT [rootserver1 ~]#iptables -A INPUT -j DROP [rootserver1 ~]#iptables -vnL --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 205 13333 ACCEPT all -- * * 192.168.80.0/24 0.0.0.0/0 2 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0这样设置更好先设置允许访问我的网段然后拒绝所有其它网段的访问。与默认策略中DROP是一个意思。 这样设置在清空iptables filter表时不会使其它连接该服务器的人断连。 4.2.5 通用匹配 直接使用不依赖于其他条件或扩展包括网络协议、IP地址、网络接口等条件。 协议匹配: -p协议名 地址匹配: -s 源地址、-d目的地址 #可以是IP、网段、域名、空(任何地址) 接口匹配: -i入站网卡、-o出站网卡 iptables -A FORWARD ! -p icmp -j ACCEPT iptables -A INPUT -s 192.168.91.101 -j DROP iptables -I INPUT -i ens33 -s 192.168.91.0/24 -j DROPiptables -I INPUT -p icmp -j DROP iptables -A FORWARD ! -p icmp -j ACCEPT //感叹号”!”表示取反 设置默认策略 [rootlocalhost ~]#iptables -P INPUT DROP 输入后没显示 清除所有规则之后生效[rootlocalhost ~]#iptables -F #这时候xshell又会连不上[rootlocalhost ~]#iptables -P INPUT ACCEPT[rootserver1 ~]#iptables -A INPUT -s 192.168.80.0/24 -j ACCEPT #设置所有192.168.80.0/24 网段的都可以访问我。[rootserver1 ~]#iptables -A INPUT -j REJECT #最后一条加入拒绝形成白名单[rootserver1 ~]#iptables -vnL --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 205 13333 ACCEPT all -- * * 192.168.80.0/24 0.0.0.0/0 2 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0这样设置更好先设置允许访问我的网段然后拒绝所有其它网段的访问。与默认策略中DROP是一个意思。 这样设置在清空iptables filter表时不会使其它连接该服务器的人断连。这时候你会发现你ping不了回环地址了 解决方法 [rootlocalhost ~]#iptables -I INPUT 2 -i lo -j ACCEPT #无论你的机器上有多少网卡都可以ping通。只要是本机的都可以ping通lo代表本机回环网卡匹配所有本机地址-i指定网卡 自己能ping通自己 4.2.6 扩展模块的使用 man iptables-extensions 查看扩展帮助 iptables 在使用-p选项指明了特定的协议时无需再用-m选项指明扩展模块的扩展机制不需要手动加载扩展模块 要求以特定的协议匹配作为前提包括端口、TCP标记、ICMP类型等条件。 端口匹配: --sport 源端口、--dport 目的端口 #可以是个别端口、端口范围 隐式扩展     -p   tcp 指定了特殊的协议无需再次使用-m 选项    显示扩展    必须加   -m  选项 隐式扩展 [!] --source-port, --sport port[:port]匹配报文源端口,可为端口连续范围 [!] --destination-port,--dport port[:port]匹配报文目标端口,可为连续范围 [!] --tcp-flags mask compmask 需检查的标志位列表用,分隔 , 例如 SYN,ACK,FIN,RSTcomp 在mask列表中必须为1的标志位列表无指定则必须为0用,分隔tcp协议的扩展选项--tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个其中SYN必须为1余下的必须为0第一次握手 --tcp-flags FIN,RST SYN,ACK 第二次握手 #错误包 --tcp-flags  ALL ALL     6个位置全为1 --tcp_flags  ALL NONE     6个位置全为0 例子 --sport 1000 匹配源端口是1000的数据包 --sport 1000:3000 匹配源端口是1000-3000的数据包 --sport :3000 匹配源端口是3000及以下的数据包 --sport 1000: 匹配源端口是1000及以上的数据包 注意: --sport和--dport 必须配合-p 协议类型使用端口可以使用的范围 0-65535[rootlocalhost ~]#iptables -A INPUT -p tcp --sport 10000:30000 -j REJECT #10000到30000 全部被拒TCP标记匹配: --tcp-flags TCP标记SYN,RST,ACK,SYN [rootlocalhost ~]#iptables -I INPUT -i ens33 -p tcp --tcp-flags FIN,RST,ACK SYN -j ACCEPT #丢弃SYN请求包放行其他包 tcp 【tcp】 指定端口号    iptables -I INPUT 3 -s 192.168.80.11 -p tcp --dport 80 -j REJECT iptables -I INPUT 3 -s 192.168.80.11 -p tcp --dport 80:82 -j REJECT  连续的端口号 tcp 的标记位 --tcp-flags --syn用于匹配第一次握手, 相当于--tcp-flags SYN,ACK,FIN,RST SYN icmp A   能ping通  B     B 不能ping通 A 类型匹配: --icmp-type ICMP类型 #可以是字符串、数字代码 Echo- Request (代码为8)表示请求 Echo- Reply (代码为0)表示回复 Dest ination-Unreachable (代码为3)表示目标不可达 关于其它可用的ICMP协议类型可以执行“iptables -p icmp -h”命令查看帮助信息 A可以ping通B B 不可以ping通A iptables -A INPUT -s 192.168.91.101 -j REJECT 双方都不可以ping拒绝请求包 iptables -A INPUT -s 192.168.80.11 -p icmp --icmp-type 8 -j REJECT #禁止其它主机ping本机但本机能ping通其它主机拒绝回复包 iptables -A OUTPUT -d 192.168.80.11 -p icmp --icmp-type 0 -j REJECT 拒绝请求包较好[rootlocalhost ~]#iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #当本机ping不通其它主机时提示目标不可达#此时其它主机需要配置关于icmp协议的控制类型为REJECT [rootlocalhost ~]#iptables -A INPUT -p icmp -j REJECT#####icmp 协议的扩展选项 [!] --icmp-type {type[/code]|typename}type/code0/0   echo-reply icmp应答8/0   echo-request icmp请求 4.2.7 显示扩展模块 显示扩展即必须使用-m选项指明要调用的扩展模块名称需要手动加载扩展模块 [-m matchname [per-match-options]] 4.2.7.1 multiport扩展 【multiport扩展】混合端口 以离散的方式定义多个端口匹配最多指定15个端口。 [!] --source-ports,--sports port[,port|,port:port]... #指定多个源端口 逗号隔开 [!] --destination-ports,--dports port[,port|,port:port]... # 指定多个目标端口 逗号隔开 [!] --ports port[,port|,port:port]... #多个源或目标端 例子 [rootlocalhost ~]#iptables -t filter -A INPUT -s 192.168.91.101 -p tcp --dport 22,80 -j REJECT #不支持离散的端口号 iptables v1.4.21: invalid port/service 22,80 specified Try iptables -h or iptables --help for more information.[rootlocalhost ~]#iptables -A INPUT -s 192.168.80.11 -p tcp -m multiport --dports 22,80,3306 -j REJECT #阻止 ip地址来自192.168.80.11 访问当前机器 的tcp 80 3306 22ssh端口 4.2.7.2 iprange扩展 指明连续的但一般不是整个网络ip地址范围之前只能指定网段 [!] --src-range from[-to] 源IP地址范围 [!] --dst-range from[-to] 目标IP地址范围 例子 [rootlocalhost ~]#iptables -A INPUT -m iprange --src-range 192.168.80.11-192.168.80.13 -j REJECT # 指定 源地址为192.168.80.11-192.168.80.13 3个地址无法访问 当前主机 4.2.7.3 mac 地址 mac 模块可以指明源MAC地址,适用于PREROUTING, FORWARDINPUT chains -m   mac    [!] --mac-source XX:XX:XX:XX:XX:XX 例子 [rootzabbix-server ~]#ip a 2: ens33: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether ### 00:0c:29:2a:d6:05 #### inet 192.168.80.11/24 brd 192.168.80.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::ce63:27de:ef4d:4f66/64 scope link valid_lft forever preferred_lft forever[rootlocalhost ~]#iptables -A INPUT -m mac --mac-source 00:0c:29:2a:d6:05 -j REJECT #指定 mac地址 为 00:0c:29:2a:d6:05 的主机无法访问当前主机。 4.2.7.4 string 字符串 对报文中的应用层数据做字符串模式匹配检测根据字符串过滤 --algo {bm|kmp} 字符串匹配检测算法  bmBoyer-Moore           算法  kmpKnuth-Pratt-Morris   算法 --from offset 开始查询的地方 --to offset   结束查询的地方 [!] --string pattern  要检测的字符串模式 [!] --hex-string pattern  要检测字符串模式16进制格式 例子 先安装httpd服务并开启。[rootlocalhost ~]#echo www.bilibili.com /var/www/html/index.html #自建网页 [rootlocalhost ~]#echo www.baidu.com /var/www/html/index1.html #自建网页[rootlocalhost ~]#iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string bilibili -j REJECT #注意 请求的包不带字符回复的包带字符 所以要 output #from 62 的意思是从 62 字节开始查询 4.2.7.5 time模块 根据将报文到达的时间与指定的时间范围进行匹配有 bug  ubuntu没问题 这里的时间是  UTC 时间  世界协商时间      不使用当地时间 date -u #查看 世界协商世界 --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期 --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --timestart hh:mm[:ss]       时间 --timestop hh:mm[:ss] [!] --monthdays day[,day...]   每个月的几号 [!] --weekdays day[,day...]   星期几1 – 7 分别表示星期一到星期日 --kerneltz内核时区当地时间不建议使用CentOS 7版本以上系统默认为 UTC 注意 centos6 不支持kerneltz --localtz指定本地时区(默认) man iptables-extensions 例子 [rootlocalhost ~]#date 2024年 02月 19日 星期一 14:39:57 CST #中国标准时间[rootlocalhost ~]#date -u 2024年 02月 19日 星期一 06:40:19 UTC #美国标准时间[rootlocalhost ~]#iptables -A INPUT -m time --timestart 14:00 --timestop 16:00 -j REJECT[rootlocalhost ~]#rpm -ql iptables|grep time /usr/lib64/xtables/libxt_time.so 4.2.7.6 connlimit 扩展 根据每个客户端IP做并发连接数数量匹配 可防止Dos(Denial of Service拒绝服务)攻击 --connlimit-upto N #连接的数量小于等于N时匹配 --connlimit-above N #连接的数量大于N时匹配 例子 连接最大数 先安装httpd软件并开启。模拟攻击 [rootlocalhost3 ~]# gcc flood_connect.c -o flood #编译安装 黑客文件 #yum install -y gcc [rootlocalhost3 ~]# ./flood 192.168.80.7 #运行黑客脚本在另一台 机器上 curl 192.168.80.7 会发现无法访问网页。iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT #设置 tcp 80 端口的最大连接数为 10 limit 限制流量 --limit-burst number   #前多少个包不限制 --limit   #[/second|/minute|/hour|/day] 例子两条都要添加 iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT #icmp 包 前5个不限制   一分钟允许通过10个包 iptables -A INPUT -p icmp -j REJECT 4.2.7.7 state 状态类型 NEW新发出请求连接追踪信息库中不存在此连接的相关信息条目因此将其识别为第一次发出的请求ESTABLISHEDNEW状态之后连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态RELATED新发起的但与已有连接相关联的连接如ftp协议中的数据连接与命令连接之间的关系INVALID无效的连接如flag标记不正确UNTRACKED未进行追踪的连接如raw表中关闭追踪 格式 老用户可以继续访问拒绝新用户。 比如你正在访问网页或服务器直接给你踢掉肯定不好就可以用这个规则。正在访问的可以继续访问你退出想继续访问就不行了。其他想要访问的新用户也不可以访问。 --state state   ipatables  -A INPUT -m state --state   NEW            -j  REJECT ipatables  -A INPUT  -m state --state  ESTABLISHED    -j   ACCEPT                     新用户不可以访问  旧用户可以访问 例子1 故障案例 启用了 iptables  state 模块 用户访问有问题查看日志/var/log/messages Feb 19 15:32:24 localhost kernel: nf_conntrack: table full, dropping packet 这是因为内核中有一个选项的 默认值过低 /proc/sys/net/netfilter/nf_conntrack_max  默认65536把这个值调大一点。 cat /proc/net/nf_conntrack 启用后会写在这个文件中lsmod | grep conn 内核模块可以看到调用state状态时可以看到cat /proc/sys/net/netfilter/nf_conntrack_max 记录的用户数为 65536echo 2 /proc/sys/net/netfilter/nf_conntrack_max 修改最大记录数使用其他主机 ssh 本机tailf /var/log/messages 查看日志Feb 19 15:32:24 localhost kernel: nf_conntrack: table full, dropping packet #出现这种是因为 nf_conntrack_max 参数设置太小了。注意 centos6中使用ip -vnL 会自动开启state 模块 面试题 报错Feb  5 09:41:49 localhost kernel: nf_conntrack: table full, dropping packet 例子2 A 可以访问B的任何服务 B 不可以访问A的任何服务 iptables -A INPUT -s 192.168.91.101 -j REJECT 不行都不可以了 iptables -A INPUT -s 192.168.91.101 -m state --state NEW -j REJECT 第一个包是请求包只要禁止请求包即可 4.2.7.8 总结 多端口匹配:  -m multiport --sport 源端口列表            -m multiport --dport 目的端口列表                iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT IP范围匹配: -m iprange --src-range IP范围 iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP #禁止转发源地址位于192.168.80.100-192.168.80.200的udp数据包 MAC地址匹配: -m mac --mac-source MAC地址 iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP #禁止来自某MAC地址的数据包通过本机转发 状态匹配: -m state --state 连接状态 常见的连接状态: NEW :与任何连接无关的还没开始连接 ESTABLISHED :响应请求或者已建立连接的连接态 RELATED :与已有连接有相关性的(如FTP主被动模式的数据连接)衍生态一般与ESTABLISHED 配合使用 INVALID:不能被识别属于哪个连接或没有任何状态 iptables -A FORWARD -m state --state NEW -P tcp ! --syn -j DROP #禁止转发与正常TCP连接无关的非--syn请求数据包(如伪造的网络攻击数据包) iptables -I INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT #对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过。 #比如我和你做生意我们谈成了生意到了支付的时候就可以直接调用与这笔生意相关的支付功能 iptables -P INPUT DROP 4.2.8 规则优化实践 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条效率更高 谨慎放行入站的新请求 有特殊目的限制访问功能要在放行规则之前加以拒绝 同类规则访问同一应用比如http 匹配范围小的放在前面用于特殊处理 不同类的规则访问不同应用一个是http另一个是mysql 匹配范围大的放在前面效率更高 应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率 设置默认策略建议白名单只放行特定连接 A:iptables -P不建议容易出现“自杀现象” B:规则的最后定义规则做为默认策略推荐使用放在最后一条 4.2.9 保存规则 centos 7 8 iptables-save     此条命令会将所有规则打印在屏幕上 iptables-restore  支持标准输入 保存规则 iptables-save   /data/iprule    #把iptables规则导入/data/iprule文件中   加载规则 iptables-restore   /data/iprule   #把 /data/iprule 文件中的配置 导入到 iptables中 iptables-restore选项 -n, --noflush不清除原有规则 -t, --test仅分析生成规则集但不提交 centos 6 保存规则 #将规则覆盖保存至/etc/sysconfig/iptables文件中 service iptables save   #会自动从/etc/sysconfig/iptables 重新载入规则 service iptables  restart 开机自启动重载规则 用脚本保存各个iptables命令让此脚本开机后自动运行 .bashrc  #只对当前用户生效 在 /etc/rc.d/rc.local 文件添加 在 /etc/profile 文件中添加 全局配置 iptables-save /opt/iptables vim ~/.basrc iptables-restore /opt/iptables iptables-services 备份工具 [rootcentos7 ~]#yum -y install iptables-services [rootcentos7 ~]#cp /etc/sysconfig/iptables{,.bak} #保存现在的规则到文件中方法1 相当于备份iptables为iptables.bak [rootcentos7 ~]#/usr/libexec/iptables/iptables.init save #保存现在的规则到文件中方法2 [rootcentos7 ~]#iptables-save /etc/sysconfig/iptables #开机启动 [rootcentos7 ~]#systemctl enable iptables.service     [rootcentos7 ~]#systemctl mask firewalld.service nftables.service 4.3.0 自定义链 【自定义链】 将规则归类    web链      db链   java链 iptables -N web  自定义链  iptables -vnL    可以看到自己定义的链 iptables -E web  WEB   改名 iptables -A WEB -p tcp -m multiport --dports 80,443 -j ACCEPT iptables -A INPUT -s 192.168.91.0/24 -j WEB   // input 连调用 将自定义链和INPUT 链修改 也可以保存 删除自定义链 iptables -F INPUT iptables -F WEB     删除 iptables -X WEB     清空自定义链的规则 4.3 NAT NAT: network address translation支持PREROUTINGINPUTOUTPUTPOSTROUTING四个链 请求报文修改源/目标IP 响应报文修改源/目标IP根据跟踪机制自动实现 NAT的实现分为下面类型 SNATsource NAT 支持POSTROUTING, INPUT让本地网络中的主机通过某一特定地址访问外部网络实现地址伪装,请求报文修改源IP DNATdestination NAT 支持PREROUTING , OUTPUT把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射)但隐藏真实IP,请求报文修改目标IP PNAT: port nat端口和IP都进行修改 4.4 SNAT DNAT 4.4.1 SNAT SNAT  内网机器  可以访问外网 SNAT原理与应用: SNAT 应用环境:局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由) SNAT原理:源地址转换根据指定条件修改数据包的源IP地址通常被叫做源映谢 SNAT转换前提条件: 1.局域网各主机已正确设置IP地址、子网掩码、默认网关地址 2.Linux网关开启IP路由转发  linxu系统本身是没有转发功能 只有路由发送数据 1.设置各个主机的ip、子网掩码、网关。 内网客户端配置1-1 [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#cd /etc/sysconfig/network-scripts/ [rootlocalhost network-scripts]#vim ifcfg-ens33TYPEEthernet BOOTPROTOstatic NAMEens33 DEVICEens33 ONBOOTyes IPADDR192.168.80.7 NETMASK255.255.255.0 GATEWAY192.168.80.11 #要以网关服务器为网关。 DNS18.8.8.8[rootlocalhost network-scripts]#systemctl restart network 网关服务器配置1-2 要有两个网卡 [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#cd /etc/sysconfig/network-scripts/ [rootlocalhost network-scripts]#vim ifcfg-ens33TYPEEthernet BOOTPROTOstatic NAMEens33 DEVICEens33 ONBOOTyes IPADDR192.168.80.11 NETMASK255.255.255.0 GATEWAY192.168.80.2 DNS18.8.8.8[rootlocalhost network-scripts]#cp ifcfg-ens33 ifcfg-ens36 [rootlocalhost network-scripts]#vim ifcfg-ens36TYPEEthernet BOOTPROTOstatic NAMEens36 DEVICEens36 ONBOOTyes IPADDR12.0.0.1 NETMASK255.255.255.0 GATEWAY12.0.0.1 DNS18.8.8.8[rootlocalhost network-scripts]#systemctl restart network[rootlocalhost network-scripts]#ifconfig ens33|head -n2;ifconfig ens36|head -n2 ens33: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 192.168.80.11 netmask 255.255.255.0 broadcast 192.168.80.255 ens36: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500inet 12.0.0.1 netmask 255.255.255.0 broadcast 12.0.0.255然后开启路由转发 [rootlocalhost network-scripts]#sysctl -a|grep ip_forward net.ipv4.ip_forward 0 #改成1即可 net.ipv4.ip_forward_use_pmtu 0[rootlocalhost network-scripts]#vim /etc/sysctl.conf net.ipv4.ip_forward 1 #在最后一行添加。 [rootlocalhost ~]#sysctl -p #读取修改后的配置 net.ipv4.ip_forward 1 一定要开启路由转发不然外网服务器无法安装httpd也无法访问httpd服务 外网服务器配置1-3 要安装httpd。 [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#cd /etc/sysconfig/network-scripts/ [rootlocalhost network-scripts]#vim ifcfg-ens33TYPEEthernet BOOTPROTOstatic NAMEens33 DEVICEens33 ONBOOTyes IPADDR12.0.0.100 NETMASK255.255.255.0 GATEWAY12.0.0.1 DNS18.8.8.8[rootlocalhost network-scripts]#systemctl restart network [rootlocalhost ~]#yum install -y httpd [rootlocalhost ~]#systemctl start httpd [rootlocalhost ~]#echo 1-3 /var/www/html/index.html #这样在curl 时就不会跳出很多东西了只会显示1-3 2.配置防火墙规则1-2 iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to 12.0.0.1 将源地址为192.168.80.0段的私网地址全部 转化为网关地址 或 iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j MASQUERADE 如果地址不固定可以设置 注意 因为是虚拟环境我们在内网客户端使用 curl 12.0.0.100 也可以访问到 但是在真实环境中不行。在外网服务器的日志中我们就可以看到源ip不是12.0.0.1 而是192.168.80.7 1-1 [rootlocalhost network-scripts]#curl 12.0.0.1001-3 [rootlocalhost ~]#tailf /var/log/httpd/access_log 192.168.80.7 - - [16/Feb/2024:22:40:35 0800] GET / HTTP/1.1 200 4 - curl/7.29.0配置了防火墙策略后1-1 [rootlocalhost network-scripts]#curl 12.0.0.1001-3 [rootlocalhost ~]#tailf /var/log/httpd/access_log 192.168.80.7 - - [16/Feb/2024:22:40:35 0800] GET / HTTP/1.1 200 4 - curl/7.29.0 12.0.0.1 - - [16/Feb/2024:22:41:25 0800] GET / HTTP/1.1 200 4 - curl/7.29.0 4.4.2 DNAT DNAT  外网机器 可以访问 内网的机器 DNAT原理与应用: DNAT应用环境:在Internet中发布位于局域网内的服务器 DNAT原理:目的地址转换根据指定条件修改数据包的目的IP地址保证了内网服务器的安全通常被叫做目的映谢。         DNAT转换前提条件: 局域网的服务器能够访问Internet网关的外网地址有正确的DNS解析记录Linux网关开启IP路由转发 要在内网服务器1-1 安装httpd [rootlocalhost ~]#yum install -y httpd [rootlocalhost ~]#systemctl start httpd [rootlocalhost ~]#echo 1-1 /var/www/html/index.html #这样在curl 时就不会跳出很多东西了只会显示1-1 网关服务器要开启路由转发1-2 [rootlocalhost network-scripts]#sysctl -a|grep ip_forward net.ipv4.ip_forward 0 #改成1即可 net.ipv4.ip_forward_use_pmtu 0[rootlocalhost network-scripts]#vim /etc/sysctl.conf net.ipv4.ip_forward 1 #在最后一行添加。 [rootlocalhost ~]#sysctl -p #读取修改后的配置 net.ipv4.ip_forward 1 然后配置防火墙规则1-2 iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.80.7#外网的访问ens36网卡的12.0.0.1地址就相当于访问 192.168.80.7有去有回才能ping通所以 要加snat iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to 12.0.0.1也可以指定端口 iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.80.7:8080 一些实际操作 [rootlocalhost ~]#iptables -L #查看列表 Chain INPUT (policy ACCEPT) #链名 #默认策略允许 target prot opt source destination #匹配规则 #端口号 #源地址 #目标地址 ACCEPT all -- 192.168.91.1 anywhere REJECT all -- 192.168.91.0/24 anywhere reject-with icmp-port-unreachableChain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [rootlocalhost ~]#iptables -nL #加n 已数字显示 Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- 192.168.91.1 0.0.0.0/0 #数字 REJECT all -- 192.168.91.0/24 0.0.0.0/0 reject-with icmp-port-unreachableChain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [rootlocalhost ~]#iptables -vnL #-v 更详细的信息 Chain INPUT (policy ACCEPT 3 packets, 218 bytes)pkts bytes target prot opt in out source destination 232 20088 ACCEPT all -- * * 192.168.91.1 0.0.0.0/0 #多少个包匹配了规则291 24444 REJECT all -- * * 192.168.91.0/24 0.0.0.0/0 reject-with icmp-port-unreachableChain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 331 packets, 37422 bytes)pkts bytes target prot opt in out source destination [rootlocalhost ~]#iptables -I INPUT -s 192.168.91.1 -j ACCEPT #在拒绝网段前请先允许自己访问 [rootlocalhost ~]#iptables -A INPUT -s 192.168.91.0/24 -j REJECT #拒绝192.168.91.0 网段白名单: 清空所有配置会无法连接 黑名单:[rootlocalhost ~]#iptables -P INPUT DROP [rootlocalhost ~]#iptables -vnL Chain INPUT (policy DROP 0 packets, 0 bytes)pkts bytes target prot opt in out source destination 322 26301 ACCEPT all -- * * 192.168.91.1 0.0.0.0/0 371 31164 REJECT all -- * * 192.168.91.0/24 0.0.0.0/0 reject-with icmp-port-unreachableChain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 15 packets, 1652 bytes)pkts bytes target prot opt in out source destination [rootlocalhost ~]#iptables -I INPUT 2 -i lo -j ACCEPT #修改默认规则后自己都无法访问 可以指定回环网卡 允许通过 global 全球 [rootlocalhost ~]#iptables -vnL --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 739 57301 ACCEPT all -- * * 192.168.91.1 0.0.0.0/0 2 4 336 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 3 381 32144 REJECT all -- * * 192.168.91.0/24 0.0.0.0/0 reject-with icmp-port-unreachableChain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 104 packets, 11056 bytes) num pkts bytes target prot opt in out source destination [rootlocalhost ~]#ping 127.0.0.1#在生产环境中 怎么使用默认的规则修改成白名单######## [rootlocalhost ~]#iptables -P INPUT ACCEPT #修改默认回来 [rootlocalhost ~]#iptables -t filter -A INPUT -j REJECT #在最后一行加入[rootlocalhost ~]#iptables -I INPUT 3 -s 192.168.91.0/24 -j ACCEPT # 在第三行插入规则
http://www.pierceye.com/news/3909/

相关文章:

  • 免费的网站app下载花生壳怎么做网站
  • 贸易网站建站wordpress15天教程
  • 网页制作和网站开发知乎推广和引流技巧
  • 微信企业网站模板上海建筑工程有限公司有哪些
  • 百度网站建设工具游戏代理0加盟费
  • 高密哪里有做网站的高端建筑班
  • 记事本做网站怎么调整图片间距程序员做网站类网站
  • 网站开发包含哪些类别韩国美食网站建设目的
  • 电子商务网站设计与开发海口最新新闻消息
  • 做网站的得多少钱如何上传ftp网站程序
  • 想找人做网站网站备案以后怎么做
  • 百度网站地址提交重庆妇科医院
  • 怎样建设网站卖农产品建企业网站怎么收费
  • 宁波网站推广宣传公司排名建设厅网站平顶山
  • 成都互联网网站建设百度商桥怎样绑定网站
  • 网站开发行业深圳网站建设网站制作哪家好
  • 湖北省城乡建设厅网站首页抖音网络营销案例分析
  • 做基本的网站百度快照和做网站有关系吗
  • 华为建站wordpress城市建设单招网站
  • 网站建设资料公司网页制作费用大概要多少钱?
  • 西宁做网站君博专注建设银行德阳分行网站
  • wordpress菜单相对地址公司网站如何seo
  • 网站建设用户体验企业查询显示利好什么意思
  • 做网站是学什么专业wordpress打开install
  • 制作网站低价wordpress如何做优化
  • 网站关键词连接符云速成美站
  • 网站建设排版页面番禺网站建设设计
  • 哈尔滨网站开发建设公司wordpress转化为中文版
  • 商城购物网站建设jsp做的零食店网站
  • 快站怎么搭建淘客链接wordpress7牛云插件