标签 UFW 下的文章

我们来研究下 Linux 上的 ufw(简单防火墙),为你更改防火墙提供一些见解和命令。

ufw 简单防火墙 Uncomplicated FireWall )真正地简化了 iptables,它从出现的这几年,已经成为 Ubuntu 和 Debian 等系统上的默认防火墙。而且 ufw 出乎意料的简单,这对新管理员来说是一个福音,否则他们可能需要投入大量时间来学习防火墙管理。

ufw 也有 GUI 客户端(例如 gufw),但是 ufw 命令通常在命令行上执行的。本文介绍了一些使用 ufw 的命令,并研究了它的工作方式。

首先,快速查看 ufw 配置的方法是查看其配置文件 —— /etc/default/ufw。使用下面的命令可以查看其配置,使用 grep 来抑制了空行和注释(以 # 开头的行)的显示。

$ grep -v '^#\|^$' /etc/default/ufw
IPV6=yes
DEFAULT_INPUT_POLICY="DROP"
DEFAULT_OUTPUT_POLICY="ACCEPT"
DEFAULT_FORWARD_POLICY="DROP"
DEFAULT_APPLICATION_POLICY="SKIP"
MANAGE_BUILTINS=no
IPT_SYSCTL=/etc/ufw/sysctl.conf
IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns"

正如你所看到的,默认策略是丢弃输入但允许输出。允许你接受特定的连接的其它规则是需要单独配置的。

ufw 命令的基本语法如下所示,但是这个概要并不意味着你只需要输入 ufw 就行,而是一个告诉你需要哪些参数的快速提示。

ufw [--dry-run] [options] [rule syntax]

--dry-run 选项意味着 ufw 不会运行你指定的命令,但会显示给你如果执行后的结果。但是它会显示假如更改后的整个规则集,因此你要做有好多行输出的准备。

要检查 ufw 的状态,请运行以下命令。注意,即使是这个命令也需要使用 sudo 或 root 账户。

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       192.168.0.0/24
9090                       ALLOW       Anywhere
9090 (v6)                  ALLOW       Anywhere (v6)

否则,你会看到以下内容:

$ ufw status
ERROR: You need to be root to run this script

加上 verbose 选项会提供一些其它细节:

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    192.168.0.0/24
9090                       ALLOW IN    Anywhere
9090 (v6)                  ALLOW IN    Anywhere (v6)

你可以使用以下命令轻松地通过端口号允许和拒绝连接:

$ sudo ufw allow 80         <== 允许 http 访问
$ sudo ufw deny 25              <== 拒绝 smtp 访问

你可以查看 /etc/services 文件来找到端口号和服务名称之间的联系。

$ grep 80/ /etc/services
http            80/tcp          www             # WorldWideWeb HTTP
socks           1080/tcp                        # socks proxy server
socks           1080/udp
http-alt        8080/tcp        webcache        # WWW caching service
http-alt        8080/udp
amanda          10080/tcp                       # amanda backup services
amanda          10080/udp
canna           5680/tcp                        # cannaserver

或者,你可以命令中直接使用服务的名称。

$ sudo ufw allow http
Rule added
Rule added (v6)
$ sudo ufw allow https
Rule added
Rule added (v6)

进行更改后,你应该再次检查状态来查看是否生效:

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       192.168.0.0/24
9090                       ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere         <==
443/tcp                    ALLOW       Anywhere         <==
9090 (v6)                  ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)    <==
443/tcp (v6)               ALLOW       Anywhere (v6)    <==

ufw 遵循的规则存储在 /etc/ufw 目录中。注意,你需要 root 用户访问权限才能查看这些文件,每个文件都包含大量规则。

$ ls -ltr /etc/ufw
total 48
-rw-r--r-- 1 root root 1391 Aug 15  2017 sysctl.conf
-rw-r----- 1 root root 1004 Aug 17  2017 after.rules
-rw-r----- 1 root root  915 Aug 17  2017 after6.rules
-rw-r----- 1 root root 1130 Jan  5  2018 before.init
-rw-r----- 1 root root 1126 Jan  5  2018 after.init
-rw-r----- 1 root root 2537 Mar 25  2019 before.rules
-rw-r----- 1 root root 6700 Mar 25  2019 before6.rules
drwxr-xr-x 3 root root 4096 Nov 12 08:21 applications.d
-rw-r--r-- 1 root root  313 Mar 18 17:30 ufw.conf
-rw-r----- 1 root root 1711 Mar 19 10:42 user.rules
-rw-r----- 1 root root 1530 Mar 19 10:42 user6.rules

