企业网站的结构以及内容.,长沙望城区发布最新通告,wordpress怎么启用经典编辑器,厦门网站建设公司哪个好# 1. 链的解释
1.1 PREROUTING
PREROUTING 链是 mangle 和 nat 表中用于修改数据包的报头信息的链。
具体来说#xff0c;PREROUTING 链主要用于处理刚到达本机并在路由转发前的数据包。在该链上添加的规则可以检查数据包的目标地址、端口等信息#xff0c;然后根据实际需…# 1. 链的解释
1.1 PREROUTING
PREROUTING 链是 mangle 和 nat 表中用于修改数据包的报头信息的链。
具体来说PREROUTING 链主要用于处理刚到达本机并在路由转发前的数据包。在该链上添加的规则可以检查数据包的目标地址、端口等信息然后根据实际需求进行处理例如将目标地址修改为本地 IP 地址或者其他网络设备的 IP 地址从而实现端口映射或者 DNATDestination NAT等功能。
PREROUTING 链常常用于以下场景
端口映射通过在 PREROUTING 链上添加规则将数据包中的目标端口转发到本地计算机的指定端口从而实现端口映射的功能。源地址转换通过在 PREROUTING 链上添加规则将数据包中的源 IP 地址替换为其他 IP 地址从而实现匿名访问或者欺骗攻击等功能。DNAT通过在 PREROUTING 链上添加规则将数据包中的目标地址替换为其他 IP 地址从而实现 NAT 转换、负载均衡等功能。
1.2 POSTROUTING
POSTROUTING 链是 mangle、nat 和 raw 表中用于修改数据包的报头信息的链。该链主要用于处理将要离开本机的数据包其作用是对数据包的源 IP 地址进行 NAT 转换或者修改规则的匹配等操作。
一般来说POSTROUTING 链被用于以下场景
SNAT通过在 POSTROUTING 链上添加规则将数据包中的源 IP 地址替换为其他 IP 地址从而实现 NAT 转换将内部 IP 地址转换为公网 IP 地址从而实现外部网络对本地设备的访问。MasqueradeMasquerade 是一种特殊的 SNAT 操作通过将数据包源地址都修改为本机的公网 IP 地址来实现 NAT 转换通常用于连接互联网的本地网络设备如路由器等。连接跟踪POSTROUTING 链上的一些规则可以使连接跟踪模块conntrack记录数据包的状态信息跟踪连接的建立、维护和释放。防火墙策略在 POSTROUTING 链上也可以添加防火墙策略通过设置过滤规则来保护本机或网络设备的安全和隐私。
1.3 INPUT
INPUT 链是 filter 表中用于处理传入数据包的链。该链主要用于过滤本机接收到的数据包控制对本机服务的访问。
具体来说INPUT 链可以用于以下场景
防火墙策略通过在 INPUT 链上添加过滤规则可以限制和过滤不符合安全规范和政策的数据包保护本机或网络设备的安全和隐私。服务访问控制通过在 INPUT 链上添加规则可以限定允许访问本地服务的来源 IP 地址和端口号防止未经授权的访问和攻击。ICMP 控制在 INPUT 链上也可以添加规则控制 ICMP 数据包的传入例如允许某些 ICMP 数据包类型禁止某些 ICMP 数据包类型从而保护本机的网络通信稳定性。连接跟踪对于已经建立连接的数据包可以使用连接跟踪模块在 INPUT 链上记录连接状态并根据实际需求进行处理如允许、拒绝、重定向等。
1.4 OUTPUT
OUTPUT 链是 filter 表中用于处理传出数据包的链。该链主要用于过滤本机发送的数据包控制本机对外部服务的访问。
具体来说OUTPUT 链可以用于以下场景
防火墙策略通过在 OUTPUT 链上添加过滤规则可以限制和过滤不符合安全规范和政策的数据包阻止本机对外部网络的不当操作和请求。服务访问控制通过在 OUTPUT 链上添加规则可以限定允许本机访问的目的地 IP 地址和端口号防止访问未经授权或不安全的服务或设备。NAT 转换在 OUTPUT 链上也可以添加规则实现 SNAT 转换将本机的内网 IP 地址转换为公网 IP 地址从而实现外部网络对本机的访问。连接跟踪对于已经建立连接的数据包可以使用连接跟踪模块在 OUTPUT 链上记录连接状态并根据实际需求进行处理如允许、拒绝、重定向等。
1.5 FORWARD
FORWARD 链是 filter 表中用于处理转发数据包的链。该链主要用于过滤经过本机进行转发的数据包控制外部网络访问内部网络的流量。
具体来说FORWARD 链可以用于以下场景
网络隔离通过在 FORWARD 链上添加规则可以限制和过滤从外部网络到内部网络的数据包实现不同安全级别和应用之间的隔离和保护。NAT 转换在 FORWARD 链上也可以添加规则实现 DNAT 转换将外部网络对公网 IP 地址的请求转换为内网服务的 IP 地址和端口号从而实现访问内部服务。负载均衡在 FORWARD 链上也可以添加规则实现负载均衡将从外部网络访问内部服务的请求分发到多个内部服务器提高服务的可用性和性能。连接跟踪对于已经建立连接的数据包可以使用连接跟踪模块在 FORWARD 链上记录连接状态并根据实际需求进行处理如允许、拒绝、重定向等。
# 2. 表的解释
2.1 raw 表
Iptables 中的 raw 表用于在经过连接跟踪、NAT 和路由表处理之前对数据包进行处理因此 raw 表的优先级最高
在收包时第一关卡链是 PREROUTING第一张表就是 raw 表在发包时第一关卡链是 OUTPUT第一张表也是 raw 表
在下面这张图中可以很清晰的看到raw 表的优先级都是最高的并且由于他的“特定”用途导致 raw 也只会被应用在 PREROUTING 和 OUTPUT 链上。 一旦用户在某个链上使用了 raw 表则处理完 raw 表后将跳过 NAT 表和连接跟踪处理即不再做地址转换和数据包的连接跟踪处理。这可以应用在那些不需要进行 NAT 的情况下以提高性能 [2]。
例如当一台 web 服务器面对大量的访问请求时我们可以使用 raw 表让 80 端口不再让 iptables 做数据包的连接跟踪处理从而提高用户的访问速度。
下面举两个例子来说明 raw 表中的规则是如何提高机器性能的
禁止 TCP SYN Cookie 在 Linux 中允许使用 TCP SYN Cookie 技术来抵御 SYN Flood 攻击。但是在某些情况下这种技术可能会影响系统性能。因此我们可以使用 raw 表来禁止使用 TCP SYN Cookie具体规则如下
iptables -t raw -A PREROUTING -p tcp --syn -j CT --notrack这个规则的作用是将所有的 TCP SYN 数据包转发给 conntrack 模块进行处理同时不做任何连接跟踪进而消除了 TCP SYN Cookie 技术对系统性能的影响。
TCP SYN Cookie 是一种防范 SYN Flood 攻击的技术。在 TCP 三次握手过程中客户端向服务器发送 SYN 数据包服务器收到之后应该回复一个 SYNACK 数据包并进入 SYN_RCVD 状态等待客户端的 ACK 确认。但是如果攻击者向服务器发送大量的 SYN 数据包而不回复 ACK 确认那么服务器就会不断地创建新的半连接队列耗尽资源最终导致系统崩溃。TCP SYN Cookie 技术可以有效地抵御这种攻击。 防范 ICMP 攻击 有些攻击者可能会利用 ICMP 协议对目标主机进行攻击。为了防范这种攻击我们可以使用 raw 表来拦截所有的 ICMP 数据包具体规则如下
iptables -t raw -A PREROUTING -p icmp -j DROP这个规则的作用是将所有的 ICMP 数据包直接拒绝从而有效地防止了 ICMP 攻击。
通过使用 raw 表可以避免数据包经过 NAT 表、连接跟踪和路由表处理前的额外处理进而提高系统的性能。例如在上述两个例子中我们可以直接将数据包传递给底层协议栈而不需要进行 NAT 或连接跟踪等处理从而提高了系统的处理速度和吞吐量。
2.2 filter
filter 表是 iptables 中的默认表当你不使用 -t 来指定具体的表时就会默认使用 filter 表。
filter 主要用于过滤数据包控制网络流量。
Filter 表中有三种链chains
INPUT 链处理输入到本地计算机的数据包。例如当你在本地计算机上运行 web 服务器时这个服务器就会听取特定的端口以接收来自客户端的 http 请求这些请求便会经过 INPUT 链处理。可以在 INPUT 链中设置规则或过滤器来决定是否让这些请求通过。OUTPUT 链处理从本地计算机出去的数据包。例如当你从本地计算机向远程服务器发出 http 请求时这个请求就会通过 OUTPUT 链处理。同样可以在 OUTPUT 链中设置规则或过滤器来决定是否让这些请求通过。FORWARD 链处理通过本地计算机的数据包例如路由器、防火墙等设备它们需要转发来自一个界面interface的数据包到另一个界面。
在 Filter 表中可以根据源 IP 地址、目标 IP 地址、协议类型、端口号等条件来设置规则或过滤器以决定数据包是否允许通过。
2.3 nat
iptables 中的 NATNetwork Address Translation表用于实现网络地址转换主要作用是修改数据包的源地址和目的地址从而实现网络流量的调整和控制。
NAT 表包括三个链chains
PREROUTING 链对进入本地计算机之前的数据包进行处理例如将外部访问本地服务器的请求数据包转发到正确的内部 IP。POSTROUTING 链对离开本地计算机之后的数据包进行处理例如将本地计算机发出的请求数据包进行源地址替换。OUTPUT 链对本地计算机自身发出的数据包进行处理例如重新定义目标地址和端口以实现数据包的转发和映射。
NAT 表常用的功能有
IP 地址转换可以用 NAT 将一个公网 IP 地址映射到多个内网 IP 地址这将有助于实现有效的地址分配。同样也可以将局域网内的私网 IP 地址转换成公网 IP 地址这样就能够在公网上访问到这些内网资源。端口映射可以将公网 IP 地址的某个端口映射到内网 IP 地址的某个端口这样就能在公网上访问到内网的服务了。比如我们可以把本地的 Web 服务器内网 IP 为 192.168.1.100监听端口为 80通过 NAT 映射到公网 IP 的 8080 端口上这样就可以通过访问公网 IP 的 8080 端口来访问内网的 Web 服务器了。
总的来说NAT 表是 iptables 中非常重要的一部分通过配置 NAT 规则可以实现网络地址转换和端口映射等功能从而方便地管理和控制网络流量提高网络的安全性和性能。
2.4 mangle
iptables 中的 mangle 表用于指定如何处理数据包主要作用是对数据包的报头进行修改、标记或重定向。mangle 表具有五个内建链chains分别是
PREROUTING 链处理数据包到达网卡之前的操作。POSTROUTING 链处理数据包从网卡出去后的操作。INPUT 链处理数据包到达本地计算机之后的操作。OUTPUT 链处理数据包离开本地计算机之前的操作。FORWARD 链处理数据包被转发到其他主机上的操作。
mangle 表的主要作用如下
修改数据包的 TOS 字段通过修改 TOSType of Service字段可以实现 QoSQuality of Service服务即为不同的网络流量设置优先级或带宽限制等。标记数据包通过标记数据包可以根据其特性进行分类和处理例如将特定端口的数据包标记为 VoIP 流量并对其进行特殊处理以保证其质量和稳定性。重定向数据包通过重定向数据包可以将流量引导到不同的路径上从而实现负载均衡、访问控制等功能。
下面给一些 mangle 的具体规则
将特定 IP 地址的数据包标记为高优先级
iptables -t mangle -A PREROUTING -s 192.168.1.100/32 -j MARK --set-mark 10限制特定端口的上传带宽
iptables -t mangle -A POSTROUTING -p tcp --sport 80 -j MARK --set-mark 30
iptables -t mangle -A POSTROUTING -m mark --mark 30 -j CLASSIFY --set-class 1:10
iptables -t mangle -A POSTROUTING -m mark --mark 0 -j CLASSIFY --set-class 1:20
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbps ceil 10mbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbps ceil 10mbps
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 5mbps ceil 10mbps将特定 IP 的 TCP 数据包延迟 100ms
iptables -t mangle -A OUTPUT -p tcp -s 192.168.1.100/32 -j DELAY --delay 100ms设置特定端口的 TOS 字段为最高优先级
iptables -t mangle -A OUTPUT -p udp --dport 5000 -j TOS --set-tos Minimize-Delay这些规则只是示例实际应用中需要根据具体需求进行调整。例如第二个规则中的 Class-Based queuingCBQ算法可以替换为其他算法如 Hierarchical Token Bucket (HTB) 算法、Stochastic Fair Queuing (SFQ) 算法等。
# 3. 命令速查
3.1 查询命令
查询包含如下内容
查询规则使用 -L 表示列出规格查询表使用 -t 查询指定表查询链如果有需要的话直接在最后加链名即可没有指定则查询所有链
# 不加 -t 表名默认是 filter
iptables -t 表名 -L [链名]另外还有几个附加参数
显示详细信息使用 -v 即 verbosr来显示详细的信息比如 计数器计数器显示为精确值使用 -x会显示链上包计数器的精确值不加 -x 显示 322K bytes加了后显示 334017 bytes不解析 IP 地址使用 -n表示不解析 IP 地址会加快速度显示规则序号使用 --line-numbers 或者 --line 来显示规则的序号在删除或修改规则时有用。
要注意的是多个短选项是可以合并的比如下面两条命令是等价的
iptables -n -v -L
iptables -nvL但长选项是不可以与短选项合并的
iptables --line -nvL3.2 增加命令
增加一条命令有两种方式
插入插入表示规则插入在链的指定位置使用的是 -I 参数Insert不指定的话默认是 1追加追加表示规则插入在链的最后位置使用的是 -A 参数Append
这里是插入的示例
# 插入在第 1 条
iptables -I INPUT -s 192.168.1.146 -j ACCEPT# 插入在第 2 条
iptables -I INPUT 2 -s 192.168.1.146 -j ACCEPT这里是追加的示例
iptables -A INPUT -s 192.168.1.146 -j ACCEPT3.3 删除命令
清除表中的规则
在执行此动作前请明确自己在干什么若有需要请注意保存规则 使用 -F 来清空指定表和链的规则
如果该链的默认规则是 ACCEPT那清空后所有进入本机的报文都会放行。如果该链的默认规则是 DROP那清空后所有进入本机的报文都会拒绝。
iptables -t filter -F INPUT删除指定规则
删除指定规则有两种方法
根据规则的编号去删除根据规则的匹配条件与动作去删除
而删除的参数是 -D 下面分别举个例子
首先是根据规则编号删除
# 先使用 --line 查得规则编号
iptables -t 表名 --line -nvL# 再指定编号去删除注意要指定链
iptables -t [表名] -D INPUT 编号然后是匹配规则删除
# 先查询具体规则的命令你也可以使用 iptables -nvL但是命令要自己写比较麻烦
iptables-save# 然后删除注意 -A 去除
iptables -D [规则]3.4 修改命令
修改规则
修改规则也有两种方法
在原来规则上修改删除后再加新规则
第一种在原来的规则上修改
使用 -R 参数来指定要修改哪条链上的第几条规则
命令语法iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作
示例iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT第二种删除后再加新规则
删除参考前面删除的教程添加参考前面删除的教程
修改策略
修改指定表的指定链的默认策略默认动作可以使用如下命令。
命令语法iptables -t 表名 -P 链名 动作
示例iptables -t filter -P FORWARD ACCEPT上例表示将filter表中FORWARD链的默认策略修改为ACCEPT
# 4. 一级匹配条件
4.1 匹配源地址
# 匹配多个 IP
iptables -t filter -I INPUT -s 192.168.1.111,192.168.1.118 -j DROP# 匹配网段
iptables -t filter -I INPUT -s 192.168.1.0/24 -j ACCEPT#匹配取反
iptables -t filter -I INPUT ! -s 192.168.1.0/24 -j ACCEPT4.2 匹配目标地址
# 匹配多个 IP
iptables -t filter -I OUTPUT -d 192.168.1.111,192.168.1.118 -j DROP# 匹配网段
iptables -t filter -I INPUT -d 192.168.1.0/24 -j ACCEPT#匹配取反
iptables -t filter -I INPUT ! -d 192.168.1.0/24 -j ACCEPT4.3 匹配协议
可以匹配的协议类型tcp、udp、udplite、icmp、esp、ah、sctp等centos7中还支持icmpv6、mh
#示例如下
iptables -t filter -I INPUT -p tcp -s 192.168.1.146 -j ACCEPT
iptables -t filter -I INPUT ! -p udp -s 192.168.1.146 -j ACCEPT4.4 匹配网卡
匹配流入网卡在OUTPUT链与POSTROUTING链中不能使用此选项。
#示例如下
iptables -t filter -I INPUT -p icmp -i eth4 -j DROPiptables -t filter -I INPUT -p icmp ! -i eth4 -j DROP匹配流出网卡在INPUT链与PREROUTING链中不能使用此选项。
#示例如下
iptables -t filter -I OUTPUT -p icmp -o eth4 -j DROPiptables -t filter -I OUTPUT -p icmp ! -o eth4 -j DROP# 5. 扩展匹配条件
扩展匹配需要模块支持常见的扩展模块有
tcpudp
5.1 匹配连续 ip
前面一级匹配条件中-s 能匹配 ip能匹配 ip 段能匹配离散 ip但不能匹配随意的连续 ip。
若想匹配随意的连续 ip可以使用 iprange 模块
iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP5.2 匹配端口
要使用扩展端口必须先使用 -m 参数指定对应模块如果你指定了协议则默认会使用与协议同名的模块。
例如下面两条命令等价
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp --sport 22 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --sport 22 -j REJECT在与协议同名的模块中都支持对端口进行匹配包括
源端口使用 --sport目标端口使用 --dport
并且这些端口可以是一个连续的范围以下例子中 dport 和 sport 通用只举一个例子
#示例如下
iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp --sport 22 -j REJECT# 连续端口
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 22:25 -j REJECT# 匹配 0-22 和 80-65535 的端口
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport :22 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 80: -j REJECT# 端口匹配取反
iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp ! --sport 22 -j ACCEPT如果要匹配不连续离散的端口则需要用到 multiport 模块但最多也只能指定15个端口
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dport 22,80 -j REJECT5.3 匹配 mac
mac 模块可以指明源MAC地址,适用于PREROUTING, FORWARDINPUT chains
iptables -A INPUT -s 172.16.0.100 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT
iptables -A INPUT -s 172.16.0.100 -j REJECT5.4 匹配报文数据
使用 string 模块可以对报文中的应用层数据做字符串模式匹配检测。
示例如下
iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string google -j REJECT对应的参数解释
--algo字符串匹配检测算法可选值有bm Boyer-Moore与 kmp Knuth-Pratt-Morris--from开始偏移--to结束偏移[!] --string匹配的字符串是否取反[!]--hex-string匹配字符串模式16进制格式是否取反
--algo {bm|kmp} 字符串匹配检测算法bmBoyer-Moorekmp
--from offset 开始偏移
--to offset 结束偏移
[!] --string pattern 要检测的字符串模式
[!] --hex-string pattern要检测字符串模式16进制格式5.5 匹配收发速率
limit 模块有两个参数
–limit-burst类比”令牌桶”算法此选项用于指定令牌桶中令牌的最大数量
–limit类比”令牌桶”算法此选项用于指定令牌桶中生成新令牌的频率可用时间单位有second、minute 、hour、day。
iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT
iptables -t filter -A INPUT -p icmp -j REJECT5.6 匹配并发数
connlimit 模块是 iptables 中的一个扩展模块用于控制连接数限制每个源 IP 地址的并发连接数。
使用 connlimit 模块可以有效地保护服务器免受 DDoS分布式拒绝服务攻击防止某个 IP 地址通过大量并发连接造成服务器负载过高影响正常的网络服务。
connlimit 模块的工作原理是通过检查 iptables 所匹配到的连接数来实现连接限制。用户可以设置多种参数如 --connlimit-above 用于限制允许的最大连接数--connlimit-mask 用于指定判断连接数的掩码--connlimit-upto 用于限制每个 IP 地址的允许最大连接数。
下面是一个示例规则用于限制每个 IP 地址在 TCP 端口 80 上的最大连接数为 10
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP上述规则表示如果某个 IP 地址建立的连接数超过了 10则将该 IP 地址的所有连接都丢弃。
除了限制连接数之外还可以在特定情况下排除某些IP地址对于连接数控制的限制例如允许某些代理服务器或特定的IP地址建立更多的连接。具体操作可以使用感叹号 ! 对特定的IP地址进行标记以进行放开例如
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 ! -s 192.168.1.1 -j DROP这条规则允许IP地址为192.168.1.1的主机建立更多的连接而其他主机则被限制连接数不超过10。
5.7 匹配状态
state 模块是iptables中的一个扩展模块用于匹配TCP连接的状态。
TCP连接有多种状态包括ESTABLISHED、NEW、RELATED、INVALID等。ESTABLISHED表示连接已经建立可以进行正常的数据传输NEW表示新的连接请求即SYN标志位被设置RELATED表示与已经建立的连接相关的连接例如FTP传输和DNS查询使用的UDP连接INVALID表示无效的连接可能由于网络原因等导致的连接错误。
state模块可以帮助iptables根据连接状态进行过滤从而有效地保护服务器免受攻击。
下面是一些常见的用法
允许所有以太网帧包括ARP请求进入本机
iptables -A INPUT -i eth0 -p all -m state --state RELATED,ESTABLISHED -j ACCEPT允许SSH流量进入本机
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 允许PING流量通过本机
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT允许HTTP/HTTPS流量进入本机
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT# 6. 设定动作
使用 -j 即 jump来指定动作动作可以是内置动作也可以是自定义动作
内置动作如 ACCEPTDROPREJECT自定义动作参见后面自定义链
6.1 ACCEPT
常规命令如下
iptables -I INPUT -s 192.168.1.146 -j ACCEPT6.2 REJECT
常规命令如下
iptables -I INPUT -s 192.168.1.146 -j REJECT还可以用 –reject-with 来设置提示信息可选值有
icmp-net-unreachableicmp-host-unreachableicmp-port-unreachable,icmp-proto-unreachableicmp-net-prohibitedicmp-host-pro-hibitedicmp-admin-prohibited
当不设置任何值时默认值为icmp-port-unreachable。
iptables -I INPUT -s 192.168.1.146 -j REJECT –reject-with icmp-host-unreachable6.3 DROP
常规命令如下
iptables -I INPUT -s 192.168.1.146 -j DROP6.4 LOG
LOG 可以用于记录匹配报文的记录为了避免过多匹配的规则应当越精准越好。
iptables -I INPUT -p tcp --dport 22 -J LOG日志默认会记录在 /var/log/message 中当然我们也可以将相关信息记录在指定的文件中以防止iptables的相关信息与其他日志信息相混淆修改/etc/rsyslog.conf文件或者/etc/syslog.conf在rsyslog配置文件中添加如下配置即可。
#vim /etc/rsyslog.confkern.warning /var/log/iptables.log加入上述配置后报文的相关信息将会被记录到/var/log/iptables.log文件中。
完成上述配置后重启rsyslog服务或者syslogd服务重启后配置即可生效匹配到的报文的相关信息将被记录到指定的文件中。
service rsyslog restartLOG动作也有自己的选项常用选项如下先列出概念后面有示例
–log-level选项可以指定记录日志的日志级别可用级别有emergalertcriterrorwarningnoticeinfodebug。–log-prefix选项可以给记录到的相关信息添加”标签”之类的信息以便区分各种记录到的报文信息方便在分析时进行过滤。
注–log-prefix对应的值不能超过29个字符。
6.5 SNAT
注意事项要实现两个不同段网络的互通理论上只要开启机器上的路由转发功能即可实现前提你的路由规则要规划好详情见 https://www.zsythink.net/archives/1663。之所以我们常用 SNAT 和 DNAT都是为了实现隐藏 IP 的目的。 另所有涉及路由转发的规则都要事先执行命令echo 1 /proc/sys/net/ipv4/ip_forward开启路由转发 假设网络内部有10台主机它们有各自的IP地址当网络内部的主机与其他网络中的主机通讯时则会暴露自己的IP地址如果我们想要隐藏这些主机的IP地址该怎么办呢
可以这么办当网络内部的主机向外部发送报文时当报文经过防火墙或路由器时将报文的源IP修改为防火墙或者路由器的IP地址显示的源IP地址则是路由器或者防火墙的而不是那10台主机的IP地址。
通过这种方式可以实现多台内网机器都通过同一台网关机器与公网通信。
那么此时就会有一个问题回程的报文是如何回到内网机器的呢
原来在防火墙或路由器里有维护着一张 NAT 表
在出网时 SNAT 后会在 NAT 表中记录下内网源 IP 、PORT和路由器的 IP 、PORT对应关系对于外网机器来说只能看到路由器的 IP 、PORT。在回程时根据回程包的 Dest PORT 在 NAT 表中查找对应的内网 IP 和 PORT修改报文的目的 IP 和 PORT 为内网机器的 IP 及 PORT
因此一个 SNAT规则虽然我们只写了 SNAT但回程的 DNAT 其实是自动帮我们做了。
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 公网IP6.6 DNAT
在上面学习 SNAT 的过程中其实也涉及了 DNAT 只是由于前半段是使用的 SNAT 因此前面称之为 SNAT。
同样的若前半段使用的是 DNAT而后半段使用 SNAT则这个过程称之为 DNAT。
SNAT 和 DNAT 在应用场景上有什么区别
SNAT可以让内网的机器访问公网DNAT可以让公网的机器访问内网
DNAT 的规则如下
iptables -t nat -I PREROUTING -d 公网IP -p tcp --dport 公网端口 -j DNAT --to-destination 私网IP:端口号当我们做 SNAT 时 回程的DNAT会自动帮我们处理但做 DNAT 时回程的 SNAT 却需要 我们自己处理
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 公网IP6.7 REDIRECT
以上的 DNAT 是本机转他机ip 发生变化port 也发生变化也可以不变化但要指定
其实还有另外一种情况单纯的本机的上端口转发使用的是 REDIRECT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080配置完成上述规则后其他机器访问本机的80端口时会被映射到8080端口。
6.8 MASQUERADE
前面在配置 SNAT 时我们都需要明确指定本地的公网 IP 是多少
在大批量的机器部署过程中会造成一些不方便如果规则里可以自动获取网卡 IP那就省事多了。
MASQUERADE 就是用来做这事情的只要指定 -o 网卡MASQUERADE 就会自动获取网卡上的 IP
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE# 7. 自定义链
当一条链中的规则数量非常多时有针对 httpd 也有针对 sshd 的这样我们维护 iptables 规则就非常痛苦。
而自定义链就是用 iptables 链的方式来实现 “规则” 分组的功能。
7.1 新键自定义链
使用如下命令来新建自定义链
iptables -t filter -N IN_WEB而此时还没有其他链引用 IN_WEB 因此会显示 0 references
Chain IN_WEB (0 references)7.2 创建规则
在自定义链中创建规则与内置链中一样
iptables -t filter -I IN_WEB -s 192.168.1.139 -j REJECT此时虽然我们创建了规则但由于 IN_WEB 还没有人引用虽然该条规则是不会匹配到规则的
7.3 引用自定义链
引用自定义链就是把该链当成和 ACCEPT、REJECT 一样的动作就行。
意思是匹配上的报文全部发往这些链中。
iptables -I input -p tcp --dport 80 -j IN_WEB7.4 修改自定义链
若想把 IN_WEB 的链名改成 WEB 可以使用 -E 参数
iptables -E IN_WEB WEB7.5 删除自定义链
若想删除自定义链可以使用 -X 命令 iptables -X WEB但要注意若该链还在被引用者则不能删除需要你事先清除引用即删除引用该链的规则
iptables -D INPUT 1# 8. 总结一下
iptables 是 Linux防火墙系统的重要组成部分能够实现对网络数据包进出设备及转发的控制应用在服务器、路由器等网络设备上可以保障网络数据的安全与可靠性。
对于每个日常需要接触到 Linux 的开发人或运维来说系统学习iptables是有必要的
1、实现网络安全iptables提供了一系列的过滤规则可以限制外部主机对本地主机的访问以及控制本地主机对外部主机的访问。通过配置iptables规则可以过滤恶意流量避免黑客攻击、病毒入侵等安全问题。
2、提高网络性能通过使用iptables的QoS(Quality of Service)功能可以对流量进行优化使得关键业务的网络带宽得到更好的保障从而提高网络性能和响应速度。
3、简化网络管理通过iptables可以设置简单明了的规则来实现对数据包的过滤和转发从而达到灵活控制的效果。可以方便管理减少管理员的工作负担。
4、符合行业标准iptables是目前Linux平台网络安全的主流工具学习iptables有助于符合相关行业标准和规范例如PCI DSSPayment Card Industry Data Security Standard等。