iptables
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了iptables,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含10185字,纯文字阅读大概需要15分钟。
内容图文
![iptables](/upload/InfoBanner/zyjiaocheng/928/2080de37582142648fc917f82dea2302.jpg)
防火墙介绍
什么是防火墙
防火墙是位于两个或多个网络之间执行访问控制的软件或硬件系统,他根据访问控制规则对进出的网络的数据流进行过滤。它是一种网络安全产品,用于对网络进行安全访问限制,一般用在互联网的边缘,防止外部黑客的攻击。防火墙可以看成是带有安全功能的路由器,早期的防火墙就是在路由器的基础上加入了访问控制功能,所以防火墙的很多功能可以在路由器上看到,例如路由协议、访问控制列表和地址翻转技术等。
防火墙对数据包的处理方式:允许、拒绝、丢弃
防火墙分类
根据防火墙的技术特征可以分为:基础类防火墙(工作在三层) 、IDS类防火墙(工作在七层) 和 IPS类防火墙以及主动安全类(WAF、DAF)
根据产品形态可以分为:软件防火墙和硬件防火墙
防火墙组成
netfilter – 位于Linux内核中的包过滤功能体系,称为Linux防火墙的"内核态"
iptables – 位于/sbin/iptables,用来管理防火墙规则的工具,称为Linux防火墙的"用户态"
包过滤的工作层:主要是网络层,针对IP数据包,体现在对包内的IP地址,端口等信息的处理上
iptables的链结构
规则链
规则的作用: 对数据包进行过滤或处理
链的作用: 容纳各种防火墙规则
链的分类依据: 处理数据包的不同时机
链就是位置
进路由(PREROUTING)
进系统(INPUT)
转发(FORWARN)
出系统(OUTPUT)
出路由(POSTROUTING)
#默认包括5种规则链
INPUT: 处理入站数据包
OUTPUT: 处理出站数据包
FORWARD: 处理转发数据包
POSTROUTING链: 在进行路由选择后处理数据包,用于SNAT地址转换; (所有的数据包出来的时候都先由这个链处理)
PREROUTING链: 在进行路由选择前处理数据包,用于DNAT地址转换;(所有的数据包进来的时候都先由这个链处理)
iptables的表结构
表就是存储的规则
数据包到了该链处,会去对应表中查询设置的规则,然后决定是否放行,丢弃,转发还是修改等操作
filter表 #过滤数据包(filter是默认的表,不特指其他的表就会默认filter)
nat表 #用于网络地址转换(IP,端口)
mangle表 #修改数据包的服务类型,设置TTL(生存周期),并且可以配置路由实现QOS
Raw表 #数据报文跟踪
四表五链之间的关系
表包含链,链包含规则
数据包过滤处理流程
规则表之间的顺序:raw > mangle >nat > filter
规则链之间的顺序:
入站: PREROUTING>INPUT
出站: OUTPUT>POSTROUTING
转发: PREROUTING→FORWARD→POSTROL JTING
规则链内的匹配顺序:自上而下依次匹配,匹配即停止(LOG策略例外),若找不到相匹配的规则,则按该链的默认策略处理
书写顺序:访问量大的数据报文的匹配应该优先配置
Centos7中安装iptables
CentOS 7默认使用firewalld防火墙,若想使用iptables防火墙,必须先关闭firewalld防火墙
关闭firewalld防火墙
systemctl stop firewalld #关闭firewalld
systemctl disable firewalld
rpm -e --nodeps firewalld #卸载firewalld防火墙
安装iptables防火墙
yum install -y iptables-services #安裝iptables防火墻
开启防火墙
systemctl start iptables #启动防火墙
systemctl enable iptables #开机自启
iptables基本命令
iptables语法格式
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
如果不指定表名,则会默认指定filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项,链名,控制类型使用大写字母,其余均为小写
iptables常用参数
-P 设置默认策略:iptables
-P INPUT(DROP|ACCEPT)
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加感叹号“!”表示除了这个IP外
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
--dport num 匹配目标端口号
--sport num 匹配来源端口号
数据包常见的动作类型
ACCEPT 允许通过
DROP 直接丢弃,不给出任何回应
REJECT 拒绝通过,必要时会给出提示
LOG 记录日志信息,然后传给下一条规则继续匹配
SNAT 修改数据包源地址
DNAT 修改数据包目的地址
REDIRECT 重定向
iptables管理选项
-A: 在链的末尾追加一条规则
-I: 在链的开头(或指定序号) 插入一条规则
ptables -t filter -A INPUT -p tcp -j ACCEPT #在filter表的INPUT链末尾,增加一条放行ctp的规则
iptables -I INPUT -p udp -j ACCEPT #在filter表的INPUT链开头,增加一条放行udp的规则
iptables -I INPUT 3 -p icmp -j ACCEPT #在第3条前插入规则
iptables查看规则
-L: 列出所有的规则条目
-n: 以数字形式显示地址,端口等信息
-v: 以更详细的方式显示地址,端口等信息
–line-numbers: 查看规则时,显示规则的序号
注意:-nL INPUT不能写成-Ln INPUT L要紧跟着链
iptables -t filter -nL INPUT #以数字的形式限制filter表中的INPUT链的规则
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
iptables -t filter -nL INPUT --line-number #每一条都会显示序号
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
iptables清空规则
-D: 删除链内指定序号(或内容)的一条规则; 后面加上序列号
-F: 清空所有的规则
iptables -t nat -F #清除nat表所有规则
iptables -t nat -D INPUT 2 #清除nat表中INPUT链的序列号为2的规则
iptables -F #默认清除filter表的所有规则
iptables设置默认策略
默认防火墙规则:DROP或ACCEPT,没有其他选项,使用iptables -F命令无法清除,这个命令清除的都是自定义规则
-P: 为指定的链设置默认规则
iptables -t filter -P INPUT DROP #filter表中INPUT链的默认规则时拒绝(丢弃数据包)
iptables -P FORWARD ACCEPT #filter表中的FORWARD默认放行
iptables规则匹配条件
规则匹配的方式
通用条件匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议,IP地址,网络接口
协议匹配: -p 协议名
地址匹配: -s 源地址,-d 目的地址
接口匹配: -i 入站网卡, -o 出站网卡
iptables -t filter -A INPUT -p tcp -j ACCEPT #在filter表的INPUT链末尾插入放行tcp协议的规则
iptables -t filter -I INPUT -p udp -j DROP #在filter表的INPUT链首部插入禁止udp协议的规则
iptables -I INPUT -i ens33 -s 10.0.0.0/24 -j REJECT #在INPUT链首部插入规则,经过网卡ens33的网段10.0.0.0/24网段拒绝通过(返回拒绝信息)
iptables -I OUTPUT -o ens33 -d 10.0.0.0/24 -j FROP #在INPUT链首部插入出站经过网卡ens33且目标网段是10.0.0.0/24拒绝通过(直接丢弃数据包)
iptables -A FORWARD ! -p icmp -j ACCEPT #在FORWARD链尾部添加除了icmp协议的其他协议都允许的规则
隐含条件匹配
端口匹配: --sport 源端口, -dport 目的端口
ICMP类型匹配: --icmp-type ICMP类型
8:请求 ; 0:回显 ; 3:不可达(未知主机回显 )
iptables -I FORWARD -p tcp --sport 80:90 -j ACCEPT #在FPRWARD链的首部添加一条允许80,90端口转发ctp协议的规则
iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT #在FORWARD链里增加一条允许源地址段为192.168.4.0/24且协议为udp端口为53转发的规则
iptables -A INPUT -p icmp --icmp-type 8 -j DROP #在进站口丢弃icmp访问请求
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT #在进站口允许icmp请求回显
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #在进站口不允许icmp请求,
iptables -A INPUT -p icmp -j DROP
显性条件匹配
要求以" -m 扩展模块" 的形式明确指出类型
包括多端口,MAC地址,IP范围,数据包状态等条件
多端口匹配: -m multiport --sports 源端口列表 ; -m multiport --dports 目的端口列表
IP范围匹配: -m iprange --src-range IP范围
MAC地址匹配: -m mac --mac-source MAC地址
状态匹配: -m state --state 连接状态,状态:NEW,ESTABLISHED,RELATED
iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
iptables -I INPUT -p tcp -m multiport --dport 80,82,85 -j ACCEPT
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
常用的条件匹配总结
类别 条件类型 用法
通用匹配 协议匹配 -p协议名
地址匹配 -s源地址、-d目的地址
接口匹配 -i入站网卡、-o出站网卡 网卡名称
隐含匹配 端口匹配 –sport源端口、–dport 目的端口
ICMP类型匹配 –icmp-type ICMP类型
显式匹配 多端口匹配 -m multiport --sports
IP范围匹配 -m iprange --src-range IP范围
MAC地址匹配 -m mac --mac-source MAC地址
状态匹配 -m state --state 连接状态
SNAT策略与DNAT策略
SNAT策略
SNAT:source NAT
POSTROUTING:修改要离开防火墙数据包的源IP地址
应用环境: 局域网主机共享单个公网IP地址介入Internet
SNAT策略的原理: 源地址转换(修改数据包源地址), 让本地网络中的主机通过某一特定地址访问外部网络,实现源地址伪装
改变数据包的源地址。当内网数据包到达防火墙后,防火墙会使用外部地址替换掉数据包的源IP地址(目的IP地址不变),使网络内部主机能够与网络外部主机通信。
前提条件
使用SNAT转换必须先做好如下操作,否则会失败
局域网各主机正确设置IP地址/子网掩码
局域网各主机正确设置默认网关地址
linux网关支持IP路由转发
SNAT工作过程:
本机IP 10.0.0.139
网关上的外网IP是172.20.0.2
本机数据包发送到网关,此时源IP是10.0.0.139,网关记录后在POSTROUTING链上把源IP改为172.20.0.2再发送
语法规则
iptables -t nat -I PREROUTING -s 10.0.0.0/24 -o ens33 -j SNAT --to-source 172.20.0.2
可选参数:
-t: 指定规则表
-A: 添加一条规则到某一链的尾部
-I:添加一条规则到某一链的首部
-s: 指定数据包的源IP地址或网段
-o: 指定数据包从哪一块网卡发出去
-j: 指定一个默认策略(动作)来处理数据包
–-to-source: 指定执行SNAT策略后数据包的源IP
MASQUERADE–地址伪装
使用场景:适用于外网IP地址 非固定的情况,需要指定伪装后的公网地址,它会自动锁定自己能够使用的公网地址
对于ADSL拨号连接,接口通常为ppp0、ppp1
将SNAT规则改为MASQUERADE即可
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o ens33 -j MASQUERADE #自己获取伪装公网地址
DNAT策略
DNAT:destination NAT
把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP
请求报文:修改目标IP,改变数据包的目的地址。当防火墙收到来自外网的数据包后,会将该数据包的目的IP地址进行替换(源IP地址不变),重新转发到内网的主机。
DNAT工作过程:跟SNAT相反,DNAT是网关收到指定端口的数据包后发送到指定内网IP上
PREROUTING:修改到达防火墙数据包的目的IP地址
语法规则
iptables -t nat -A PREROUTING -d 10.0.0.139 -p tcp -i eth0 --dport 22 -j DNAT --to-destination 192.168.4.113
可选参数:
-t: 指定规则表
-A: 添加一条规则到某一链的尾部
-I:添加一条规则到某一链的首部
-p:协议名称
-d:指定数据包的目标IP地址或网段
-j: 指定一个默认策略(动作)来处理数据包
--to-destination 指定执行DNAT策略后数据包的目标IP,格式:IP或IP:port
目标IP:PORT
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to-destination 192.168.1.6:22
内容总结
以上是互联网集市为您收集整理的iptables全部内容,希望文章能够帮你解决iptables所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。