我正在尝试应用这些防火墙规则:
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -P INPUT DROP
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
/sbin/iptables -A INPUT -m state --state INVALID -j DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
/sbin/iptables -A OUTPUT -m state --state INVALID -j DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -p tcp ! --syn -j REJECT --reject-with tcp-reset
/sbin/iptables -A FORWARD -m state --state INVALID -j DROP
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
/sbin/iptables -A FORWARD -i lo -o lo -j ACCEPT
/sbin/iptables -t mangle -F
/sbin/iptables -t mangle -X
/sbin/iptables -t mangle -Z
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t nat -F
/sbin/iptables -t nat -X
/sbin/iptables -t nat -Z
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 12443 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 11443 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 11444 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 8447 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 8443 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 8880 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 21 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 22 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 587 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 465 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 995 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 993 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 106 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 5432 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 9008 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 9080 -j DROP
/sbin/iptables -A INPUT -p udp --dport 137 -j DROP
/sbin/iptables -A INPUT -p udp --dport 138 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 139 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 445 -j DROP
/sbin/iptables -A INPUT -p udp --dport 1194 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 26 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 2095 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 2096 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 465 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 26 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 37 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 43 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 113 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 465 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 873 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --dport 2089 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp --dport 465 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp --dport 873 -j ACCEPT
/sbin/iptables -A INPUT -p icmp --icmp-type 8/0 -j DROP
/sbin/iptables -A INPUT -j DROP
/sbin/iptables -A OUTPUT -j ACCEPT
/sbin/iptables -A FORWARD -j DROP
但是,当我将它们复制并粘贴到命令行中时,我被锁定在服务器之外(当然,因为规则是逐行应用的)。由于 /sbin/iptables -P INPUT DROP 先执行,但允许 shell 访问的行随后执行(我已删除此行以保护我的 IP),我该如何一次性应用这些规则。
答案1
我不会尝试通过将它们粘贴到终端来运行它们。我会将它们 scp 过来并从单个脚本运行它们(可能只是一个将它们全部粘贴进去的 bash 脚本)。
由于那里的数据量差不多,我遇到过这样的情况:将其粘贴到 ssh 终端实际上会导致一些数据丢失(因为丢失了几行)。在这种情况下,这真的不是一个好主意。显然,发生这种情况的可能性取决于链接质量和带宽。
此外,如果您正在使用 iptables,并且担心可能会将自己锁定,请设置一个脚本来清除 iptables(或将它们设置为您喜欢的某个值),然后设置一个 cron 作业来执行它,或者在应用规则时打开另一个窗口,然后执行“sleep 100 && ./cleariptables”或类似操作。当新规则成功并且您确定仍然可以登录时,请按 Ctrl+c。始终尝试建立新的 ssh 连接,因为您可能已阻止新的 ssh 连接,并且当前连接仅在已建立时才起作用
答案2
尝试将 移动/sbin/iptables -P INPUT DROP
到文件末尾。如果不起作用,则将规则保存到文件中,然后使用 iptables-restore 命令。
sudo iptables-restore </file/you/created
完成后将规则保存到 /etc/sysconfig/iptables
sudo /sbin/service iptables save
以便您的系统下次启动时加载它们。
如果 iptables-restore 不起作用,则手动保存规则/etc/sysconfig/iptables
并重新启动服务即可
sudo /sbin/service iptables restart
iptables-restore 的输入文件可能是
*filter
-F
-X
-Z
-P INPUT DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
-A INPUT -m state --state INVALID -j DROP
# Add the rest of your INPUT/OUTPUT/FORWARD rules before the commit
COMMIT
*mangle
-X
-F
-Z
-P PREROUTING ACCEPT
#Add the rest of the mangle rules
COMMIT
*nat
-X
#add the rest of your nat rules
COMMIT
答案3
不被锁定的另一种方法是加载新规则,休眠 x 秒并在休眠期间进行测试,然后加载有效的旧规则,以防新规则不起作用。
# load_new_rules; sleep 120; load_old_rules
当您在没有远程控制台访问权限的远程防火墙上工作时,这是一种不将自己锁定的好方法。
答案4
这是我的做法:
1.) 永远不要保存 iptables 规则“service iptables save”,这样如果您自己被阻止,重新启动将不会在您有机会重新连接并纠正问题之前再次加载相同的错误规则。当然,这需要在每次重新启动后手动加载规则。另一种方法是继续保存规则,但不将 iptables 服务设置为在系统启动时启动,然后在每次重新启动后手动启动该服务。
2.) 在规则集顶部附近添加一些规则,以始终接受来自几个半安全的主机范围(您的家庭/办公室)的连接,这样添加的任何以下规则都不会阻止您:
iptables -A INPUT -s 83.225.0.0/16 -j ACCEPT
iptables -A INPUT -s 75.102.0.0/16 -j ACCEPT
iptables -A INPUT -s 37.122.0.0/16 -j ACCEPT