本文前面所作的更改,为 http 访问添加了端口 80 和为 https 访问添加了端口 443,在 user.rulesuser6.rules 文件中看起来像这样:

# grep " 80 " user*.rules
user6.rules:### tuple ### allow tcp 80 ::/0 any ::/0 in
user6.rules:-A ufw6-user-input -p tcp --dport 80 -j ACCEPT
user.rules:### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0 in
user.rules:-A ufw-user-input -p tcp --dport 80 -j ACCEPT
You have new mail in /var/mail/root
# grep 443 user*.rules
user6.rules:### tuple ### allow tcp 443 ::/0 any ::/0 in
user6.rules:-A ufw6-user-input -p tcp --dport 443 -j ACCEPT
user.rules:### tuple ### allow tcp 443 0.0.0.0/0 any 0.0.0.0/0 in
user.rules:-A ufw-user-input -p tcp --dport 443 -j ACCEPT

使用 ufw,你还可以使用以下命令轻松地阻止来自一个 IP 地址的连接:

$ sudo ufw deny from 208.176.0.50
Rule added

status 命令将显示更改:

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    192.168.0.0/24
9090                       ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
Anywhere                   DENY IN     208.176.0.50             <== new
9090 (v6)                  ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

总而言之,ufw 不仅容易配置,而且且容易理解。


via: https://www.networkworld.com/article/3533551/linux-firewall-basics-with-ufw.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

FirewallD 是 iptables 的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面,在大多数 Linux 发行版的仓库中都有。与直接控制 iptables 相比,使用 FirewallD 有两个主要区别:

  1. FirewallD 使用区域和服务而不是链式规则。
  2. 它动态管理规则集,允许更新规则而不破坏现有会话和连接。
FirewallD 是 iptables 的一个封装,可以让你更容易地管理 iptables 规则 - 它并不是 iptables 的替代品。虽然 iptables 命令仍可用于 FirewallD,但建议使用 FirewallD 时仅使用 FirewallD 命令。

本指南将向您介绍 FirewallD 的区域和服务的概念,以及一些基本的配置步骤。

安装与管理 FirewallD

CentOS 7 和 Fedora 20+ 已经包含了 FirewallD,但是默认没有激活。可以像其它的 systemd 单元那样控制它。

1、 启动服务,并在系统引导时启动该服务:

sudo systemctl start firewalld
sudo systemctl enable firewalld

要停止并禁用:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

2、 检查防火墙状态。输出应该是 running 或者 not running

sudo firewall-cmd --state

3、 要查看 FirewallD 守护进程的状态:

sudo systemctl status firewalld

示例输出

firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled)
   Active: active (running) since Wed 2015-09-02 18:03:22 UTC; 1min 12s ago
 Main PID: 11954 (firewalld)
   CGroup: /system.slice/firewalld.service
   └─11954 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

4、 重新加载 FirewallD 配置:

sudo firewall-cmd --reload

配置 FirewallD

FirewallD 使用 XML 进行配置。除非是非常特殊的配置,你不必处理它们,而应该使用 firewall-cmd

配置文件位于两个目录中:

  • /usr/lib/FirewallD 下保存默认配置,如默认区域和公用服务。 避免修改它们,因为每次 firewall 软件包更新时都会覆盖这些文件。
  • /etc/firewalld 下保存系统配置文件。 这些文件将覆盖默认配置。

配置集

FirewallD 使用两个配置集:“运行时”和“持久”。 在系统重新启动或重新启动 FirewallD 时,不会保留运行时的配置更改,而对持久配置集的更改不会应用于正在运行的系统。

默认情况下,firewall-cmd 命令适用于运行时配置,但使用 --permanent 标志将保存到持久配置中。要添加和激活持久性规则,你可以使用两种方法之一。

1、 将规则同时添加到持久规则集和运行时规则集中。 

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=http

2、 将规则添加到持久规则集中并重新加载 FirewallD。 

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
reload 命令会删除所有运行时配置并应用永久配置。因为 firewalld 动态管理规则集,所以它不会破坏现有的连接和会话。

防火墙的区域

“区域”是针对给定位置或场景(例如家庭、公共、受信任等)可能具有的各种信任级别的预构建规则集。不同的区域允许不同的网络服务和入站流量类型,而拒绝其他任何流量。 首次启用 FirewallD 后,public 将是默认区域。

