我正在尝试应用这些防火墙规则:
/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
但是,当我将它们复制并粘贴到命令行时,我被locking在服务器之外(当然,因为规则是逐行应用的)。 因为/ sbin / iptables -P INPUT DROP首先被执行,但是允许shell访问的那一行来了之后(我删除了这个来保护我的IP,
我不会试图通过粘贴到terminal来运行它们。 我会scp他们,并从一个脚本运行它们(可能只是一个bash脚本,他们都粘贴在。
只要在那里有大量的数据,我已经有了将这些数据粘贴到sshterminal中的情况,实际上导致了一些数据丢失(如在几行错误中)。 在这样的事情中,这真的不是一个好主意。 显然这种可能性取决于链路质量和带宽。
另外,如果你在使用iptables,担心自己可能会locking自己,build立一个脚本来清除iptables(或者将其设置为你喜欢的工作),然后设置一个cron作业来执行它,或者另一个窗口打开,而你正在申请的规则,只是做“睡100 && ./cleariptables”或一些影响。 在新规则成功的时候按Ctrl + C,你确定你仍然可以login。总是试图build立一个新的SSH连接,你可能已经阻止了新的SSH连接,当前的连接只有在已经build立
尝试将/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的input文件可能是
*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
另一种不被locking的方法是加载新规则,睡眠x秒,在睡眠中testing,然后加载旧规则,以防万一新规则不起作用。
# load_new_rules; sleep 120; load_old_rules
在不具备远程控制台访问权限的远程防火墙上工作时,不要将自己locking。
在另一个 Linux机器上,通过控制台configuration所有的iptables规则和策略。 使用iptables-save将它保存到一个文件中。 将文件复制到远程机器,然后使用以下命令应用:
iptables-apply -t 300 name-of-file
300是超时。 iptables-apply将应用文件中的所有规则,等待您的确认,如果在300秒内没有确认,则恢复以前的规则和策略。
这是我做的:
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