其实Iptables服务不是真正的防火墙,只是用来定义防火墙规则功能的"防火墙管理工具",将定义好的规则交由内核中的netfilter即网络过滤器来读取,从而真正实现防火墙功能。filter表
核心功能:用于主机防火墙
常用命令iptables -nL --line-number #查看iptables规则(列出序号) iptables -t filter -D INPUT 1 #通过序号删除链中的规则(或者原添加规则命令中直接-A/-I换成-D也可删除) #查看iptables默认加载的内核模块 lsmod| egrep "nat|filter" iptables -F #清除所有规则,只留下默认规则 iptables -N #创建用户自定义的链 iptables -X #清除用户自定义的链 iptables -Z #链的计数器清零 iptables -t filter -A INPUT -p tcp --dport 22 -j DROP #-j jump #-A 添加规则到链的结尾,最后一条 -I 插入规则到链的开头,第一条。 越靠前的规则优先级越高。 iptables -I INPUT 2 #指定位置插入规则,插入到INPUT链的第二行 #禁止10.0.0.0网段连入 iptables -t filter -A INPUT -i eth0 -s 10.0.0.0/24 -j DROP #取反匹配(不同centos版本!位置有变化) iptables -t filter -A INPUT -i eth0 -s ! 10.0.0.0/24 -j DROP #-p协议 (all, tcp, udp, icmp),默认all iptables -A INPUT -m iprange --src-range 13.32.4.168-13.32.4.176 -j ACCEPT #匹配源IP iptables -A INPUT -m iprange --dest-range 8.8.8.2-8.8.8.22 -j DROP #匹配目标IP #匹配端口范围 --sport 22:80 -m multiport --dport 21,22,23,80,3306 #匹配网络接口 -i 匹配包进入的网卡 -o 匹配包流出的网卡 #icmp有很多类型,--icmp-type 8代表ping #禁ping iptables -I INPUT -p icmp --icmp-type 8 -j DROP iptables -I INPUT -p icmp --icmp-type 8 -s 10.0.0.0/24 -j ACCEPT #匹配网络状态 -m state --state #允许关联的状态包通过,一般用于ftp服务,比喻:看电影出去接电话或者WC,回来也得允许进去 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT企业级防火墙部署
#不允许进和转发,只允许出。最安全的 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT #开启信任的IP网段(多网卡) iptables -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT #允许访问80端口 iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许所有人ping iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT #允许关联的状态包 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT保存
#保存iptables配置,2种保存方式 /etc/init.d/iptables save iptables-save > /etc/sysconfig/iptables #iptables维护可以通过直接编辑/etc/sysconfig/iptables vim /etc/sysconfig/iptables /etc/init.d/iptables restart|reload #编辑后重启nat表
核心功能:IP及端口的映射转换,主要应用于以下2点: 1.共享上网 2.端口映射 首先说说局域网内封包的传送: 1. 先经过 NAT table 的 PREROUTING 链; 2. 经由路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步; 3. 再经过 Filter table 的 FORWARD 链; 4. 通过 NAT table 的 POSTROUTING 链,最后传送出去。 NAT 主机的重点就在于上面流程的第 1,4 步骤,也就是 NAT table 的两条重要的链:PREROUTING 与POSTROUTING。 那这两条链重要功能在于修改IP,而这两条链修改的IP又是不一样的,POSTROUTING在修改来源IP,PREROUTING则在修改目标IP 。由于修改的 IP 不一样,所以就称为来源NAT (Source NAT, SNAT) 及目标 NAT (Destination NAT, DNAT)。共享上网
#载入内核模块 modprobe ip_tables modprobe iptables_filter modprobe iptables_nat modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ipt_state #局域网共享 #方法1: 适合于有固定外网IP的,在有固定外网IP的服务器执行: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7 #192.168.1.0/24是内网地址段(办公室或IDC内网段),10.0.0.7是外网IP #方法2:适合变化的外网地址(ADSL) iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE #MASQUERADE 表示伪装,外网IP地址不稳定的情况即可使用MASQUERADE(动态伪装),能够自动的寻找外网地址并改为当前正确的外网IP地址为什么用POSTROUTING
企业共享上网
1.办公室共享上网。网管要有外网IP,否则用路由
2.IDC内网机器上网
端口映射#场景:浏览器中访问 13.32.4.61:8088,能够映射转换到13.32.161.250:8088 #在13.32.4.61上执行 iptables -t nat -A PREROUTING -d 13.32.4.61 -p tcp --dport 8088 -j DNAT --to 13.32.161.250:8088 iptables -t nat -A POSTROUTING -d 13.32.161.250 -p tcp --dport 8088 -j SNAT --to 13.32.4.61 #还可以使用REDIRECT单独进行端口转换 #例:将 80 端口的封包转递到 8080端口 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 # 使用 8080 这个 port 来启动 WWW ,但是别人都用80来联机iptables常用企业案例
- linux主机防火墙(表:filter 链:INPUT)
- 局域网机器共享上网(表:nat 链:POSTROUTING)
- 外部地址和端口,映射为内部地址和端口(表:nat 链:PREROUTING)#实现外网IP 124.42.34.112 一对一映射到内部 10.0.0.8
#网关IP eth0:124.42.60.109 eth1:10.0.0.254
#首先在路由网关上绑定VIP 124.42.34.112,可以是别名的方式。
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.240.0 -d124.42.34.112 -j SNAT --to-source 10.0.0.254
iptables -t nat -A PREROUTING -d 124.42.34.112 -j DNAT --to-destination 10.0.0.8
iptables -t nat -A POSTROUTING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.42.34.112