区域也可以用于不同的网络接口。例如,要分离内部网络和互联网的接口,你可以在 internal 区域上允许 DHCP,但在external 区域仅允许 HTTP 和 SSH。未明确设置为特定区域的任何接口将添加到默认区域。

要找到默认区域: 

sudo firewall-cmd --get-default-zone

要修改默认区域:

sudo firewall-cmd --set-default-zone=internal

要查看你网络接口使用的区域:

sudo firewall-cmd --get-active-zones

示例输出:

public
  interfaces: eth0

要得到特定区域的所有配置:

sudo firewall-cmd --zone=public --list-all

示例输出:

public (default, active)
  interfaces: ens160
  sources:
  services: dhcpv6-client http ssh
  ports: 12345/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

要得到所有区域的配置: 

sudo firewall-cmd --list-all-zones

示例输出:

block
  interfaces:
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

  ...

work
  interfaces:
  sources:
  services: dhcpv6-client ipp-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

与服务一起使用

FirewallD 可以根据特定网络服务的预定义规则来允许相关流量。你可以创建自己的自定义系统规则,并将它们添加到任何区域。 默认支持的服务的配置文件位于 /usr/lib /firewalld/services,用户创建的服务文件在 /etc/firewalld/services 中。

要查看默认的可用服务:

sudo firewall-cmd --get-services

比如,要启用或禁用 HTTP 服务: 

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --remove-service=http --permanent

允许或者拒绝任意端口/协议

比如:允许或者禁用 12345 端口的 TCP 流量。

sudo firewall-cmd --zone=public --add-port=12345/tcp --permanent
sudo firewall-cmd --zone=public --remove-port=12345/tcp --permanent

端口转发

下面是在同一台服务器上将 80 端口的流量转发到 12345 端口。

sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345

要将端口转发到另外一台服务器上

1、 在需要的区域中激活 masquerade。

sudo firewall-cmd --zone=public --add-masquerade

2、 添加转发规则。例子中是将本地的 80 端口的流量转发到 IP 地址为 :123.456.78.9 的远程服务器上的 8080 端口。

sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9

要删除规则,用 --remove 替换 --add。比如:

sudo firewall-cmd --zone=public --remove-masquerade

用 FirewallD 构建规则集

例如,以下是如何使用 FirewallD 为你的服务器配置基本规则(如果您正在运行 web 服务器)。

  1. eth0 的默认区域设置为 dmz。 在所提供的默认区域中,dmz(非军事区)是最适合于这个程序的,因为它只允许 SSH 和 ICMP。
sudo firewall-cmd --set-default-zone=dmz
sudo firewall-cmd --zone=dmz --add-interface=eth0

2、 把 HTTP 和 HTTPS 添加永久的服务规则到 dmz 区域中:

sudo firewall-cmd --zone=dmz --add-service=http --permanent
sudo firewall-cmd --zone=dmz --add-service=https --permanent

 3、 重新加载 FirewallD 让规则立即生效:

sudo firewall-cmd --reload

 如果你运行 firewall-cmd --zone=dmz --list-all, 会有下面的输出:

dmz (default)
  interfaces: eth0
  sources:
  services: http https ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

 这告诉我们,dmz 区域是我们的默认区域,它被用于 eth0 接口中所有网络的源地址端口。 允许传入 HTTP(端口 80)、HTTPS(端口 443)和 SSH(端口 22)的流量,并且由于没有 IP 版本控制的限制,这些适用于 IPv4 和 IPv6。 不允许IP 伪装以及端口转发。 我们没有 ICMP 块,所以 ICMP 流量是完全允许的。没有 丰富 Rich 规则,允许所有出站流量。

高级配置

服务和端口适用于基本配置,但对于高级情景可能会限制较多。 丰富 Rich 规则和 直接 Direct 接口允许你为任何端口、协议、地址和操作向任何区域 添加完全自定义的防火墙规则。

丰富规则

丰富规则的语法有很多,但都完整地记录在 firewalld.richlanguage(5) 的手册页中(或在终端中 man firewalld.richlanguage)。 使用 --add-rich-rule--list-rich-rules--remove-rich-rule 和 firewall-cmd 命令来管理它们。

这里有一些常见的例子:

允许来自主机 192.168.0.14 的所有 IPv4 流量。

sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'

拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量。

sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'

允许来自主机 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,并将流量转发到 6532 端口上。 

sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532'

将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在区域上激活 masquerade)。

sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2'

列出你目前的丰富规则:

sudo firewall-cmd --list-rich-rules

iptables 的直接接口

