迄今的工作

迄今的工作

我在另一篇文章中发现了一个问题,它很接近我所寻找的答案。简而言之,我希望能够设置一条自动ipset超时的规则,但我想白名单特定的 IP 和范围,并阻止其他所有内容(在所有端口上)。


原始代码:禁止 1.1.1.2 400 秒。

ipset create temp_hosts hash:ip timeout 0
iptables -I INPUT 1 -m set -j DROP  --match-set temp_hosts src
iptables -I FORWARD 1 -m set -j DROP  --match-set temp_hosts src
ipset add temp_hosts 1.1.1.2 timeout 400

我想将其更改为白名单只是 192.168.2.123192.168.1.0/255.255.255.03600 秒(一小时),并禁止其他所有人。我该如何修改这个脚本来实现这一点?

此外,我该如何修改它以允许与 不同的端口192.168.2.123范围192.168.1.0/255.255.255.0

迄今的工作

我尝试过这个,它暂时有效:

sudo ipset create temp_hosts hash:ip timeout 3600
sudo iptables -I INPUT 1   -m set -j ACCEPT --match-set temp_hosts src
sudo iptables -I FORWARD 1 -m set -j ACCEPT --match-set temp_hosts src
sudo iptables -A INPUT     -m set ! --match-set temp_hosts src -j DROP

然而,当它完成时,每个人被无限期禁止,直到我重置盒子。

谢谢。


编辑

这是提议/建议的变更吗?

1|  sudo ipset create temp_hosts hash:ip timeout 3600
2|  sudo iptables -I INPUT 2   -m set -j ACCEPT --match-set temp_hosts src
3|  sudo iptables -I FORWARD 1 -m set -j ACCEPT --match-set temp_hosts src
4|  sudo iptables -A INPUT     -m set ! --match-set temp_hosts src -j DROP
5|  sudo iptables -I INPUT 1   -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

答案1

ipset add temp_hosts 192.168.2.123 timeout 3600
ipset add temp_hosts 192.168.1.0/24 timeout 3600

这实现了您的第一个目标,但如果您希望它在重启后仍然有效,则需要进行保存和加载。

如果你已安装 systemd

创建一个名为“/usr/lib/systemd/system/ipset.service”的文件

[Unit]
Description=IP sets for iptables
After=ufw.service
Before=network.target
Before=iptables.service
Before=webmin-iptables.service
AssertPathExists=/src/all.txt

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=-/bin/echo 'Loading ipset sets'
ExecStart=/sbin/ipset restore -f /src/all.txt
ExecStop=/sbin/ipset save -f /src/all.txt
ExecStartPost=-/bin/echo 'Saving ipsets to disk'
#ExecReload=/usr/libexec/ipset/ipset.start-stop reload
# Save current ipset entries on stop/restart.
#   Value: yes|no,  default: no
# Saves all ipsets to /etc/sysconfig/ipset if ipset gets stopped
Environment=IPSET_SAVE_ON_STOP=yes IPSET_SAVE_ON_RESTART=no
ReadWriteDirectories=/src
NoNewPrivileges=yes

[Install]
WantedBy=basic.target

注意它如何保存到 /src/all.txt,要么提前创建文件夹和文件,要么将其更改为您选择的文件/文件夹。

chkconfig ipset on 

应启用所述流程

接下来定期进行ipset 保存 temp_hosts

您应该会看到每次超时时间都逐渐减少。

ipset create foo hash:ip,port timeout 3600
ipset add foo 192.168.1.0/24,80-82

每次启动 Linux 时,您还必须加载 iptables。不同的发行版将 iptables.save 存储在不同的位置。

请注意,ipset 的默认限制是 65535,但可以通过添加以下方法轻松更改最大 800000到创建行的末尾。我在一个集合中大约有 750,000 个 ip。

更新

sudo ipset create whitelist hash:ip,port timeout 3600
sudo iptables -I INPUT 1   -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
sudo iptables -I INPUT 2   -m set -j ACCEPT --match-set whitelist src
sudo iptables -I FORWARD 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
sudo iptables -I FORWARD 2 -m set -j ACCEPT --match-set whitelist src
sudo iptables -A INPUT     -m set ! --match-set whitelist src -j DROP

sudo ipset add whitelist permanent_ip_1,80-82 timeout 0
sudo ipset add whitelist permanent_ip_2,80-82 timeout 0
sudo ipset add whitelist temp_ip1,80-82 timeout 3600

连接跟踪规则允许已连接的流量继续,但不能建立新的连接。如果您以管理员身份登录并进行更新,并且更新时间超过 3600 秒,则更新将在 3600 秒后立即切断。您可以根据需要这样做。

另一个存在的问题是,如果没有 RELATED、ESTABLISHED,如果您尝试从不在白名单中的 IP 下载某些内容,它将失败。尝试访问 google.com,不,它不在白名单中。连接转到 google.com,但当 google.com 发送数据包时,它将被丢弃,而没有我的连接跟踪规则。

相关内容