如何在Ubuntu上设置简单的防火墙?


18

有人可以通过配置示例给出一些简单步骤,如何在Ubuntu上设置简单防火墙(仅使用控制台)?仅应允许ssh,http和https访问。


您是在谈论网络防火墙,还是系统防火墙?
布拉德·吉尔伯特

网络防火墙是什么意思?它是路由器上的防火墙吗?如果是,那我在说系统防火墙。
klew

Answers:


20

sudo ufw默认拒绝

sudo ufw允许http

须藤ufw允许https

须藤UFW允许SSH

sudo ufw启用


如果我要通过ssh依次调用此命令,是否会断开我的连接?
klew

我不这么认为,但是您应该检查一下以确保。这也保持了两次重启之间的状态,因此您只需要做一次。
Nerdfest

当我靠近这台计算机时,我将对其进行检查...
klew

您可以将其放入脚本中并运行它,然后即使断开连接也可以在以后重新连接。请参阅下面有关脚本的答案。
Hamish Downer 2009年

2
先前的评论是正确的。基本上,最后运行上面脚本中的第一个命令。
Nerdfest

14

使用此脚本。

只需确定是否要允许传入的ICMP(ping)即可。

# Clear any existing firewall stuff before we start
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush

# As the default policies, drop all incoming traffic but allow all
# outgoing traffic.  This will allow us to make outgoing connections
# from any port, but will only allow incoming connections on the ports
# specified below.
iptables --policy INPUT DROP
iptables --policy OUTPUT ACCEPT

# Allow all incoming traffic if it is coming from the local loopback device
iptables -A INPUT -i lo -j ACCEPT

# Accept all incoming traffic associated with an established
# connection, or a "related" connection
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow incoming connections
# SSH
iptables -A INPUT -p tcp -i eth0 --dport 22 -m state --state NEW -j ACCEPT
# HTTP
iptables -A INPUT -p tcp -i eth0 --dport 80 -m state --state NEW -j ACCEPT
# HTTPS
iptables -A INPUT -p tcp -i eth0 --dport 443 -m state --state NEW -j ACCEPT

# Allow icmp input so that people can ping us
iptables -A INPUT -p icmp -j ACCEPT

# Reject all other incoming packets
iptables -A INPUT -j REJECT

8

如对另一个答案的注释中所述,在允许ssh端口之前,您不想丢失连接。从手册页:

“远程管理

当运行ufw enable或通过其initscript启动ufw时,ufw将刷新其链。这是必需的,以便ufw可以保持一致的状态,但是它可能会删除现有的连接(例如ssh)。ufw支持在启用防火墙之前添加规则,因此管理员可以执行以下操作:

ufw allow proto tcp from any to any port 22

在运行“ ufw enable”之前。规则仍将被清除,但是启用防火墙后ssh端口将打开。请注意,一旦ufw被启用,在添加或删除规则时ufw将不会刷新链(但是在修改规则或更改默认策略时会)。

因此,这里是一种使用脚本进行设置的方法。运行此脚本时,您将注销,但运行该脚本后,可以再次通过ssh登录。

将以下内容放入脚本中,并将其命名为start-firewall.sh

#!/bin/sh
ufw allow ssh
ufw enable
ufw default deny
ufw allow http
ufw allow https

然后使其可执行并通过运行

$ chmod + x start-firewall.sh
$ sudo ./start-firewall.sh

要了解更多信息,请阅读手册页


2

如果您熟悉脚本编制iptables,则可以完全控制所有防火墙功能。它远没有Firestarter友好,但是可以使用nano/ vi编辑器在控制台上完成。查看适用于Ubuntu的本教程


1

Quicktables帮助我学习了iptables规则。只需运行该脚本,它将为您生成一个iptables脚本...然后您可以打开它并查看由它询问您的问题所生成的关联命令。这是一个很好的学习资源。

不幸的是,它不再被维护。

http://qtables.radom.org/


1

我真的很喜欢使用fireholpackage)。

要创建设置规则,您需要编辑文件/ etc / default / firehol并更改START_FIREHOL = YES

您可能希望使/etc/firehol/firehol.conf看起来像这样。

version 5

interface any IfAll
    client any AnyClient accept
    server "ssh http https" accept
    # Accept everything from trusted networks
    server anystateless AllInside accept src "10.3.27.0/24"

firehol的一大优点是“ try”命令。您可以调整配置文件并进行“ firehol尝试”,如果您通过ssh连接,并且您所做的更改使网络访问中断,那么firehol将还原更改。要使更改真正生效,您必须说提交。


1
Firehol在操纵iptables规则方面非常出色。“'$ firehol try'”激活了防火墙,但是一直等到用户键入commit单词。如果在30秒内未键入此单词,则会恢复以前的防火墙。
加雷斯2009年

因此,您可以添加/编辑/删除规则,然后对其进行测试。如果您通过SSH远程执行此操作,则不会将您锁定在自己的服务器之外!
加雷斯2009年



-1

sudo apt-get install firestarter

然后,在“系统”->“管理”菜单中查看。


发问者只想使用控制台
Mikeage

啊,我的错。或者。管理员仍然可以通过SSH -X进入服务器并远程运行firestarter。
spoulson

1
我还需要安装一些X服务器来启动ssh -X :)。
klew

@klew,您不需要安装完整的X服务器即可通过ssh运行X应用程序。您确实需要几个库,但并不需要所有内容。最低限度只需要xauth和xbase-clients软件包。
Zoredache
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.