对于最高级的使用,或对于 iptables 专家,FirewallD 提供了一个 直接 Direct 接口,允许你给它传递原始 iptables 命令。 直接接口规则不是持久的,除非使用 --permanent

要查看添加到 FirewallD 的所有自定义链或规则:

firewall-cmd --direct --get-all-chains
firewall-cmd --direct --get-all-rules

讨论 iptables 的具体语法已经超出了这篇文章的范围。如果你想学习更多,你可以查看我们的 iptables 指南

更多信息

你可以查阅以下资源以获取有关此主题的更多信息。虽然我们希望我们提供的是有效的,但是请注意,我们不能保证外部材料的准确性或及时性。


via: https://www.linode.com/docs/security/firewalls/introduction-to-firewalld-on-centos

作者:Linode 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

UFW,即 简单防火墙 uncomplicated firewall ,是一个 Arch Linux、Debian 或 Ubuntu 中管理防火墙规则的前端。 UFW 通过命令行使用(尽管它有可用的 GUI),它的目的是使防火墙配置简单(即 不复杂 uncomplicated )。

开始之前

1、 熟悉我们的入门指南,并完成设置服务器主机名和时区的步骤。

2、 本指南将尽可能使用 sudo。 在完成保护你的服务器指南的章节,创建一个标准用户帐户,强化 SSH 访问和移除不必要的网络服务。 但不要跟着创建防火墙部分 - 本指南是介绍使用 UFW 的,它对于 iptables 而言是另外一种控制防火墙的方法。

3、 更新系统

Arch Linux

sudo pacman -Syu

Debian / Ubuntu

sudo apt-get update && sudo apt-get upgrade

安装 UFW

UFW 默认包含在 Ubuntu 中,但在 Arch 和 Debian 中需要安装。 Debian 将自动启用 UFW 的 systemd 单元,并使其在重新启动时启动,但 Arch 不会。 这与告诉 UFW 启用防火墙规则不同,因为使用 systemd 或者 upstart 启用 UFW 仅仅是告知 init 系统打开 UFW 守护程序。

默认情况下,UFW 的规则集为空,因此即使守护程序正在运行,也不会强制执行任何防火墙规则。 强制执行防火墙规则集的部分在下面。

Arch Linux

1、 安装 UFW:

sudo pacman -S ufw

2、 启动并启用 UFW 的 systemd 单元:

sudo systemctl start ufw
sudo systemctl enable ufw

Debian / Ubuntu

1、 安装 UFW

sudo apt-get install ufw

使用 UFW 管理防火墙规则

设置默认规则

大多数系统只需要打开少量的端口接受传入连接,并且关闭所有剩余的端口。 从一个简单的规则基础开始,ufw default命令可以用于设置对传入和传出连接的默认响应动作。 要拒绝所有传入并允许所有传出连接,那么运行:

sudo ufw default allow outgoing
sudo ufw default deny incoming

ufw default 也允许使用 reject 参数。

警告:

除非明确设置允许规则,否则配置默认 denyreject 规则会锁定你的服务器。确保在应用默认 denyreject 规则之前,已按照下面的部分配置了 SSH 和其他关键服务的允许规则。

添加规则

可以有两种方式添加规则:用端口号或者服务名表示。

要允许 SSH 的 22 端口的传入和传出连接,你可以运行:

sudo ufw allow ssh

你也可以运行:

sudo ufw allow 22

相似的,要在特定端口(比如 111)上 deny 流量,你需要运行:

sudo ufw deny 111

为了更好地调整你的规则,你也可以允许基于 TCP 或者 UDP 的包。下面例子会允许 80 端口的 TCP 包:

sudo ufw allow 80/tcp
sudo ufw allow http/tcp

这个会允许 1725 端口上的 UDP 包:

sudo ufw allow 1725/udp

高级规则

除了基于端口的允许或阻止,UFW 还允许您按照 IP 地址、子网和 IP 地址/子网/端口的组合来允许/阻止。

允许从一个 IP 地址连接:

sudo ufw allow from 123.45.67.89

允许特定子网的连接:

sudo ufw allow from 123.45.67.89/24

允许特定 IP/ 端口的组合:

sudo ufw allow from 123.45.67.89 to any port 22 proto tcp

proto tcp 可以删除或者根据你的需求改成 proto udp,所有例子的 allow 都可以根据需要变成 deny

删除规则

要删除一条规则,在规则的前面加上 delete。如果你希望不再允许 HTTP 流量,你可以运行:

sudo ufw delete allow 80

删除规则同样可以使用服务名。

