我是iptables的新手,我一直在试图把防火墙放在一起,目的是保护networking服务器。 下面的规则是我迄今为止所做的规定,我想听听规则是否合理 – 我是否遗漏了任何必要的规则?
除了端口80,我还需要为外部连接打开端口3306(mysql)和22(ssh)。
任何反馈是高度赞赏!
#!/bin/sh # Clear all existing rules. iptables -F # ACCEPT connections for loopback network connection, 127.0.0.1. iptables -A INPUT -i lo -j ACCEPT # ALLOW established traffic iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # DROP packets that are NEW but does not have the SYN but set. iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP # DROP fragmented packets, as there is no way to tell the source and destination ports of such a packet. iptables -A INPUT -f -j DROP # DROP packets with all tcp flags set (XMAS packets). iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP # DROP packets with no tcp flags set (NULL packets). iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # ALLOW ssh traffic (and prevent against DoS attacks) iptables -A INPUT -p tcp --dport ssh -m limit --limit 1/s -j ACCEPT # ALLOW http traffic (and prevent against DoS attacks) iptables -A INPUT -p tcp --dport http -m limit --limit 5/s -j ACCEPT # ALLOW mysql traffic (and prevent against DoS attacks) iptables -A INPUT -p tcp --dport mysql -m limit --limit 25/s -j ACCEPT # DROP any other traffic. iptables -A INPUT -j DROP
试用开箱即用的防火墙。 从networking启用您想要的服务。 有一个,两个和三个接口的示例规则集。 该文件是好的,并积极维护。
我希望你会想要限制哪些地址可以访问MySQL,这很容易完成。 除非您最近已经探测过另一个端口,否则您还可以在端口closures的情况下保护SSH。
ETA:5.有了这样的速率限制,DoS攻击变得非常简单。 我只需要每秒发送一个SYN数据包到你的服务器来拒绝你的ssh访问。
我会考虑使用像NARC这样的东西来做你的iptables规则configuration:
这个软件包已经有了一些合理的默认设置,您应该可以信任它们。
我使用Webmin,它有一个很好的起始规则集。
过滤从服务器到互联网的传出通信也很重要。 尤其是SMTPbuild议只允许一台服务器。
我pipe理Mikrotik防火墙,我习惯于这样做:
还有更多。 我build议阅读这个: http ://wiki.mikrotik.com/wiki/Dmitry_on_firewalling Mikrotik的语法是直接的,它包含良好的指向初学者。
关于XMAS数据包。
不同的扫描仪发送不同的XMAS的味道。 你所有的规则,而它应该匹配短语XMAS数据包的规范定义,实际上并没有捕获它们,因为NMAP发送它们。
应该是XMAS扫描的nmap -sX将不会被ALL ALL捕获。
ALL ALL等于FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG