企业中用硬件防火墙的场景是大多数,但有时候也仍是会用到iptables,因此作为运维工程师,使用iptables的作主机防火墙和网络防火墙的规则写法仍是须要掌握的,废话很少说,直接来干货。
mysql
主机防火墙规则web
修改默认入站出站策略为删除数据(修改时慎重考虑)sql
iptables -P INPUT DROP //删除全部入站数据shell
iptables -P OUTPUT DROP //删除全部出站数据服务器
若是是远程链接到服务器上进行防火墙的修改操做时,可能会涉及清空防火墙的操做,若是直接修改了默认策略为删除一切入站出站数据,一不当心来一条清空全部规则,此时的远程链接也就当即被阻止了,因此即使是想设置成最严格的白名单模式,最好是在默认状况下清空全部规则后先把xhell的放行规则写好以后,在其后面添加一条全部入站及出站数据都作删除处理的默认规则,即使不当心清除全部规则后,也不会出现远程链接都被阻止的严重后果,由于默认策略全部的入站出站数据都是被放行的。网络
开放x-shell链接端口运维
iptables -A INPUT -s Client-IP -d Server-IP -p tcp --dport 22 -j ACCEPT //放行x-shell入站数据ssh
iptables -A OUTPUT -s Server-IP -d Client-IP -p tcp --sport 22 -j ACCEPT //放行x-shell出站数据tcp
iptables -A INPUT -j DROPide
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后进行转发
前面一部分是主机防火墙须要用到的规则写法,后台一部分是网络防火墙的规则写法,固然本文只是抛砖引玉,更多场景及用法请触类旁通!