基本上发行版都是自带的,轻量级,不需要额外下载

Fail2Ban也可以但是需要额外下载

iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set

参数    作用
-I INPUT    将规则插入到 INPUT 链的最前面
-p tcp --dport 80    匹配目标端口为 80 的 TCP 流量
-m state --state NEW    仅匹配 新建连接(如 TCP 的 SYN 包)
-m recent --set    将来源 IP 记录到 recent 模块的默认列表(/proc/net/xt_recent/DEFAULT)

iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 100 -j DROP

参数    作用
-m recent --update --seconds 60 --hitcount 100    检查 IP 在 60 秒内是否发起超过 100 次新连接
-j DROP    若超限,直接丢弃数据包

效果图,到指定次数自动丢弃数据包,端口不通,到达指定时间自动恢复

经过测试 --hitcount 大于20 会报错

解决办法 

echo options xt_recent ip_pkt_list_tot=200 > /etc/modprobe.d/xt.conf

modprobe -r xt_recent && modprobe xt_recent 重新加载

查看 lsmod |grep xt  ;cat /sys/module/xt_recent/parameters/ip_pkt_list_tot 对应 xt.conf

额外补充

若其他规则也使用 recent 默认列表,可能导致误判,可以通过--name 指定名称分类

iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set --name HTTP_CC

iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 200 --name HTTP_CC -j DROP

则 /proc/net/xt_recent/HTTP_CC 叫 HTTP_CC

额外更新

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1

iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.2

iptables -A FORWARD -j ACCEPT && net.ipv4.ip_forward = 1

MASQUERADE 只能 POSTROUTING

DNAT 只能 PREROUTING/OUTPUT

SNAT 只能 INPUT/POSTROUTING

选 项 功 能

-A 添加防火墙规则

-D 删除防火墙规则

-I 插入防火墙规则

-F 清空防火墙规则

-L 列出添加防火墙规则

-R 替换防火墙规则

-Z 清空防火墙数据表统计信息

-P 设置链默认规则

iptables 命令常用匹配参数及各自的功能如表 3 所示。

参 数 功 能

[!]-p 匹配协议,! 表示取反

[!]-s 匹配源地址

[!]-d 匹配目标地址

[!]-i 匹配入站网卡接口 INPUT/POSTROUTING

[!]-o 匹配出站网卡接口 PREROUTING/OUTPUT

[!]--sport 匹配源端口

[!]--dport 匹配目标端口

[!]--src-range 匹配源地址范围

[!]--dst-range 匹配目标地址范围

[!]--limit 四配数据表速率

[!]--mac-source 匹配源MAC地址

[!]--sports 匹配源端口

[!]--dports 匹配目标端口

[!]--stste 匹配状态(INVALID、ESTABLISHED、NEW、RELATED)

[!]--string 匹配应用层字串

iptables 命令触发动作及各自的功能如表 4 所示。

触发动作 功 能

ACCEPT 允许数据包通过

DROP 丢弃数据包

REJECT 拒绝数据包通过

LOG 将数据包信息记录 syslog 曰志

DNAT 目标地址转换

SNAT 源地址转换

MASQUERADE 地址欺骗

REDIRECT 重定向

第一种情况:入站数据流向

从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

第二冲情况:转发数据流向

来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。

第三种情况:出站数据流向

防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

只要是来自于172.16.0.0/16网段的都允许访问我本机的172.16.100.1的SSHD服务

定义进来的: iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -j ACCEPT

定义出去的: iptables -t filter -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT

  • iptables -A INPUT -d 192.168.1.100:
    • 这个命令将一条规则添加到 INPUT 链,表示它针对的是进入本机的流量(即发往本机的流量)。
    • -d 192.168.1.100 指定目标地址为 192.168.1.100。这条规则会匹配所有发送到 192.168.1.100 的流量。
  • iptables -A OUTPUT -d 192.168.1.100:
    • 这个命令将一条规则添加到 OUTPUT 链,表示它针对的是离开本机的流量(即从本机发出的流量)。
    • -d 192.168.1.100 指定目标地址为 192.168.1.100。这条规则会匹配所有从本机发往 192.168.1.100 的流量

更多推荐