编辑 UFW 的配置文件

虽然可以通过命令行添加简单的规则,但仍有可能需要添加或删除更高级或特定的规则。 在运行通过终端输入的规则之前,UFW 将运行一个文件 before.rules,它允许回环接口、ping 和 DHCP 等服务。要添加或改变这些规则,编辑 /etc/ufw/before.rules 这个文件。 同一目录中的 before6.rules 文件用于 IPv6 。

还存在一个 after.ruleafter6.rule 文件,用于添加在 UFW 运行你通过命令行输入的规则之后需要添加的任何规则。

还有一个配置文件位于 /etc/default/ufw。 从此处可以禁用或启用 IPv6,可以设置默认规则,并可以设置 UFW 以管理内置防火墙链。

UFW 状态

你可以在任何时候使用命令:sudo ufw status 查看 UFW 的状态。这会显示所有规则列表,以及 UFW 是否处于激活状态:

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

启用防火墙

随着你选择规则完成,你初始运行 ufw status 可能会输出 Status: inactive。 启用 UFW 并强制执行防火墙规则:

sudo ufw enable

相似地,禁用 UFW 规则:

sudo ufw disable
UFW 会继续运行,并且在下次启动时会再次启动。

日志记录

你可以用下面的命令启动日志记录:

sudo ufw logging on

可以通过运行 sudo ufw logging low|medium|high 设计日志级别,可以选择 lowmedium 或者 high。默认级别是 low

常规日志类似于下面这样,位于 /var/logs/ufw

Sep 16 15:08:14 <hostname> kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=123.45.67.89 DST=987.65.43.21 LEN=40 TOS=0x00 PREC=0x00 TTL=249 ID=8475 PROTO=TCP SPT=48247 DPT=22 WINDOW=1024 RES=0x00 SYN URGP=0

前面的值列出了你的服务器的日期、时间、主机名。剩下的重要信息包括:

  • [UFW BLOCK]:这是记录事件的描述开始的位置。在此例中,它表示阻止了连接。
  • IN:如果它包含一个值,那么代表该事件是传入事件
  • OUT:如果它包含一个值,那么代表事件是传出事件
  • MAC:目的地和源 MAC 地址的组合
  • SRC:包源的 IP
  • DST:包目的地的 IP
  • LEN:数据包长度
  • TTL:数据包 TTL,或称为 time to live。 在找到目的地之前,它将在路由器之间跳跃,直到它过期。
  • PROTO:数据包的协议
  • SPT:包的源端口
  • DPT:包的目标端口
  • WINDOW:发送方可以接收的数据包的大小
  • SYN URGP:指示是否需要三次握手。 0 表示不需要。

via: https://www.linode.com/docs/security/firewalls/configure-firewall-with-ufw

作者:Linode 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

无论你使用的哪种 Linux 发行版,你都需要使用基于 iptables 的防火墙来保护它。

啊哈!你已经设置好了你的第一台 Linux 服务器并且已经准备发车了!是么?嗯,慢着。

默认情况下,你的 Linux 系统对攻击者来说并非是足够安全的。当然,它比 Windows XP 要安全多了,但这说明不了什么。

想要使你的 Linux 系统真正稳固,你需要按照 Linode服务器安全指南 来操作。

总的来说,首先你必须关闭那些你不需要的服务。当然要这样做的话,你先要知道你正在使用哪些网络服务。

你可以使用 shell 命令来找到是哪些服务:

netstat -tulpn

netstat 将会告诉你正在运行哪些服务和这些服务正在使用的端口是什么。如果你不需要其中的某项服务或端口,你就应该关闭它。例如,除非你正在运行一个网站,否则你是不需要运行中的 ApacheNginx 服务器,也不需要开启 80 或 8080 端口。

总之一句话,不确定的话,就关了它先。

在一个最简单的,没有做过任何额外更改的 Linux 服务器上,你会看到 SSHRPCNTPdate 运行在它们的公开端口上。不要添加像 telnet 这样陈旧而不安全的 shell 程序,否则老司机就会在你不经意间将你的 Linux 小跑车开走了。也许,在上世纪 80 年代的时候你喜欢把 telnet 当作你 SunOS 机器上的备份登录方式,但是那早已成为了过去。

就 SSH 来说,你应该使用 RSA 密钥Fail2Ban 来加固。除非你需要 RPC,否则就卸载它——如果你不知道需要不需要它的话,那就是不需要。

关于如何关门已经说的够多了;让我们来聊聊利用 iptables 来锁定进来的流量吧。

