企业中用硬件防火墙的场景是大多数,但有时候也还是会用到iptables,所以做为运维工程师,使用iptables的做主机防火墙和网络防火墙的规则写法还是需要掌握的,废话不多说,直接来干货。
主机防火墙规则
修改默认入站出站策略为删除数据(修改时慎重考虑)
iptables -P INPUT DROP //删除所有入站数据
iptables -P OUTPUT DROP //删除所有出站数据
如果是远程连接到服务器上进行防火墙的修改操作时,可能会涉及清空防火墙的操作,如果直接修改了默认策略为删除一切入站出站数据,一不小心来一条清空所有规则,此时的远程连接也就立即被阻止了,所以即便是想设置成最严格的白名单模式,最好是在默认情况下清空所有规则后先把xhell的放行规则写好之后,在其后面添加一条所有入站及出站数据都做删除处理的默认规则,即便不小心清除所有规则后,也不会出现远程连接都被阻止的严重后果,因为默认策略所有的入站出站数据都是被放行的。
开放x-shell连接端口
iptables -A INPUT -s Client-IP -d Server-IP -p tcp --dport 22 -j ACCEPT //放行x-shell入站数据
iptables -A OUTPUT -s Server-IP -d Client-IP -p tcp --sport 22 -j ACCEPT //放行x-shell出站数据
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
默认出站数据最好设置为放行已建立的连接,这样一来就不用单独放行每一条允许入站的数据的出站动作了
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
开放自己使用ping探测别人
iptables -A INPUT -p icmp --icmp-type 0/0 -j ACCEPT //放行ping响应入站
iptables -A OUTPUT -p icmp --icmp-type 8/0 -j ACCEPT //放行ping请求出站
开放别人使用ping探测自己
iptables -A INPUT -p icmp --icmp-type 8/0 -j ACCEPT //放行ping请求入站
iptabels -A OUTPUT -p icmp --icmp-type 0/0 -j ACCEPT //放行ping响应出站
开放回环检测
iptables -A INPUT -i lo -p icmp -j ACCEPT
开放http连接端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
开放https连接端口
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
http、https连接端口合并
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
开放mysql连接端口
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
开放fastcgi连接端口
iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
开放samba连接端口
iptables -A INPUT -p tcp multiport --dports 139,445 -j ACCEPT //开放samba主服务端口
iptables -A INPUT -p udp multiport --dports 137,138 -j ACCEPT //开放samba名称解析端口
开放ftp连接端口
iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT //开放ftp服务端口
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //开放相关、已建立的连接
开放nfs连接端口
首先到/etc/sysconfig/nfs文件中锁定端口
RQUOTAD_PORT=10001
LOCKD_TCPPORT=10002
LOCKD_UDPPORT=10002
MOUNTD_PORT=10003
STATD_PORT=10004
再开放锁定的多端口
iptables -A INPUT -p tcp multiport --dports 111,2049,10001:10004 -j ACCEPT
iptables -A INPUT -p udp multiport --dports 111,2049,10001:10004 -j ACCEPT
开放dns连接端口
iptables -A INPUT -p tcp --dport 53 -j ACCEPT //开放区域传送端口
iptables -A INPUT -p udp --dport 53 -j ACCEPT //开放解析查询端口
注意:测试防火墙的规则时可以先写一个计划任务(20分钟后清空防火墙规则)
网络防火墙规则
添加规则于FORWARD链,注意几个问题:
(1) 请求和响应报文均会经由FORWARD链,要注意规则的方向性;
第一条:iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
(2) 如果没有类似ftp的服务,状态中可以不用RELATED选项,如果有FTP服务,需要在网关上启用ftp连接追踪模块(nf_conntrack_ftp)
(3) 如果启用了连接追踪(conntrack)机制,注意网关主机所能够追踪的连接数的最大数量要符合需要,以免过多的连接被拒绝
参考规则写法:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p tcp -m multiport --dports 22,21,23,80,443,139,445 -m state --state NEW -j ACCEPT
iptables -A FORWARD -j DROP
iptables DNAT SNAT写法
web服务器的常用映射规则
iptables -t nat -I PREROUTING -p tcp -d 10.0.0.10 --dport 80 -j DNAT --to-destination 192.168.10.254:80
将所有目标地址为防火墙的外网地址10.0.0.10,目标端口为80的数据包修改目标地址为内网服务器的192.168.10.50,目标端口为80后进行转发
iptables -t nat -I POSTROUTING -p tcp -s 192.168.10.254 --sport 80 -j SNAT --to-source 10.0.0.10:80
将所有源地址为内网服务器192.168.10.254,源端口为80的数据包统一修改为防火墙的出口地址10.0.0.10,端口为80后进行转发
ssh服务的常用映射规则
iptables -t nat -I PREROUTING -p tcp -d 10.0.0.10 --dport 1024 -j DNAT --to-destination 192.168.10.254:22
将所有目标地址为防火墙的外网地址10.0.0.10,目标端口为1024的数据包修改目标地址为内网服务器的192.168.10.254,目标端口为22后进行转发
iptables -t nat -I POSTROUTING -p tcp -s 192.168.10.254 --sport 22 -j SNAT --to-source 10.0.0.10:1024
将所有源地址为内网服务器192.168.10.254,源端口为22的数据包统一修改为防火墙的出口地址10.0.0.10,端口为1024后进行转发
前面一部分是主机防火墙需要用到的规则写法,后台一部分是网络防火墙的规则写法,当然本文只是抛砖引玉,更多场景及用法请举一反三!