我有以下问题:如何关闭除端口 22 之外的所有端口。nmap 显示了所有使用的端口:
nmap localhost
Starting Nmap 7.01 ( https://nmap.org ) at 2017-02-20 20:06 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000050s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
还netstate
显示打开的连接:
sudo netstat -tulpen | grep -v '127.0.0.1' | grep -v '::1:'
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 160309215 286/sshd
tcp6 0 0 :::22 :::* LISTEN 0 160309218 286/sshd
但是这 999 个并没有真正关闭,它们并没有被使用。
iptables -L
给出:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
所以现在每个端口都开放了。
由于这是一个外部服务器,所以我必须保持端口 22 打开,因为我在更改设置时使用通过端口 22 的 ssh 连接。
配置此功能的最佳方法是什么?
我可以停止 iptables 并启动防火墙并进行配置吗?或者我可以暂时停止 iptables,进行更改然后重新启动 iptables 吗?
或者是否有一些我可以编辑的配置文件?
我对这些配置不是很熟悉,但我必须小心且正确地进行配置。
在此先感谢您的帮助!
答案1
对于这种简单的事情,我会使用 ufw。它是默认安装的,但让我们确保:
~$ which ufw
如果安装了 ufw,则应返回\usr\bin\ufw
。如果 ufw不是已安装:
~$ sudo apt-get install ufw
。
以下步骤只有在您启用或重新加载防火墙后才会生效,因此您不会被踢出。
~$ sudo ufw default deny incoming
~$ sudo ufw default allow outgoing
~$ sudo ufw allow in 22/tcp
您刚刚告诉防火墙 (a) 不让任何东西进入,(b) 让所有内容出去,以及 (c) 让 tcp 从端口 22 进入。要使这些规则生效:
~ $ sudo ufw disable
~ $ sudo ufw enable
现在您将收到警告:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
如果你确定你已经仔细遵循了这些说明,那么回答是。最后,让我们使用以下命令显示防火墙状态sudo ufw status verbose
:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
请阅读 ufw 手册页以获取更多信息。