🤣iptables
Linux上常用的防火墙软件
补充说明
iptables命令 是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。
补充说明
语法
选项
基本参数
命令选项输入顺序
工作机制
防火墙的策略
防火墙的策略
实例
清空当前的所有规则和计数
配置允许ssh端口连接
允许本地回环地址可以正常使用
设置默认的规则
配置白名单
开启相应的服务端口
保存规则到配置文件中
列出已设置的规则
清除已有规则
删除已添加的规则
开放指定的端口
屏蔽IP
指定数据包出去的网络接口
查看已添加的规则
启动网络转发规则
端口映射
字符串匹配
阻止Windows蠕虫的攻击
防止SYN洪水攻击
语法
选项
基本参数
-P
设置默认策略:iptables -P INPUT (DROP
-F
清空规则链
-L
查看规则链
-A
在规则链的末尾加入新规则
-I
num 在规则链的头部加入新规则
-D
num 删除某一条规则
-s
匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d
匹配目标地址
-i
网卡名称 匹配从这块网卡流入的数据
-o
网卡名称 匹配从这块网卡流出的数据
-p
匹配协议,如tcp,udp,icmp
--dport num
匹配目标端口号
--sport num
匹配来源端口号
命令选项输入顺序
工作机制
规则链名包括(也被称为五个钩子函数(hook functions)):
INPUT链 :处理输入数据包。
OUTPUT链 :处理输出数据包。
FORWARD链 :处理转发数据包。
PREROUTING链 :用于目标地址转换(DNAT)。
POSTOUTING链 :用于源地址转换(SNAT)。
防火墙的策略
防火墙策略一般分为两种,一种叫通策略,一种叫堵策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。
我们现在用的比较多个功能有3个:
filter 定义允许或者不允许的,只能做在3个链上:INPUT ,FORWARD ,OUTPUT
nat 定义地址转换的,也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
mangle功能:修改报文原数据,是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。
小扩展:
对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT
对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。
iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。
注意:规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。
表名包括:
raw :高级功能,如:网址过滤。
mangle :数据包修改(QOS),用于实现服务质量。
nat :地址转换,用于网关路由器。
filter :包过滤,用于防火墙规则。
动作包括:
ACCEPT :接收数据包。
DROP :丢弃数据包。
REDIRECT :重定向、映射、透明代理。
SNAT :源地址转换。
DNAT :目标地址转换。
MASQUERADE :IP伪装(NAT),用于ADSL。
LOG :日志记录。
SEMARK : 添加SEMARK标记以供网域内强制访问控制(MAC)
实例
清空当前的所有规则和计数
配置允许ssh端口连接
允许本地回环地址可以正常使用
设置默认的规则
配置白名单
开启相应的服务端口
保存规则到配置文件中
列出已设置的规则
iptables -L [-t 表名] [链名]
四个表名
raw,nat,filter,mangle五个规则链名
INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTINGfilter表包含
INPUT、OUTPUT、FORWARD三个规则链
清除已有规则
删除已添加的规则
将所有iptables以序号标记显示,执行:
比如要删除INPUT里序号为8的规则,执行:
开放指定的端口
屏蔽IP
指定数据包出去的网络接口
只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。
查看已添加的规则
启动网络转发规则
公网210.14.67.7让内网192.168.188.0/24上网
端口映射
本机的 2222 端口映射到内网 虚拟机的22 端口
字符串匹配
比如,我们要过滤所有TCP连接中的字符串test,一旦出现它我们就终止这个连接,我们可以这么做:
阻止Windows蠕虫的攻击
防止SYN洪水攻击
添加SECMARK记录
更多实例
用iptables搭建一套强大的安全防护盾 http://www.imooc.com/learn/389
iptables: linux 下应用层防火墙工具
iptables 5链: 对应 Hook point netfilter: linux 操作系统核心层内部的一个数据包处理模块 Hook point: 数据包在 netfilter 中的挂载点; PRE_ROUTING / INPUT / OUTPUT / FORWARD / POST_ROUTING
iptables & netfilter 
iptables 4表5链 
iptables 
4表
filter: 访问控制 / 规则匹配 nat: 地址转发 mangle / raw
规则
数据访问控制: ACCEPT / DROP / REJECT 数据包改写(nat -> 地址转换): snat / dnat 信息记录: log
使用场景实例
场景一
开放 tcp 10-22/80 端口 开放 icmp 其他未被允许的端口禁止访问
存在的问题: 本机无法访问本机; 本机无法访问其他主机
场景二
ftp: 默认被动模式(服务器产生随机端口告诉客户端, 客户端主动连接这个端口拉取数据) vsftpd: 使 ftp 支持主动模式(客户端产生随机端口通知服务器, 服务器主动连接这个端口发送数据)
场景三
允许外网访问: web http -> 80/tcp; https -> 443/tcp mail smtp -> 25/tcp; smtps -> 465/tcp pop3 -> 110/tcp; pop3s -> 995/tcp imap -> 143/tcp
内部使用: file nfs -> 123/udp samba -> 137/138/139/445/tcp ftp -> 20/21/tcp remote ssh -> 22/tcp sql mysql -> 3306/tcp oracle -> 1521/tcp
场景四
nat 转发
场景五
防CC攻击
这有帮助吗?