iptables在企业中的作用?
Linux防火墙其实指的是Linux下的Netfilter/Iptables;Iptables在企业中还是应用得非常广泛的。那么,它究竟应用在哪些方面呢?
1)很多中小企业和网吧利用iptables来作企业的NAT路由器,传统的路由器供企业内部员工上网。
2)IDC机房的服务器可以用Iptables硬件防火墙作为主机的防护措施,由于部署硬件防火墙需要很大投资,一般很少机房部署硬件防火墙。景安河南的民营互联网数据中心,自建的郑州BGP机房部署4台傲盾DDOS防火墙做集群。
3)iptables可以结合squid作为企业内部商务的透明代理。
4)当将iptables作为企业NAT路由器时,我们可以使用iptables的扩展模块屏蔽P2P流量,还可以禁止非法网页。
5)iptables还可以用于外网IP向内网IP映射。我们可以假设有一家ISP提供园区Internet接入服务,为了方便管理,该ISP分配给园区用户的ip地址都是内网IP,但是部分用户要求建立自己的web服务器对外发布信息。我们可以在防火墙的外部网卡上绑定多个合法IP地址,然后通过IP映射使发给其中某一个IP地址的包转发至内部用户的Web服务器上,这样内部的Web服务器也可以对外提供服务了。
6)iptables可以防止轻量级的DOS攻击。比如ping攻击及SYN洪水攻击,我们利用iptables来做相关安全策略还是很有效果的。
具体的详细的案例:
阻止指定IP地址
例:丢弃来自IP地址x.x.x.x的包
iptables -A INPUT -s x.x.x.x -j DROP
注:当你在log里发现来自某ip地址的异常记录,可以通过此命令暂时阻止该地址的访问以做更深入分析
例:阻止来自IP地址x.x.x.x eth0 tcp的包
iptables -A INPUT -i eth0 -s x.x.x.x -j DROP
iptables -A INPUT -i eth0 -p tcp -s x.x.x.x -j DROP
允许所有SSH的连接请求
例:允许所有来自外部的SSH连接请求,即只允许进入eth0接口,并且目标端口为22的数据包
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
使用multiport 将多个规则结合在一起
允许多个端口从外界连入,除了为每个端口都写一条独立的规则外,我们可以用multiport将其组合成一条规则。如下所示: 例:允许所有ssh,http,https的流量访问
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
负载平衡传入的网络流量
使用iptables可以实现传入web流量的负载均衡,我们可以传入web流量负载平衡使用iptables防火墙规则。 例:使用iptables nth将HTTPS流量负载平衡至三个不同的ip地址。
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
允许外部主机ping内部主机
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
允许内部主机ping外部主机
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
允许来自指定网络的MySQL连接请求
很多情况下,MySQL数据库与web服务跑在同一台服务器上。有时候我们仅希望DBA和开发人员从内部网络(192.168.100.0/24)直接登录数据库,可尝试以下命令:
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
防止DoS攻击
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
上述例子中:
-m limit: 启用limit扩展
–limit 25/minute: 允许最多每分钟25个连接(根据需求更改)。
–limit-burst 100: 只有当连接达到limit-burst水平(此例为100)时才启用上述limit/minute限制。
端口转发
例:将来自422端口的流量全部转到22端口。 这意味着我们既能通过422端口又能通过22端口进行ssh连接。启用DNAT转发。
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
除此之外,还需要允许连接到422端口的请求
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEP