Linux防火墙之-iptables详解
项目介绍
iptables是Linux系统下的免费包过滤防火墙软件,可实现封包过滤、封包重定向和网络地址转换等功能。它是一个高效且灵活的解决方案,可代替昂贵的商业防火墙。iptables具有强大的配置选项和规则设置,使用户能够根据自身需求对网络流量进行精细控制,提高网络安全性和性能。
iptables的规则其实是指网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤、网络地址转换、包重构(修改)和数据跟踪处理。而每一条链其实只是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则。如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
总的来说,iptables是一个功能强大的工具,用于配置Linux系统上的防火墙和网络地址转换功能。
替换系统防火墙: 在Centos7系统中默认防火墙管理工具不是iptables,当需要使用时则需要自己安装替换.
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld [root@localhost ~]# yum install -y iptables iptables-services [root@localhost ~]# systemctl restart iptables [root@localhost ~]# systemctl enable iptables
查询完整防火墙规则: 使用 -L -n –line-numbers 参数查看防火墙默认配置规则.
[root@localhost ~]# iptables -L -n --line-numbers [root@localhost ~]# iptables -F # 临时清空规则 Chain INPUT (policy ACCEPT) numtarget prot opt source destination 1ACCEPT all--0.0.0.0/00.0.0.0/0state RELATED,ESTABLISHED 2ACCEPT icmp --0.0.0.0/00.0.0.0/0 3ACCEPT all--0.0.0.0/00.0.0.0/0 4ACCEPT tcp--0.0.0.0/00.0.0.0/0state NEW tcp dpt:22 5REJECT all--0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) numtarget prot opt source destination 1REJECT all--0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) numtarget prot opt source destination
设置防火墙默认拒绝: 设置默认拒绝规则,把 INPUT 链设置为默认拒绝,也就是拒绝所有连接请求.
[root@localhost ~]# iptables -P INPUT DROP [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) #这里可以看出INPUT链已变成DROP numtarget prot opt source destination Chain FORWARD (policy ACCEPT) numtarget prot opt source destination Chain OUTPUT (policy ACCEPT) numtarget prot opt source destination
开启防火墙ICMP回显: 在默认规则拒绝的情况下,设置开启ICMP测试,允许主机ping通.
[root@localhost ~]# iptables -I INPUT -p icmp -j ACCEPT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1ACCEPT icmp --0.0.0.0/00.0.0.0/0 Chain FORWARD (policy ACCEPT) numtarget prot opt source destination Chain OUTPUT (policy ACCEPT) numtarget prot opt source destination
允许客户SSH远程连接: 在默认拒绝的情况下,设置开启22号端口,允许远程ssh连接到本机.
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT [root@localhost ~]# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy ACCEPT) numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22 Chain OUTPUT (policy ACCEPT) numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp spt:22
删除指定规则: 在默认拒绝的情况下,删除INPUT链,第2条数据,删除ICMP规则.
[root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22 2ACCEPT icmp --0.0.0.0/00.0.0.0/0 [root@localhost ~]# iptables -D INPUT 2 [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22
指定允许网段访问: 在默认拒绝的情况下,设置只允许192.168.1.0/24网段的主机访问本机的22号端口.
[root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT [root@localhost ~]# iptables -I OUTPUT -s 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22 Chain OUTPUT (policy ACCEPT) numtarget prot opt source destination 1ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp spt:22
拒绝访问指定端口: 在INPUT规则链中,添加拒绝所有人访问本机的8888号端口.
[root@localhost ~]# iptables -I INPUT -p tcp --dport 8888 -j REJECT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable 2ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
拒绝访问指定主机网段的端口: 在INPUT规则链中,添加拒绝192.168.1.20主机访问本机的80端口.
[root@localhost ~]# iptables -I INPUT -p tcp -s 192.168.1.20 --dport 80 -j REJECT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1REJECT tcp--192.168.1.20 0.0.0.0/0tcp dpt:80 reject-with icmp-port-unreachable 2REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable 3ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
拒绝访问指定端口范围: 在INPUT规则链中,添加拒绝所有主机访问本机1000-2000端口.
[root@localhost ~]# iptables -A INPUT -p tcp --dport 1000:2000 -j REJECT [root@localhost ~]# iptables -A INPUT -p udp --dport 1000:2000 -j REJECT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1REJECT tcp--192.168.1.20 0.0.0.0/0tcp dpt:80 reject-with icmp-port-unreachable 2REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable 3ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22 4REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpts:1000:2000 reject-with icmp-port-unreachable 5REJECT udp--0.0.0.0/00.0.0.0/0udp dpts:1000:2000 reject-with icmp-port-unreachable
SNAT-源地址转换<内网映射到公网>: 从本地发出的数据包,经过SNAT后,会自动伪装成公网的IP,并以公网IP访问指定服务.
#例:将本地 192.168.1.1 的请求自动伪装成外网地址 59.110.167.234 [root@localhost ~]# iptables -t nat -A POSTROUTING -o ens32 -s 192.168.1.1 -j SNAT --to-source 59.110.167.234 -o#指定外网接口,此处为ens32 -s#指定内网口地址,此处为192.168.1.1 --to-source #外网口的地址
DNAT-目标地址转换<公网映射到内网>: 从公网接收的数据包,经过DNAT后,会自动将数据包转到指定的内网主机.
#例:将请求 59.110.167.234 且端口为 80 的数据包,自动映射到内网 192.168.1.10 [root@localhost ~]# iptables -t nat -A PREROUTING -i ens32 -d 59.110.167.234 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10 --to-destination #内网口地址,此处为192.168.1.1 -i #绑定外网接口,此处为ens32 -d #外网地址,此处为8.8.8.8 -dport #内网端口,此处为80
限制物理请求连接数: iptables可以利用connlimit模块实现限制同一IP针对某个端口的连接数. 允许限制每个客户端IP的并发连接数,即每个IP同时连接到一个服务器个数,还可以限制内网用户的网络使用,对服务器而言则可以限制每个IP发起的连接数.
# 限制同一IP同时最多100个http连接 [root@localhost ~]# iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT [root@localhost ~]# iptables -I INPUT -p tcp --syn --dport 80 -m connlimit ! --connlimit-above 100 -j ACCEPT # 只允许每组C类IP同时100个http连接 [root@localhost ~]# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 --connlimit-mask 24 -j REJECT # 只允许每个IP同时5个80端口转发,超过的丢弃 [root@localhost ~]# iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP # 限制某IP最多同时100个http连接 [root@localhost ~]# iptables -A INPUT -s 192.168.1.100 -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT # 限制每IP在一定的时间(比如60秒)内允许新建立最多100个http连接数 [root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 100 -j REJECT [root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
配置基本防火墙规则: 我们可以在新安装的系统中依次执行下方代码,来配置一个基本的防火墙规则.
# 删除已有规则 iptables --delete-chain iptables --flush # 默认禁止进,允许出,允许回环网卡 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT # 允许已建立的或相关连接的通行 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # 限制80端口443端口的单个IP的最大连接数为10 iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP iptables -I INPUT -p tcp --dport 443 -m connlimit --connlimit-above 10 -j DROP # 允许80(HTTP)/873(RSYNC)/443(HTTPS)/20,21(FTP)/25(SMTP)端口的连接 iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT # 允许SSH端口的连接,放行SSH端口 iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT # 允许ping iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT # 放行允许DNS解析端口 iptables -A OUTPUT -p udp -m udp -d 8.8.8.8 --dport 53 -j ACCEPT iptables -A OUTPUT -p udp -m udp -d 114.114.114.114 --dport 53 -j ACCEPT # 保存规则 iptables-save
生产常用配置规则: 下面是收藏的一些生成环境下常用规则的配置,一般情况下配置这些规则足够使用.
filter -P INPUT DROP #设置默认规则,拒绝所有 iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT#放行80口 iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT #放行22口 iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT#放行22口 iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT#放行80端口 iptables -t filter -I INPUT -p tcp --dport 443-j ACCEPT#插入在顶端一条放行443端口的规则 iptables -t filter -I INPUT 2 -p tcp --dport 443 -j ACCEPT #在第二列插入一条443放行规则 iptables -t filter -A INPUT -p tcp --dport 80 -j DROP#丢弃80端口的请求 iptables -I INPUT 2 -p icmp -j DROP#丢弃ICMP请求 iptables -t filter -D INPUT 3#删除第三条规则 iptables -A FORWARD -s 192.168.1.10 -j REJECT#拒绝IP的转发请求 iptables -I INPUT -s 10.20.30.0/24 -j DROP #丢弃IP网段的入站请求 iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP#丢弃从eth1网卡流入,且地址匹配的数据包 iptables -A INPUT -o eth0 -s 192.168.1.0/24 -j DROP#丢弃从eth0网卡流出,且地址匹配的数据包 iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT #放行20-21端口的数据包 iptables -I INPUT -p tcp -m multiport --dport 80-90,85 -j ACCEPT iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.10-192.168.1.100 -j ACCEPT
以上是Linux防火墙之-iptables详解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

OneDrive是微软提供的流行的云存储应用程序。我们大多数人使用OneDrive来存储我们的文件,文件夹,文档等。但是一些用户抱怨说,当他们尝试访问OneDrive上的共享文件时,它会给出错误,指出“错误:0x80070185,云操作不成功”。因此,他们无法在OneDrive上执行任何操作,例如复制文件,粘贴,下载共享文件等。如今,有必要在我们的日常工作中使用这些操作。此错误可以轻松解决,为此,我们有一些方法可以应用并尝试解决问题。让我们开始吧!方法1–注销并重新登录到OneDrive应用步骤

很多朋友在设置防火墙的时候,发现自己的win11防火墙高级设置灰色了,无法点击。这可能是由于没有添加控制单元导致的,也可能是没有通过正确的方法打开高级设置,下面一起来看看怎么解决吧。win11防火墙高级设置灰色方法一:1、首先点击下方开始菜单,在上方搜索并打开“控制面板”2、接着打开其中的“Windowsdefender防火墙”3、进入后,在左边栏就可以打开“高级设置”了。方法二:1、如果上面方法也打不开,可以右键“开始菜单”,打开“运行”2、然后输入“mmc”回车确定打开。3、打开后,点击左上

在AlpineLinux上,你可以使用iptables工具来配置和管理防火墙规则。以下是在AlpineLinux上启用或禁用防火墙的基本步骤:检查防火墙状态:sudoiptables-L如果输出结果中显示有规则(例如,有一些INPUT、OUTPUT或FORWARD规则),则表示防火墙已启用。如果输出结果为空,则表示防火墙当前处于禁用状态。启用防火墙:sudoiptables-PINPUTACCEPTsudoiptables-POUTPUTACCEPTsudoiptables-PFORWARDAC

很多使用win10系统的小伙伴发现,电脑桌面的图标上有防火墙的标志,这是什么情况呢?这让很多有强迫症的小伙伴特别难受,其实我们只要打开控制面板,在用户账户中的“更改用户账户控制设置”更改就可以解决了,具体的教程一起来看看吧。win10桌面图标有防火墙标志怎么取消1、首先,通过鼠标右键点击计算机开机画面旁的开始菜单按钮,然后从弹出的菜单中选取控制面板功能。2、紧接着选择其中的“用户账户”选项,从接下来出现的新界面中选择“更改用户账户控制设置”这一项目。3、在调整窗口中的滑块至底部之后,点击确认退出

UFW,又称Uncomplex防火墙,被许多Linux发行版采用作为其防火墙系统。UFW的设计让新手用户能够轻松通过命令行界面和图形用户界面来管理防火墙设置。UFW防火墙是一种能根据设定规则监控网络流量的系统,以保护网络免受网络嗅探和其他攻击的影响。如果您在Linux系统上安装了UFW但其状态显示为非活动状态,可能存在多种原因。在这篇指南中,我将分享如何解决Linux系统上UFW防火墙处于非活动状态的问题。为什么UFW在Linux上显示不活动状态为什么UFW在Linux上默认不活动如何在Linu

随着Web应用程序的增多,安全性越来越成为一个重要的问题。在这些应用程序中,WebShell是一种常见的安全威胁。WebShell是一种可执行的Web脚本,可以通过HTTP或其他Web协议上传和执行。对于攻击者来说,WebShell是访问Web服务器并获取敏感信息的重要方式。Nginx防火墙是一种流行的Web服务器软件,可以用来保护Web应用程序免受攻

任何windows系统要想更好地工作并具有良好的性能,都需要不时更新。不仅是需要更新的系统,还包括连接到系统内部(如显卡)或外部(如光学鼠标、键盘等)的设备的所有驱动程序。最近,一些Windows用户在更新系统中的任何设备驱动程序时开始遇到问题。当他们尝试更新驱动程序时,它在更新驱动程序窗口上抛出了一条错误消息,上面写着“此操作需要交互式窗口站”,并阻止用户更新驱动程序。如果它不允许用户更新任何驱动程序,这实际上是一个严重的问题,因为它对于保持系统健康非常重要。缺少管理权限可能是此问题背后的原因

Edge浏览器被防火墙阻止了怎么解决?Edge浏览器是微软自带的浏览器,有一部分用户们在使用的过程中发现这款浏览器被防火墙拦截了,那么这是怎么回事?下面就让本站来为用户们来仔细的介绍一下Edge浏览器被防火墙阻止了怎么恢复吧。 Edge浏览器被防火墙阻止了怎么恢复? 1、检查防火墙设置: -点击Windows任务栏上的“开始”按钮,然后打开“设置”。 -在“设置”窗口中,选择“更新和安全”。 -在
