iptables 问题

iptables 问题

我正在尝试设置通用 iptables 规则,以便将其分发到我的小型 4 节点集群。

我希望所有服务器:

  1. 接受端口 22、80、443 上的任何流量

  2. 如果源是 127.0.0.1,则为所有流量

  3. 或者所有流量的来源都是我的集群中的一台服务器

  4. 我想要的任何东西


iptables -F
iptables -A INPUT -p all -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p all -s <SERVER-A> -j ACCEPT
iptables -A INPUT -p all -s <SERVER-B> -j ACCEPT
iptables -A INPUT -p all -s <SERVER-C> -j ACCEPT
iptables -A INPUT -p all -s <SERVER-D> -j ACCEPT
iptables -A INPUT -j DROP

这看上去正确吗?

答案1

  1. 废除最终规则并制定默认政策DROPiptables -P INPUT DROP
  2. 此规则集不会处理来自传出连接的返回数据包;iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT在顶部添加(除非你不允许传出连接,在这种情况下某些OUTPUT规则会使这一点更加清晰)。
  3. 制定FORWARD连锁政策DROP,以防有人失误/proc/sys/net/ipv4/ip_forward

答案2

我诚挚地推荐使用 IPtables 包装器。如果仅使用包装器,则无法满足您所需的简单规则。

我们用火力全开效果很好 - 默认发行版中有 Debian/Ubuntu 软件包,通过 RPMForge 有 RHEL/CentOS 软件包(iirc)。

您描述的规则的 firehol 配置将遵循以下步骤:

my_ips="<你的服务器列表>"
连接任何世界
        保护强度 100/秒 50
        政策下降
        服务器身份通过 tcp-reset 拒绝
        服务器 ssh 接受
        服务器 http 接受
        服务器 https 接受
        服务器全部接受 src“$my_ips”

创建完整的路由器规则也不是太难 - 上面的例子是针对本地(非路由)防火墙,正如您在问题中描述的那样。

FireHOL 和其他 IPtables 包装器也倾向于在防火墙规则中添加(或轻松添加)合理的默认值,以过滤已知的坏数据包 - 例如上面的“保护”行,最终会创建许多(10+)有用的 iptables 规则。

我更喜欢 FireHOL 的另一个原因是配置文件仍然只是一个 bash 脚本,允许您最终编写的任何 IPtables shell 脚本的完全灵活性。

答案3

对于您的最后一条规则。拒绝数据包比丢弃数据包更有利于互联网。例如...

iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

相关内容