如何在Ubuntu中阻止除三个端口以外的所有端口?


22

如何封锁除1962、999、12020以外的所有端口?

一个用于SSH的端口,另一个用于一个脚本的端口。因此,有必要允许这些端口上的传出,对吗?

我的iptables:

# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*mangle
:PREROUTING ACCEPT [643521:136954367]
:INPUT ACCEPT [643521:136954367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
:POSTROUTING ACCEPT [645723:99904505]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*filter
:INPUT ACCEPT [643490:136950781]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
-A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*nat
:PREROUTING ACCEPT [5673:734891]
:POSTROUTING ACCEPT [2816:179474]
:OUTPUT ACCEPT [2816:179474]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012

抱歉,但是在这方面我是一个真正的新手,我只想使我的服务器更安全。


为什么不使用UFW?
Soviero

Answers:


25

起初,您应该始终冲洗以确保已定义了什么……没什么

iptables -F

然后,如果到达末尾且没有匹配的规则,则将INPUT链的默认策略设置为DROP:

iptables -P INPUT DROP

为了确保不影响环回,您应该添加

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

以允许您建立的连接上的所有流量以及所有传入流量。之后,添加您服务所需的每条规则(如果需要,请不要忘记打开ssh!否则您就出门了)

iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 

我做了一些小技巧,以防止自己和其他人意外地钻入我最终添加的安全性漏洞:

iptables -A INPUT -j DROP

该行匹配INPUT链的所有内容,并且该策略不应获得任何东西。这样做的好处是,即使您在初始化规则集后的某个时间添加了ACCEPT规则,也不会对其进行检查,因为之前已删除了所有内容。这样可以确保您将所有内容都放在一个地方。

对于您的问题,整个内容总结如下:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 
iptables -A INPUT -j DROP

1
只是要澄清-P一下:在链上设置策略。它实际上不是在添加规则。链的策略指示如果到达链的末端,则对数据包执行的操作。因此,设置DROP策略之前添加规则是很明智的。
Belmin Fernandez

如果我没记错的话,通常在哪里设置策略都没关系……也许我应该给我的答案做些修改。
Mose 2012年

3
注意:通过SSH设置防火墙时,请务必谨慎设置默认策略拒绝和刷新。您将自己拒之门外。是的,我已经做到了。:-) iptables -A INPUT -j DROP因为这个原因,我现在通常会制定最后一条规则。
Sirex

我稍微强调了ssh警告;-)
Mose 2012年

@Mose:正确地对此没关系。我试图强调这一点。但这可能会导致您被锁定,因为它已经提到过了。
Belmin Fernandez

20

像您这样的新手提供的答复:-)我也需要保护我的Ubuntu服务器,学习iptables是我无法克服的痛苦。UFW(简单防火墙)是使防火墙配置尽可能简单的程序。

  • 安装ufw:

    sudo apt-get install ufw
    
  • 立即禁用它(我必须进行抢救引导,因为我无法使用自己的SSH登录名锁定):

    sudo ufw disable
    
  • 将“拒绝”设置为默认规则(这将阻止所有端口):

    sudo ufw default deny
    
  • 允许您需要的端口:

    sudo ufw allow to 1962
    sudo ufw allow to 999
    sudo ufw allow to 12020
    
    sudo ufw allow from 1962
    sudo ufw allow from 999
    sudo ufw allow from 12020
    
  • 如果确定上述规则不会破坏ssh连接,请启用ufw:

    sudo ufw enable
    

文档写得很好,并提供了更多示例:https : //help.ubuntu.com/community/UFW


1
使用防火墙配置时,最好创建一个再次禁用防火墙的cron作业。以防万一您被锁定。
pymkin

请注意,这并不工作,UFW 0.35,抛出这样的错误ERROR: Bad destination addressERROR: Bad source address
戴维

以及如何为特定接口允许除一个端口以外的所有端口?我正在使用默认的拒绝规则,并希望在以太网接口上阻止DNS端口53,以防止使用VPN时DNS泄漏。当前,我必须允许我要用于私有IP范围的所有端口,这不是很方便。
baptx
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.