我在另一篇文章中发现了一个问题,它很接近我所寻找的答案。简而言之,我希望能够设置一条自动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.123
192.168.1.0/255.255.255.0
3600 秒(一小时),并禁止其他所有人。我该如何修改这个脚本来实现这一点?
此外,我该如何修改它以允许与 不同的端口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 发送数据包时,它将被丢弃,而没有我的连接跟踪规则。