标签:ring 两种 开发人员 filter 问题 过程 ip地址 ash let
因而,可以定制防火墙配置来满足任何特定需求和任何安全性级别需求。 这就是 netfilter/iptables 系统的用武之处。
ACCEPT
允许该信息包通过。还可以使用目标 DROP
或 REJECT
来阻塞并杀死信息包。对于可对信息包执行的其它操作,还有许多其它目标。INPUT
链中。处理出站信息包的规则被添加到 OUTPUT
链中。处理正在转发的信息包的规则被添加到 FORWARD
链中。这三个链是基本信息包过滤表中内置的缺省主链。 另外,还有其它许多可用的链的类型(如 PREROUTING
和 POSTROUTING
), 以及提供用户定义的链。每个链都可以有一个策略, 它定义“缺省目标”,也就是要执行的缺省操作,当信息包与链中的任何规则都不匹配时,执行此操作。INPUT
链。如果信息包源自系统内部或系统所连接的内部网上的其它源,并且此信息包要前往另一个外部系统, 那么信息包被传递到 OUTPUT
链。类似的,源自外部系统并前往外部系统的信息包被传递到 FORWARD
链。DROP
该信息包。netfilter/iptables
系统提供的特殊命令 iptables
,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加/除去/编辑规则的命令的一般语法如下:iptables [-t table] command [match] [target]
[-t table]
选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。 有三种可用的表选项: filter
、 nat
和 mangle
。该选项不是必需的,如果未指定, 则 filter
用作缺省表。filter
表用于一般的信息包过滤,它包含 INPUT
、 OUTPUT
和 FORWARD
链。nat
表用于要转发的信息包,它包含 PREROUTING
、 OUTPUT
和 POSTROUTING
链。 如果信息包及其头内进行了任何更改,则使用 mangle
表。 该表包含一些规则来标记用于高级路由的信息包,该表包含 PREROUTING
和 OUTPUT
链。PREROUTING
链由指定信息包一到达防火墙就改变它们的规则所组成,而 POSTROUTING
链由指定正当信息包打算离开防火墙时改变它们的规则所组成。command
部分是 iptables
命令的最重要部分。 它告诉 iptables
命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。 以下是最常用的一些命令:-A
或 --append
: 该命令将一条规则附加到链的末尾。iptables -A INPUT -s 205.168.0.1 -j ACCEPT
-D
或 --delete
: 通过用 -D
指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则。 下面的示例显示了这两种方法。iptables -D INPUT --dport 80 -j DROP
iptables -D OUTPUT 3
INPUT
链删除规则,它指定 DROP
前往端口 80
的信息包。第二条命令只是从 OUTPUT
链删除编号为 3
的规则。-P
或 --policy
: 该命令设置链的缺省目标,即策略。 所有与链中任何规则都不匹配的信息包都将被强制使用此链的策略。iptables -P INPUT DROP
INPUT
链的缺省目标指定为 DROP
。这意味着,将丢弃所有与 INPUT
链中任何规则都不匹配的信息包。-N
或 --new-chain
: 用命令中所指定的名称创建一个新链。iptables -N allowed-chain
-F
或 --flush
: 如果指定链名,该命令删除链中的所有规则, 如果未指定链名,该命令删除所有链中的所有规则。此参数用于快速清除。iptables -F FORWARD
iptables -F
-X
或 --delete-chain
: 如果指定链名,该命令删除这条自定义的链, 如果未指定链名,该命令删除所有自定义的链。此参数用于快速清除所有自定义的链,当然,默认的链无法删除。iptables -X MY_OWN_INPUT
iptables -X
-L
或 --list
: 列出指定链中的所有规则。iptables -L allowed-chain
iptables
命令的可选 match
部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。 匹配分为两大类: 通用匹配和特定于协议的匹配。这里,我将研究可用于采用任何协议的信息包的通用匹配。 下面是一些重要的且常用的通用匹配及其示例和说明:-p
或 --protocol
: 该通用协议匹配用于检查某些特定协议。 协议示例有 TCP
、 UDP
、 ICMP
、用逗号分隔的任何这三种协议的组合列表以及 ALL
(用于所有协议)。 ALL
是缺省匹配。可以使用 !
符号,它表示不与该项匹配。iptables -A INPUT -p TCP, UDP
iptables -A INPUT -p ! ICMP
TCP
和 UDP
信息包都将与该规则匹配。 通过指定 ! ICMP
,我们打算允许所有其它协议(在这种情况下是 TCP
和 UDP
), 而将 ICMP
排除在外。-s
或 --source
: 该源匹配用于根据信息包的源 IP 地址来与它们匹配。该匹配还允许对某一范围内的 IP 地址进行匹配,可以使用 !
符号,表示不与该项匹配。缺省源匹配与所有 IP
地址匹配。iptables -A OUTPUT -s 192.168.1.1
iptables -A OUTPUT -s 192.168.0.0/24
iptables -A OUTPUT -s ! 203.16.1.89
192.168.0.0
到 192.168.0.24
的 IP 地址范围的信息包匹配。第三条命令指定该规则将与 除来自源地址 203.16.1.89
外的任何信息包匹配。-d
或 --destination
: 该目的地匹配用于根据信息包的目的地 IP 地址来与它们匹配。 该匹配还允许对某一范围内 IP 地址进行匹配,可以使用 !
符号,表示不与该项匹配。iptables -A INPUT -d 192.168.1.1
iptables -A INPUT -d 192.168.0.0/24
iptables -A OUTPUT -d ! 203.16.1.89
ACCEPT
: 当信息包与具有 ACCEPT
目标的规则完全匹配时, 会被接受(允许它前往目的地),并且它将停止遍历链(虽然该信息包可能遍历另一个表中的其它链,并且有可能在那里被丢弃)。 该目标被指定为 -j ACCEPT
。DROP
: 当信息包与具有 DROP
目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。 该目标被指定为 -j DROP
。REJECT
: 该目标的工作方式与 DROP
目标相同,但它比 DROP
好。和 DROP
不同, REJECT
不会在服务器和客户机上留下死套接字。 另外, REJECT
将错误消息发回给信息包的发送方。该目标被指定为 -j REJECT
。iptables -A FORWARD -p TCP --dport 22 -j REJECT
RETURN
: 在规则中设置的 RETURN
目标让与该规则匹配的信息包停止遍历包含该规则的链。 如果链是如 INPUT
之类的主链,则使用该链的缺省策略处理信息包。 它被指定为 -jump RETURN
。示例:iptables -A FORWARD -d 203.16.1.89 -jump RETURN
LOG
、 REDIRECT
、 MARK
、 MIRROR
和 MASQUERADE
等。iptables-save
命令来做到这一点:iptables-save > iptables-script
iptables-script
中。无论何时再次引导系统, 都可以使用 iptables-restore
命令将规则集从该脚本文件恢复到信息包过滤表,如下所示:iptables-restore iptables-script
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
状态: 正在连接 10.128.0.1:21...
状态: 连接建立,等待欢迎消息...
状态: 不安全的服务器,不支持 FTP over TLS。
状态: 服务器不支持非 ASCII 字符。
状态: 已登录
状态: 开始上传 /Users/xiaolulwr/Documents/CAUC-Tec-Markdown/Linux/深入理解iptables防火墙.md
状态: 文件传输成功,传输了 16,532 字节 (用时1 秒)
状态: 读取“/root”的目录列表...
状态: 计算服务器时差...
状态: 列出“/root”的目录成功
状态: 正在连接 10.128.0.1:21...
状态: 连接建立,等待欢迎消息...
状态: 不安全的服务器,不支持 FTP over TLS。
状态: 服务器不支持非 ASCII 字符。
状态: 已登录
状态: 读取目录列表...
命令: PWD
响应: 257 "/root"
命令: TYPE I
响应: 200 Switching to Binary mode.
命令: PASV
响应: 227 Entering Passive Mode (10,128,0,1,230,163)
命令: LIST
错误: 目录列表被用户终止
PASV
尝试切换到被动模式之后,切换是可以成功的,但是切换之后再进行操作就无法成功了,原因也很好理解,因为除了关于20和21端口之外的报文都被DROP了。iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
上面规则的意思是,在iptables的INPUT
和OUTPUT
链上,允许ESTABLISHED
和RELATED
状态的TCP
报文,那么何为连接状态呢?下面介绍四种连接的状态:
ESTABLISHED
:第一个成功穿越防火墙的报文之后所有的报文;NEW
:一个连接的第一个报文,例如TCP连接中的SYN报文;RELATED
:伴随连接的报文,即某个已经处于ESTABLISHED
的连接所产生的报文,这些报文不属于第一条连接,但是的确是由第一条连接产生的;INVALID
:无法判断状态的报文。状态: 正在连接 10.128.0.1:21...
状态: 连接建立,等待欢迎消息...
状态: 不安全的服务器,不支持 FTP over TLS。
状态: 服务器不支持非 ASCII 字符。
状态: 已登录
状态: 开始上传 /Users/xiaolulwr/Documents/CAUC-Personal/个人博客/ssl.txt
状态: 文件传输成功,传输了 3,550 字节 (用时1 秒)
状态: 读取“/root”的目录列表...
状态: 列出“/root”的目录成功
状态: 开始下载 /root/ssl.txt
状态: 文件传输成功,传输了 3,550 字节 (用时1 秒)
状态: 已从服务器断开
PREROUTING
和 POSTROUTING
链,在这两条链上配置规则可以实现NAT功能。在配置NAT之前,首先回顾一下NAT的两种形式:
172.20.10.0
网络仍然是局域网,只是模拟了广域网而已):主机(作为广域网服务器)
接口名称:wlan
IP地址:172.20.10.4
子网掩码:255.255.255.240
默认网关:172.20.10.1
虚拟机A(作为NAT路由器)
接口名称:ens39(广域网接口)
IP地址:172.20.10.3
子网掩码:255.255.255.240
默认网关:172.20.10.1
接口名称:ens38(局域网接口)
IP地址:192.168.1.1
子网掩码:255.255.255.0
配置:
ifconfig ens38 192.168.1.1 netmask 255.255.255.0
虚拟机B(作为局域网主机)
接口名称:eth1
IP地址:192.168.1.100
子网掩码:255.255.255.0
默认网关:192.168.1.1
配置:
ifconfig eth1 192.168.1.100 netmask 255.255.255.0
route add default gw 192.168.1.1
/etc/sysctl.conf
文件vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
# 适用于广域网为固定IP地址的情况,本例是这种情况
iptables -t nat -A POSTROUTING -o ens38 -s 192.168.1.0/24 -j SNAT --to-source 172.20.10.3
# 适用于广域网为动态分配IP地址的情况,典型例子是PPPoE
iptables -t nat -A POSTROUTING –o ens38 –s 192.168.1.0/24 –j MASQUERADE
ens38
接口上的192.168.1.0/24
网络上的报文的源IP地址,转换为广域网地址172.20.10.3
(或者通过PPPoE得到的动态广域网地址)并发送出去。这样一来,在局域网中的虚拟机2就可以访问广域网上的的资源了。标签:ring 两种 开发人员 filter 问题 过程 ip地址 ash let
原文地址:https://www.cnblogs.com/fanweisheng/p/11183327.html