Linux系统iptables配置详解
(1)、防火墙概念
防火墙(Firewall)是一个架设在互联网与企业内网之间的信息安全系统,根据企业预定的策略来监控往来的传输。
防火墙可能是一台专属的网络设备或是运行于主机上来检查各个网络接口上的网络传输。它是目前最重要的一种网络防护设备,从专业角度来说,防火墙是位于两个(或多个)网络间,实行网络间访问或控制的一组组件集合之硬件或软件。
(2)、防火墙功能
防火墙最基本的功能就是隔离网络,通过将网络划分成不同的区域(通常情况下称为ZONE),制定出不同区域之间的访问控制策略来控制不同信任程度区域间传送的数据流。防火墙工作与主机和网络的边缘。
(3)、iptables系统防火墙
Linux系统的防火墙功能是由内核实现的,包过滤防火墙工作在TCP/IP的网络层,防火墙不属于应用程序,集成与内核空间,没有进程。
(一)iptables规则表:
规则表名称 |
规则表包含的链 |
功能 |
nat |
PREROUTING,POSTROUTING,INPUT,OUTPUT |
网络地址转换,转发 |
filter |
INPUT,OUTPUT,FORWARD |
过滤,防火墙 |
raw |
INPUT,OUTPUT,FORWARLD,PREROUTING,POSTROUTING |
关闭nat表上启用的连接追踪功能 |
mangle |
OUTPUT,PREROUTING |
确定是否对该数据包进行状态跟踪,封装 |
(二)iptables规则链:
规则链名称 |
功能 |
input |
入站,收数据包时会应用(常用) |
output |
出站,向外发送数据包时会应用 |
forward |
中转,通过防火墙发送给其他数据包时会应用 |
prerouting |
路由选择前,判断目标主机会应用 |
postrouting |
路由选择后,判断由哪个接口到下一跳会应用 |
1、input方式(进站)总结:sport指外部,dport指本地
2、output行为(出站)总结:sport指本地,dport指外部
3、流入、流出接口(-i 、-o)
4、来源、目的地址(-s 、-d)
5、协议类型(-p)
6、源端口、目的端口(–sport 、–dport)
7、target 常见处理方法有:ACCEPT(接受),DROP(丢弃),REJECT(拒接)
其中、一般不使用REJECT行为、REJECT会带来安全隐患、只需要记住ACCEPT(接受)、DROP(丢弃)。
(三)iptables的基本语法格式:
iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
说明:表名、链名用于指定 iptables命令所操作的表和链,命令选项用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样 条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。
(四)iptables命令控制选项:
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-j 目标可以是用户自定义链target;内建目标;或扩展
-t 指定规则表
-p tcp : 表示使用 TCP协议
-m tcp:表示使用TCP模块的扩展功能(tcp扩展模块提供了 --dport, --tcp-flags, --sync等功能)
-g 选项将规则重定向到一个用户自定义链中
-h 获取帮助(help)
(五)、iptables操作指导:
1、自定义链(-N新增,-D删除)
#iptables -N libin #新增自定义一条链libin
#iptables -D libin #删除自定义的一条链libin
#iptables -X libin2 #删除自定义的一条链libin2,如果自定义链中已有规则得先删掉规则
#iptables -nL | grep libin #用数字形式列出链中规则
注:自定义链的引用计数为0 (0 references),也就是说,这条自定义链还没有被任何默认链所引用,所以,即使libin链中配置了规则,也不会生效
# iptables -I INPUT -j libin
#先添加自定义链到默认链,再为默认链添加规则
# iptables -I libin2 -s 192.168.80.0/24 -p tcp --dport 80 -j ACCEPT
#iptables -t filter -N RHCE
#在filter表创建RHCE自定义链
#iptables -t filter -I INPUT -p tcp --dport 80 -j RHCE
#在INPUT链中引用刚才创建的自定义链
#iptables -E RHCE RHCA #重命名自定义链,将RHCE自定义链重命名为RHCA
2、添加进站规则(INPUT)
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#允许所有的机器进站通过本地22端口进入
#iptables -I INPUT -s 192.168.80.0/24 -p tcp --dport 80 -j ACCEPT
#允许80网段以tcp协议通过80端口进入本服务器
#iptables -I INPUT -s 192.168.80.0/24 -p tcp --dport 80 -j DROP
#拒绝80网段以tcp协议通过80端口进入本服务器
#iptables -I INPUT -s 10.159.180.0/24 -p tcp -d 10.159.180.116 --dport 22 -j ACCEPT
#增加10.159.180.0/24 进入到 10.159.180.116服务器通过tcp协议 22端口进站规则
3、添加出站规则(OUTPUT)
#iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
#允许本地通过22端口出站
#iptables -I OUTPUT -s 10.159.180.0/24 -p tcp -d 10.159.180.116 --dport 22 -j ACCEPT
#增加10.159.180.0/24 网段通过tcp协议到 10.159.180.116服务器 22端口 出站规则
2、拒绝进站规则(REJECT)
#iptables -A INPUT -m iprange --src-range 192.168.110.1-192.168.110.10 -j REJECT
#拒绝192.168.110.1~192.168.110.10范围内的所有主机的访问
3、删除出站、进站规则(-D)
#iptables -D INPUT -m iprange --src-range 192.168.110.1-192.168.110.10 -j REJECT
#iptables -D OUTPUT -s 10.159.180.0/24 -p tcp -d 10.159.180.116 --dport 22 -j ACCEPT
6、增加一个扩展模块(-m)
#iptables -I INPUT -m iprange --src-range 10.10.1.20-10.10.1.22 -p tcp -d 10.10.1.100 --dport 5566 -j DROP #拒绝范围IP访问主机通过主机5566端口访问10.10.1.100
7、测试1(允许同网段多个IP通过服务器22端口访问服务器)
#iptables -A INPUT -m iprange --src-range 10.250.68.194-10.250.68.249 -p tcp --dport 22 -j ACCEPT
8、允许间隔性连续IP通过多个端口进入服务器(port:14235:14239,22;注;14235:14239为端口范围)
#iptables -A INPUT -m iprange --src-range 10.159.100.107-10.159.100.115 -m iprange --src-range 10.159.100.136-10.159.100.139 -p tcp -m multiport --dport 14235:14239,22 -j ACCEPT
9、增加单条IP进站(单条进站一般还会再开放端口)
#iptables -N ComGroup
#iptables -I ComGroup -s 10.159.180.116/32 -j ACCEPT
#iptables -D ComGroup -s 10.159.180.116/32 -j ACCEPT #回退
例如:(-d,一般在服务器上操作,所以-d可以不写)
cp /etc/sysconfig/iptables* /tmp/iptables.bak/
iptables -I ComGroup -s 10.260.67.65/32 -p tcp --dport 22790 -j ACCEPT
iptables -I ComGroup -s 10.260.67.79/32 -p tcp --dport 22790 -j ACCEPT
iptables -I ComGroup -s 10.260.67.75/32 -p tcp --dport 22790 -j ACCEPT
iptables-save > /etc/sysconfig/iptables.rules
iptables -nL
10、增加多条IP进入服务器,通过服务器22端口,for循环方式
ip范围:10.159.180.116-127,10.159.180.204-208(-m rang --src-range :范围IP)
操作:
#for i in {16..27};do iptables -I ComGroup -s 10.159.180.1$i -j ACCEPT ;done
#for i in {204..208};do iptables -I ComGroup -s 10.159.180.$i -j ACCEPT ;done
#iptables -I INPUT -m iprange --src-range 10.159.180.116-10.159.180.127 -m iprange --src-range 10.159.180.204-10.159.180.208 -p tcp -j ACCEPT --dport 22
回退:(-D)
#for i in {16..27};do iptables -D ComGroup -s 10.159.180.1$i -j ACCEPT ;done
#for i in {204..208};do iptables -D ComGroup -s 10.159.180.$i -j ACCEPT ;done
#iptables -D INPUT -m iprange --src-range 10.159.180.116-10.159.180.127 -m iprange --src-range 10.159.180.204-10.159.180.208 -p tcp -j ACCEPT --dport 22
11、增加多网段通过服务器443,6004端口访问服务器(注:掩码位客户提供,或自行斟酌)
171.17.0.0/16 ,171.18.0.0/16 ,171.19.0.0/16,10.159.180.0/22,10.159.196.0/24
#iptables -I INPUT -s 171.17.0.0/16 -p tcp -m multiport --dport 443,6004 -j ACCEPT
#iptables -I INPUT -s 171.18.0.0/16 -p tcp -m multiport --dport 443,6004 -j ACCEPT
#iptables -I INPUT -s 171.19.0.0/16 -p tcp -m multiport --dport 443,6004 -j ACCEPT
#iptables -I INPUT -s 10.159.180.0/22 -p tcp -m multiport --dport 443,6004 -j ACCEPT
#iptables -I INPUT -s 10.159.196.0/24 -p tcp -m multiport --dport 443,6004 -j ACCEPT
12、注意事项注:操作之前先执行备份
#mkdir /tmp/iptables.bak
#cp /etc/sysconfig/iptables* /tmp/iptables.bak/ #将配置文件备份
#iptables-save > /etc/sysconfig/iptables.rules #保存规则
#iptables -nL #查看规则
-v:在Linux命令里,一般都是指“verbose”,这个词的意思是是“冗余的,啰嗦的”,即输出更加详细的信息,一般可以跟-L连用:
可以看到多了四列:
pkts: packets,包的数量
bytes: 流过的数据包的字节数
in: 入站网卡
out: 出站网卡
#iptables -n -v -L --line
--line-numbers或者--line: 如果你想列表有序号,可以加上该选项
# iptables -t filter -D libin2 1 删除指定链libin2的第一条规则
日常工中涉及到入站规则INPUT 会比较多,更多的是 多网段 ,开放端口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下