当你启动 Linux 服务器的时候它是没有任何规则的。这就意味着所有的流量都是被允许的。这当然是不好的。因此,你需要及时的设置你的防火墙。

Iptables 是一种用来给 netfilter 设置网络策略规则的 shell 工具,netfilter 是Linux 系统下的默认防火墙,它利用一组规则来允许或禁止流量。当有人尝试连接上你的系统——有些人无时不刻地尝试这么干,而且从不气馁——iptables 就会检查这些请求是否与规则列表相匹配。如果没有匹配到任何的规则,它就会采取默认操作。

这个默认操作应该是将连接“Drop”掉,即禁掉这些意图闯入者。而且这不会让他们知道这些网络探测行为发生了什么。(你也可以将链接“Reject”掉,但是这会同时让他们知道你有一个正在运行的 Linux 防火墙。就目前而言,让陌生人能获取到我们系统的信息越少越好。至少,我是这么认为的。)

现在,你可以用 iptables 来设置你的防火墙了。我已经这么做了。就像以前,我骑着自行车去六英里外上班,并且两边都是上坡。而现在,我开车去。

这其实比喻的是我使用 Fedora 发行版的 FirewallD 和 Debian 系发行版的 UFW(Uncomplicated Firewall)。这些都是易用的 iptables 的 shell 前端。你可以在以下的 Linode 指南中找到适合的使用方式:FirewallDUFW

从本质上来说设置这些规则就是在你的服务器上放置“非请勿入”的告示牌。用起来吧。

但是也别太兴奋地把所有的链接都关闭了。例如:

sudo ufw default deny incoming

看起来是个好主意哦。别忘了,它禁止了所有链接,包括你自己哦!

很好,它就是这么干的。这意味着它也同样禁止了 SSH 的登录。也就是说你再也不能登录你那新服务器了。哇哦!

不过,如果你犯了错,错误的将更多的链接都禁止了。你看,老司机也同样被你挡在门外了。

或者,更准确得说,这不是你或你的服务器所遇到的个别现象。当然,你也不是每天受到 3 亿多次攻击尝试的美国国家安全局(NSA)。但是攻击脚本根本不在乎你是谁。它只是不断的检查寻找网络中存在已知漏洞的服务器。在平常的一天中我自己的小服务器就会受到数以百计的攻击。

都这样了,你还在等什么呢?去吧,加固你的网络服务吧。安装 FirewallD 或者 UFW 来加固你的服务器吧。你会愿意去做的。


关于作者:

Steven J. Vaughan-Nichols 是一位资深的 IT 专栏作家,他的作品出现在许多行业领袖媒体上,包括 ZDNet.com、PC Magazine、InfoWorld、ComputerWorld、Linux Today 和 eWEEK 等。Steven 在 IT 专业方面的见解犀利,虽然他的观点和云计算方面的认识,并不代表 Linode 观点,但是我们仍然非常感谢他的贡献。你可以在 Twitter 上关注他 (@sjvn)。


via: https://medium.com/linode-cube/locking-down-your-linux-server-24d8516ae374#.qy8qq4bx2

作者:Steven J. Vaughan-Nichols 译者:wcnnbdk1 校对:wxy

本文由 LCTT 组织编译,Linux中国 荣誉推出

自从计算机互连后,各种服务迅速发展。用户使用的电子邮件、社交媒体、在线商城、即时聊天甚至网络会议等服务如雨后春笋般涌现。但从另一方面来说,这些连接服务也具有双刃剑,比如它们当中的病毒、恶意软件、特洛伊木马等会向计算机发送恶意消息。

Ubuntu下的 UFW 防火墙

安装 UFW 防火墙

作为最大的计算机网络,互联网上可并不都是善意的用户。因此,为了确保我们的计算机或服务器安全,我们需要进行保护。

在你的计算机或服务器上一个必须有的组件就是防火墙。在维基百科中,其定义是:

防火墙是计算机中一款应用软件或基于硬件的网络安全系统。它根据应用配置的规则,分析数据包,然后决定是否允许此数据包通过,来控制整个系统的网络数据进出访问权限。

iptables 是一款广泛使用于服务器的防火墙。它是一款应用程序,它会根据一系列规则来管理服务器上的进出数据流。一般来说,只有可信任的连接才允许进入服务器。但 iptables 是在控制台模式下运行,它非常的复杂。不熟悉 iptables 配置规则和命令的用户可以读读下面的文章,它描述了如何使用iptables防火墙。

