AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 60366
Accepted
Adam Brand
Adam Brand
Asked: 2009-08-30 11:13:06 +0800 CST2009-08-30 11:13:06 +0800 CST 2009-08-30 11:13:06 +0800 CST

您如何使用 iptables(在 Ubuntu 上)设置出口规则?

  • 772

如何在 Ubuntu 上使用 iptables 设置出口规则?

firewall ubuntu security iptables
  • 1 1 个回答
  • 8003 Views

1 个回答

  • Voted
  1. Best Answer
    Adam Brand
    2009-08-30T11:13:46+08:002009-08-30T11:13:46+08:00

    我试图在那里找到有关出口规则和 iptables 的信息,但信息不完整或不准确。在四处挖掘并断开我的 ssh 会话几次后,我想通了,并认为我会在 ServerFault 上分享它。

    出口规则是任何安全策略的关键,并且是满足许多安全标准(例如 PCI DSS)所必需的。

    注意:这里的命令假设是基于 Debian 的发行版(例如,Ubuntu 服务器)。各个发行版的 iptables 命令应该是相同的,但是请查看您自己发行版的参考指南,了解如何保存和加载 iptables,因为这些步骤会有所不同。如果有人想 wikify 并添加 RH 或其他 dist 差异,那就去吧。

    在下面的示例中,我们将为只需要获取软件包更新的服务器设置相当通用的规则。请记住,这些是区分大小写的命令,并且您键入它们的顺序是它们被评估的顺序(即,如果您通过 SSH 连接,请不要先执行 -A OUTPUT -j REJECT)。

    示例规则集

    sudo iptables -A OUTPUT -o lo -p all -j ACCEPT 
    sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    sudo iptables -A OUTPUT -p tcp --dport 80 -d security.ubuntu.com -j ACCEPT
    sudo iptables -A OUTPUT -p tcp --dport 80 -d us.archive.ubuntu.com -j ACCEPT
    sudo iptables -A OUTPUT -j REJECT
    

    重要提示:请勿添加 security.ubuntu.com 或 us.archive.ubuntu.com 规则,除非您/etc/hosts为这些规则添加条目(但请参阅打开 DNS 查询的“其他出口规则”)。请记住,iptables 将在应用规则时评估这些地址的 IP。因此,如果 ubuntu 更改了这些地址,您需要重新创建这些规则或重新启动计算机(这些规则在启动时应用)。

    让我们来看看这些规则中的每一个:

    本地接口规则

    sudo iptables -A OUTPUT -o lo -p all -j ACCEPT 
    

    这是添加一个条目,表示我们应该接受任何想要在本地 (127.0.0.1) 接口上出站的流量。一些应用程序使用这个接口来交换信息,我们不想破坏这些。

    秘制酱料规则(已建立/相关会议)

    sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    

    这是经常被遗忘的规则,导致会话断开和混乱。这说的是允许与已建立的会话或与已建立的会话相关的出站流量。例如,如果您的服务器上有 SSH,您可以打开入站端口 22,但是服务器如何将数据发送回客户端(这甚至可能建议为后续通信使用备用更高端口)?这就是这个规则允许的。

    允许 Ubuntu apt-get 更新

    sudo iptables -A OUTPUT -p tcp --dport 80 -d security.ubuntu.com -j ACCEPT
    sudo iptables -A OUTPUT -p tcp --dport 80 -d us.archive.ubuntu.com -j ACCEPT
    

    这些规则只是告诉 iptables 允许流量进入 ubuntu 更新服务器的端口 80。这些可能因您所在的地区而异,并且可能更多,因此您必须在apt-get update执行此操作后进行操作以确保它适合您。重要提示:正如我之前提到的,在没有先将相应 IP 映射到/etc/hosts. 此外,如果 Ubuntu 更改了这些 IP,您将需要更新主机条目并重新启动或重新创建这些规则,因为 iptables 在应用规则时会评估地址。

    “杀手”法则

    sudo iptables -A OUTPUT -j REJECT
    

    这是杀死所有其他流量的规则。这绝对应该是您链条中的最后一条规则,否则其他规则将不起作用。

    不要忘记做:

    sudo sh -c “iptables-save >/etc/iptables.rules”
    

    如果你想保留规则,然后添加:

    pre-up iptables-restore < /etc/iptables.rules 
    

    在中的接口(eth0 或其他)下/etc/network/interfaces。

    其他出口规则

    要允许“ping”工作(从服务器):

    sudo iptables -A OUTPUT -p icmp --icmp echo-request -j ACCEPT
    sudo iptables -A OUTPUT -p icmp --icmp echo-reply -j ACCEPT
    

    允许 DNS 工作(从服务器)。请注意,添加这些意味着您不必/etc/hosts在上面的示例中使用,但可以说安全性较低。

    sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
    sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
    

    允许 NTP 时间同步客户端:

    sudo iptables -A OUTPUT -p udp -m owner --uid-owner systemd-timesync -j ACCEPT
    

    (随意添加)

    • 10

相关问题

  • 从多个位置保护远程服务器/工具访问的最佳方法是什么?

  • 在 SOHO 环境中实施的最佳 VPN 技术是什么?[关闭]

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve