适合网络服务器的 iptables 启动规则有哪些?

适合网络服务器的 iptables 启动规则有哪些?

我正在安装一个新的 centos 5.4 服务器,并且我希望有一组干净的规则用于启动多个 iptables。

一开始应该遵循哪些好的规则?

这是一个好的起点吗:

# Allow outgoing traffic and disallow any passthroughs

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Allow traffic already established to continue

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow ssh, ftp and web services

iptables -A INPUT -p tcp --dport ssh -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport ftp -i eth0 -j ACCEPT
iptables -A INPUT -p udp --dport ftp -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport ftp-data -i eth0 -j ACCEPT
iptables -A INPUT -p udp --dport ftp-data -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT

# Allow local loopback services

iptables -A INPUT -i lo -j ACCEPT

# Allow pings

iptables -I INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -I INPUT -p icmp --icmp-type source-quench -j ACCEPT
iptables -I INPUT -p icmp --icmp-type time-exceeded -j ACCEPT

这条规则是什么:

iptables -A INPUT -p tcp --dport domain -i eth0 -j ACCEPT

更新 :

它将是一个具有 FTP(必需)、apache、SSH、mysql 的 Web 服务器。

答案1

您的 IPTables 规则似乎最适合您的服务器。但我建议进行一些可能的更改:

  • 除非您需要允许整个互联网上的 SSH、MySQL 和 FTP 访问,否则使用“--source”选项仅限制某些获准 IP 地址对这些端口的访问会更安全。例如,要仅允许来自 IP 地址 71.82.93.101 的 SSH 访问,您需要将第 5 条规则更改为“iptables -A INPUT -p tcp --dport ssh --source 71.82.93.101 -i eth0 -j ACCEPT”。您可能需要为每个要允许的 IP 地址添加单独的规则,有关更多信息,请参阅此问题:iptables 多个源 IP

  • 除非这台机器正在运行 DNS 服务器,否则您可能希望阻止对“域”(53) 端口的访问。为此,只需删除行“iptables -A INPUT -p tcp --dport domain -i eth0 -j ACCEPT”。(顺便说一句,这也应该回答了您的最后一个问题。)但是,如果您实际上正在运行 DNS 服务器,请保留此规则。

  • 如果您需要允许远程 MySQL 客户端通过网络访问,则需要添加行“iptables -A INPUT -p tcp --dport 3306 -i eth0 -j ACCEPT”以打开对标准 MySQL 端口的外部访问。但除非真的有必要,否则不要这样做——如果您只需要本地 MySQL 访问(例如,对于在 Apache 下运行的 PHP 应用程序),则无需提供远程 MySQL 访问。除非您想冒被黑客入侵的风险,否则如果您确实向网络开放了端口 3306,请确保您要求所有 MySQL 用户帐户都设置强密码,并且您的 MySQL 服务器软件包是最新的。

  • 您的一条评论(“允许 ssh、dns、ldap、ftp 和 web 服务”)提到了 LDAP 服务,但您的配置中没有这样的规则。当我复制示例配置并对其进行修改时,这种情况经常发生。这不会影响功能,但我会修复该评论,因为误导性评论可能会间接导致您或其他管理员在将来感到困惑。

根据我的经验,制定一套完美的 IPTables 规则非常困难,但我认为你肯定走在正确的道路上。另外,祝你好运,希望你能更多地了解 IPTables——这些规则乍一看可能很复杂,但对于任何 Linux 系统管理员来说,掌握它都是非常有用的技能。

答案2

当然也要注意限制你的出站流量。

我已经看到很多案例,PHP 漏洞导致有人使用“curl”或“wget”从其他地方获取恶意代码,然后在你的服务器上执行它以加入僵尸网络。

如果您不希望 Apache(作为示例)本身需要与其他网站进行对话,那么请限制流量并为您自己省去一些麻烦!

答案3

这些规则已准备好通过“iptables-restore”导入:

*filter
:INPUT DROP [20:2036]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [93:16260]
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT -m comment --comment "allow ICMP: echo-reply"
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -m comment --comment "allow ICMP: echo-request"
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT -m comment --comment "allow ICMP: destination-unreachable"
-A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT -m comment --comment "allow ICMP: source-quench"
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT  -m comment --comment "allow ICMP: time-exceeded"
-A INPUT -i lo -j ACCEPT -m comment --comment "allow input from the loop-back adapter"
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT -m comment --comment "allow SSH: ssh"
-A INPUT -i eth0 -p tcp -m tcp --dport 53 -j ACCEPT -m comment --comment "allow DNS: domain"
-A INPUT -i eth0 -p tcp -m udp --dport 53 -j ACCEPT -m comment --comment "allow DNS: domain"
-A INPUT -i eth0 -p tcp -m tcp --dport 21 -j ACCEPT -m comment --comment "allow FTP: ftp"
-A INPUT -i eth0 -p udp -m udp --dport 21 -j ACCEPT -m comment --comment "allow FTP: ftp"
-A INPUT -i eth0 -p tcp -m tcp --dport 20 -j ACCEPT -m comment --comment "allow FTP: ftp-data"
-A INPUT -i eth0 -p udp -m udp --dport 20 -j ACCEPT -m comment --comment "allow FTP: ftp-data"
-A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT -m comment --comment "allow MariaDB/MySQL: mysql"
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT -m comment --comment "allow HTTP (apache/nxing/lighttpd)"
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT -m comment --comment "allow HTTPS (apache/nxing/lighttpd)"
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  -m comment --comment "allow already established connections"
COMMIT

仅供参考...如果没有使用上述 iptables-restore,也应该设置这些默认策略:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

答案4

为什么允许使用 ftp 和 dns?您的服务器是否提供这些服务?除了某些非常特殊的用例外,实际上不应使用 FTP,而应使用 SFTP(而不是 FTPS)。此外,为什么用符号名称指定所有其他端口,而用数字 80 指定 http?您只是从其他地方复制了这个吗?任何复制和建议都无法弥补理解的不足。确保您了解 TCP、IP、防火墙以及您要提供的服务的协议。

相关内容