Debian/Ubuntu 系统中安装 UFW 防火墙

为了降低 iptables 设置的复杂度,有许多对应的前端应用。如果你运行的是 Ubuntu linux 系统的话, UFW 就是一款默认的防火墙工具。我们开始来探讨 UFW 防火墙吧。

什么是 UFW

UFW (简单的防火墙) 是广泛使用的 iptables 防火墙 的前端应用,这是非常适合于基于主机的防火墙。UFW 即提供了一套管理网络过滤器的框架,又提供了控制防火墙的命令行界面接口。它给那些不熟悉防火墙概念的 Linux 新用户提供了友好、易使用的用户界面。

同时,另一方面,它也提供了命令行界面,为系统管理员准备了一套复杂的命令,用来设置复杂的防火墙规则。UFW 对像 Debian、UbuntuLinux Mint 这些发布版本来说也是上上之选。

UFW 基本用法

首先,用如下命令来检查下系统上是否已经安装了 UFW

$ sudo dpkg --get-selections | grep ufw

如还没有安装,可以使用 apt 命令来安装,如下所示:

$ sudo apt-get install ufw

在使用前,你应该检查下 UFW 是否已经在运行。用下面的命令来检查。

$ sudo ufw status

如果你发现状态是: inactive , 意思是没有被激活或不起作用。

启用/禁用 UFW

要启用它,你只需在终端下键入如下命令:

$ sudo ufw enable

在系统启动时启用和激活防火墙

要禁用,只需输入:

$ sudo ufw disable

列出当前UFW规则

在防火墙被激活后,你可以向里面添加你自己的规则。如果你想看看默认的规则,可以输入。

$ sudo ufw status verbose

输出样例:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
$

添加UFW规则

如你所见,默认是不允许所有外部访问连接的。如果你想远程连接你的机器,就得开放相应的端口。例如,你想用 ssh 来连接,下面是添加的命令。

允许访问

$ sudo ufw allow ssh

[sudo] password for pungki :
Rule added
Rule added (v6)
$

再一次检查状态,会看到如下的一些输出。

$ sudo ufw status

To      Action          From
--      -----------         ------
22      ALLOW           Anywhere
22      ALLOW           Anywhere (v6)

如果你有很多条规则,想快速的在每条规则上加个序号数字的话,请使用 numbered 参数。

$ sudo ufw status numbered

To      Action          From
------      -----------         ------
[1] 22      ALLOW           Anywhere
[2] 22      ALLOW           Anywhere (v6)

第一条规则的意思是所有通过22端口访问机器的 tcpudp 数据包都是允许的。如果你希望仅允许 tcp 数据包访问应该怎么办?可以在服务端口后加个 tcp 参数。下面的示例及相应的输出。

$ sudo ufw allow ssh/tcp

To      Action          From
------      -----------         ------
22/tcp      ALLOW           Anywhere
22/tcp      ALLOW           Anywhere (v6)

拒绝访问

添加拒绝规则也是同样的招数。我们假设你想拒绝 ftp 访问, 你只需输入

$ sudo ufw deny ftp

To      Action          From
------      -----------         ------
21/tcp      DENY            Anywhere
21/tcp      DENY            Anywhere (v6)

添加特定端口

有时候,我们会自定义一个端口而不是使用标准提供的。让我们试着把机器上 ssh22 端口换成 2290 端口,然后允许从 2290 端口访问,我们像这样添加:

$ sudo ufw allow 2290/ssh (译者注:些处演示例子有问题)

To      Action          From
--      -----------         ------
2290        ALLOW           Anywhere
2290        ALLOW           Anywhere (v6)

你也可以把端口范围添加进规则。如果我们想打开从 2290到2300 的端口以供 tcp 协议使用,命令如下示:

$ sudo ufw allow 2290:2300/tcp

To          Action          From
------          -----------         ------
2290:2300/tcp       ALLOW           Anywhere
2290:2300/tcp       ALLOW           Anywhere (v6)

同样你想使用 udp 的话,如下操作。

$ sudo ufw allow 2290:2300/udp

To          Action          From
------          -----------         ------
2290:2300/udp       ALLOW           Anywhere
2290:2300/udp       ALLOW           Anywhere (v6)

请注意你得明确的指定是 ‘tcp’ 或 ‘udp’,否则会出现跟下面类似的错误信息。

ERROR: Must specify ‘tcp’ or ‘udp’ with multiple ports

添加特定 IP

前面我们添加的规则都是基于 服务程序端口 的,UFW 也可以添加基于 IP 地址的规则。下面是命令样例。

