0

0

Linux防火墙之-iptables详解

PHPz

PHPz

发布时间:2024-02-20 11:57:02

|

1410人浏览过

|

来源于每日运维

转载

项目介绍

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系统上的防火墙和网络地址转换功能。

Linux防火墙之-iptables详解

替换系统防火墙: 在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号端口.

PaperAiBye
PaperAiBye

支持近30多种语言降ai降重,并且支持多种语言免费测句子的ai率,支持英文aigc报告等

下载
[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

相关专题

更多
点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

181

2023.11.24

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

348

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

408

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

1801

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1976

2024.08.16

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

119

2023.07.25

udp是什么协议
udp是什么协议

UDP是OSI参考模型中一种无连接的传输层协议。本专题为大家带来udp是什么协议的相关文章,免费提供给大家。

282

2023.08.08

tcp和udp有什么区别
tcp和udp有什么区别

tcp和udp的区别有:1、udp是无连接的,tcp是面向连接的;2、udp是不可靠传输,tcp是可靠传输;3、udp是面向报文传输,tcp是面向字节流传输。想了解更多tcp相关的内容,可阅读本专题下面的相关文章。

375

2024.11.14

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

27

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Linux网络安全之防火墙技术汇总
Linux网络安全之防火墙技术汇总

共31课时 | 3万人学习

Linux网络安全之防火墙技术汇总
Linux网络安全之防火墙技术汇总

共31课时 | 3万人学习

【李炎恢】ThinkPHP8.x 后端框架课程
【李炎恢】ThinkPHP8.x 后端框架课程

共50课时 | 4.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号