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

oka*_*apa 22 ubuntu iptables

如何阻止除 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
Run Code Online (Sandbox Code Playgroud)

对不起,但我是一个真正的新手,我只是想让我的服务器更安全。

Mos*_*ose 25

起初你应该总是刷新以确保已经定义了什么......没有

iptables -F
Run Code Online (Sandbox Code Playgroud)

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

iptables -P INPUT DROP
Run Code Online (Sandbox Code Playgroud)

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

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

允许 lo-if 上的所有流量以及您建立的连接的每个传入流量。之后添加您的服务所需的所有规则(如果需要,请不要忘记打开 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 
Run Code Online (Sandbox Code Playgroud)

我做了一个小技巧,以防止自己和其他人不小心在安全性上钻孔,我最后添加:

iptables -A INPUT -j DROP
Run Code Online (Sandbox Code Playgroud)

此行匹配 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
Run Code Online (Sandbox Code Playgroud)

  • 一个注意事项:通过 ssh 设置防火墙时,要非常小心地设置默认策略拒绝和刷新。你会把自己锁在外面。是的,我已经这样做了。:-) 现在我通常会使用最后一条规则`iptables -A INPUT -j DROP` 来代替,正是出于这个原因。 (4认同)

小智 23

像你这样的新手的回复:-) 我也需要保护我的 Ubuntu 服务器,学习 iptables 是我无法忍受的痛苦。UFW(Uncomplicated Firewall)是一个使防火墙配置尽可能简单的程序。

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

  • 使用防火墙配置时,创建一个再次禁用防火墙的 cron 作业可能是个好主意。以防万一你被锁了。 (2认同)