$ sudo ufw allow from 192.168.0.104

你也可以使用子网掩码来扩宽范围。

$ sudo ufw allow form 192.168.0.0/24

To      Action          From
--      -----------         ------
Anywhere    ALLOW           192.168.0.104
Anywhere    ALLOW           192.168.0.0/24

如你所见, from 参数仅仅限制连接的来源,而目的(用 To 列表示)是所有地方。让我们看看允许访问 22端口(ssh)的例子。

$ sudo ufw allow to any port 22

上面的命令会允许从任何地方以及任何协议都可以访问22端口

组合参数

对于更具体的规则,你也可以把 IP 地址协议端口这些组合在一起用。我们想创建一条规则,限制仅仅来自于 192.168.0.104 的 IP ,而且只能使用 tcp 协议和通过 22端口 来访问本地资源。我们可以用如下所示的命令。

$ sudo ufw allow from 192.168.0.104 proto tcp to any port 22

创建拒绝规则的命令和允许的规则类似,仅需要把 allow 参数换成 deny 参数就可以。

删除规则

某些时候需要删除现有的规则。再一次使用 UFW 删除规则是很简单的。在上面的示例中,已经创建了如下的规则,现在你想删除它们。

To      Action          From
--      -----------         ------
22/tcp      ALLOW           192.168.0.104
21/tcp      ALLOW           Anywhere
21/tcp      ALLOW           Anywhere (v6)

删除规则有两个方法。

方法1

下面的命令将会 删除ftp 相关的规则。所以像 21/tcp 这条 ftp 默认访问端口的规则将会被删除掉。

$ sudo ufw delete allow ftp

方法2

但当你使用如下命令来删除上面例子中的规则时,

$ sudo ufw delete allow ssh

或者 

$ sudo ufw delete allow 22/tcp

会出现如下所示的一些错误

Could not delete non-existent rule
Could not delete non-existent rule (v6)

我们还有一招。上面已经提到过,可以序列数字来代替你想删除的规则。让我们试试。

$ sudo ufw status numbered

To      Action          From
--      -----------         ------
[1] 22/tcp      ALLOW           192.168.0.104
[2] 21/tcp      ALLOW           Anywhere
[3] 21/tcp      ALLOW           Anywhere (v6)

然后我们删除正在使用的第一条规则。按 “ y ” 就会永久的删除这条规则。

$ sudo ufw delete 1

Deleting :
Allow from 192.168.0.104 to any port 22 proto tcp
Proceed with operation (y|n)? y

从这些用法中你就可以发现它们的不同。 方法2 在删除前需要 用户确认 ,而 方法1 不需要。

重置所有规则

某些情况下,你也许需要 删除/重置 所有的规则。可以输入。

$ sudo ufw reset

Resetting all rules to installed defaults. Proceed with operation (y|n)? y

如果你输入“ y ”, UFW 在重置你的 ufw 前会备份所有已经存在规则,然后重置。重置操作也会使你的防火墙处于不可用状态,如果你想使用得再一次启用它。

高级功能

正如我上面所说,UFW防火墙能够做到iptables可以做到的一切。这是通过一些规则文件来完成的,他们只不过是 iptables-restore 所对应的文本文件而已。是否可以通过 ufw 命令微调 UFW 的与/或逻辑来增加 iptables 命令其实就是编辑几个文本文件的事。

  • /etc/default/ufw: 默认策略的主配置文件,支持 IPv6 和 内核模块。
  • /etc/ufw/before[6].rules: 通过 ufw 命令添加进规则之前里面存在的规则会首先计算。
  • /etc/ufw/after[6].rules: 通过 ufw 命令添加进规则之后里面存在的规则会进行计算。
  • /etc/ufw/sysctl.conf: 内核网络可调参数。
  • /etc/ufw/ufw.conf: 设置系统启动时 UFW 是否可用,和设置日志级别。

结论

UFW 作为 iptables 的前端应用,给用户提供了简单的接口界面。使用着不需要去记非常复杂的 iptables 语法。UFW 也使用了‘ 简单英语 ’作为它的参数。

Allow、deny、reset 就是他们当中的一部分。我相信有很多很多 iptables 前端应用,但 UFW 绝对是那些想要快速、简单的就建立自己的防火墙,而且还很安全的用户的最佳替代品之一。请输入 man ufw 查看 ufw 用户手册,来了解更多详情。


via: http://www.tecmint.com/how-to-install-and-configure-ufw-firewall/

译者:runningwater 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出