IPTables:仅允许SSH访问,无其他权限


11

如何配置IPTable,使其允许SSH进入,而不允许其他流量进出

任何人可以推荐的安全预防措施吗?

我有一个服务器,我相信它已经成功地从GoDaddy迁移了出去,并且我相信它已不再使用。

但是我想确保仅仅是因为...你永远不会知道。:)

请注意,这是GoDaddy的虚拟专用服务器...这意味着没有备份,几乎没有支持。

Answers:


13

您只需要在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脚本中执行它们,以避免在远程执行它们时失去连接到计算机的能力。


4
--state RELATED最后一条规则是不必要的;--state ESTABLISHED足够的。您可能还希望允许DNS流量,并且可能应该允许回送接口上的任何内容,否则各种事情的表现可能会很奇怪。
MadHatter

@MadHatter:是的,您特别对回送内容:)
Khaled 2010年

谢谢,可以从您那里获取整个文件吗?即,我可以复制并直接粘贴到/ etc / sysconfig / iptables中的东西吗?我没有足够的经验来相信自己的直觉来进行正确的编辑。
迪斯科

2
ps。建立连接将在第一个命令后强制关闭
user956584 '16

3
您应该真正更改这些命令的顺序。政策行应显示为最后一行。只是将其复制粘贴到ssh会话中的任何人都将被HUP并立即关闭
-AndreasT

4

像这样:

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

1
我想你的意思-i lo不是-s lo; 同样,ESTABLISHED状态规则中只需要一个--sport 22,那里也应该有一个。为什么每个人都如此热衷于允许RELATED
MadHatter

@MadHatter:关于RELATED:它实际上对匹配非TCP的内容很有用,例如ping答复和DNS答复。至少,这就是我一直认为的。
史蒂文

2
我的信念是,这两个都不匹配。例如,它将与ICMP主机管理禁止的响应相匹配,但这实际上是一样有用的。如果不合格,它将匹配所有相关流量,而不仅仅是与前一行相关的流量。
MadHatter

@MadHatter:我想我必须运行一些测试以查看您是否正确。感谢您挑战我的假设。
史蒂文

是的,只有ESTABLISHED状态才能匹配UDP DNS答复和ICMP回送答复。
史蒂文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.