我正在安装一个新的centos 5.4服务器,我希望有一套干净的规则来启动mu 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服务器。
您的IPTables规则似乎最适合您的服务器。 但我会build议一些可能的更改:
除非您需要允许来自整个互联网的SSH,MySQL和FTP访问,否则使用“ – source”选项来限制对来自某些已批准IP地址的端口的访问会更加安全。 例如,为了只允许从IP地址71.82.93.101访问SSH,你需要将第五条规则修改为'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域-i eth0 -j ACCEPT'。 (这也应该回答你最后的问题,顺便说一下)。但是,如果你真的在运行一个DNS服务器,那就留下这个规则。
如果您需要允许远程MySQL客户端通过networking访问,则需要添加'iptables -A INPUT -p tcp -dport 3306 -i eth0 -j ACCEPT'行以打开对标准MySQL端口的外部访问。 但不要这样做,除非真的有必要 – 如果你只需要本地的MySQL访问(对于在Apache下运行的PHP应用程序,比如说),则不需要提供远程MySQL访问。 除非你想冒着被黑客攻击的风险,如果你打开端口3306到networking,确保你需要所有MySQL用户账户的强密码,并且你的MySQL服务器软件包是最新的。
你的一个评论('允许ssh,dns,ldap,ftp和web服务')提到了LDAP服务,但是在你的configuration中没有这样的规则。 当我复制一个示例configuration并对其进行修改时,会发生这种情况。 它不会影响function,但我会修改评论,因为误导性的评论可能会间接导致混淆你或另一个pipe理员在未来。
根据我的经验,很难提出一套完整的IPTables规则,但是我认为你绝对是在正确的轨道上。 另外,还要好好学习关于IPTables的知识 – 这些规则起初看起来很复杂,但是对于任何Linux系统pipe理员来说这都是非常有用的技巧。
绝对看起来也限制你的出站stream量。
我已经看到很多PHP漏洞利用的情况,导致有人使用curl或wget从其他地方获取恶意代码,然后在服务器上执行它以join僵尸networking。
如果您不希望Apache(例如)需要与其他网站自己交谈,请限制stream量并节省您的时间。
这些规则已准备好通过“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
而只是为了logging…这些默认策略也应该设置,如果没有使用上面的iptables-restore:
iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP
为什么你允许ftp和dns? 你的服务器是否提供这些服务? FTP不应该真的被使用,除了一些非常特殊的用例,使用SFTP(而不是FTPS)。 另外,为什么通过数字80来指定符号名称和http的所有其他端口? 你是从别的地方复制过来的吗? 没有复制和build议将弥补缺乏理解。 确保您了解TCP,IP,防火墙以及您要提供的服务的协议。