Answers:
您只需要在INPUT和OUTPUT链上将默认策略设置为DROP。
要允许SSH进入,您需要以下命令:
$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
最后两个命令允许环回流量,因为某些应用程序需要环回流量才能正常运行。您可以使用-s source_ip
选项限制来自特定IP的SSH访问。
如上所示按顺序执行命令将导致您当前的SSH会话挂起。这是因为iptables命令立即生效。您需要在shell脚本中执行它们,以避免在远程执行它们时失去连接到计算机的能力。
像这样:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT # or iptables -P INPUT DROP
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT # or iptables -P OUTPUT DROP
-i lo
不是-s lo
; 同样,ESTABLISHED
状态规则中只需要一个--sport 22
,那里也应该有一个。为什么每个人都如此热衷于允许RELATED
?
RELATED
:它实际上对匹配非TCP的内容很有用,例如ping答复和DNS答复。至少,这就是我一直认为的。
--state RELATED
最后一条规则是不必要的;--state ESTABLISHED
足够的。您可能还希望允许DNS流量,并且可能应该允许回送接口上的任何内容,否则各种事情的表现可能会很奇怪。