
1.iptables 过滤原理
包过滤: IPTABLES采用【数据包】过滤机制,它对请求的数据包进行分析,并更具我们预先设置的规则进行匹配来决定是否可以进入主机。
iptables的4表5链: iptables内部结构细化分为:以功能区分称为表; 以iptables动作区分称为链。 iptables(用户空间) —> netfilter(内和空间)—> tables(4表)—> chains(5链) —> 规则policy。
tables四表作用:
- filter(主机防火墙):对主机的数据包进出进行控制,主要是iptables默认的表;表中包含的对应的链:INPUT(进入)、OUTPUT(出去)、FORWARD(流经、转发)。
- nat:用于端口或者IP映射或共享上网;表中包含的链:POSTROUTING(流出主机后路由)、PREROUTING(进入主机前路由)、OUTPUT(流出主机)。
- mangle:用于配置路由标记 ttl \ tos \ mark(拆解报文,做出修改,并重新封装);表中包含的链:INPUT、OUTPUT、FORWARD、POSTROUTING、PREROUTING。
- raw:关闭nat表上启用的连接追踪机制;表中包含的链:OUTPUT、PREROUTING。
chains链的作用:
- INPUT:进入主机的数据包;主机防火墙最关键的链(filter表的INPUT链)。
- OUTPUT:流出主机的数据包。
- FORWARD:流经主机的数据包。
- PREROUTING:进入服务器最先经过的链,NAT端口或IP映射。(nat表的PREROUTING链)
- POSTROUTING:在流出服务器最后经过的链,NAT共享上网。局域网共享上网(nat表的POSTROUTING链)
# 1.查看iptables规则(需要序列)iptables -nL --line-numbers # 查看全部链iptables -nL INPUT --line-numbers # 查看INPUT链上的规则# 2.规则的删除iptables -t filter -D INPUT 1 # 删除INPUT链中,的第一条规则(编号通过 --line-numbers查询)iptables -F # 清空所有的规则,只留下默认规则iptables -X # 清除用户自定义的链
# 配置规则iptables -I INPUT 2 # 指定位置插入规则iptables -t filter -A INPUT -i eth0 -s 10.0.0.0/24 -j DORP # 禁止网段访问iptables -A INPUT -s ! 10.0.0.0/24 -j DROP # 禁止的取反,根据规则;其实可以指定ACCEPTiptables -A INPUT -m iprange --src-range 127.12.12.50-127.12.12.150 -j ACCEPT #匹配源IPiptables -A INPUT -m iprange --dest-range 8.8.8.2-8.8.8.22 -j DROP #匹配目标IP# 匹配端口范围--sport 22:88-m multiport --dport 21,22,23,23306,1205:1400# 匹配网络状态 -m state --state#允许关联的状态包通过,一般用于ftp服务iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 1. 许出不许进,最安全的配置iptables -P INPUT DROP # 也是默认配置iptables -P FORWARD DROPiptables -P OUTPUT ACCEPT# 开启新人的IP段iptables -A INPUT -p all -s 124.43.62.96/27 -j ACCEPTiptablse -A INPUT -p al -s 192.168.30.0/24 -j ACCEPT# 允许访问的端口iptables -A INPUT -p tcp --dport 23306 -j ACCEPTiptables -A INPUT -p tcp -m multiport --dport 21,23,10010:10050 -j ACCEPTiptables -A INPUT -p tcp -m multiport --dport 21,23,10010:10050 -j ACCEPT#让服务器可以进行域名解析iptables -A INPUT -p udp --dport 53 -j ACCEPTiptables -A INPUT -p udp --sport 53 -j ACCEPT# 允许所有人pingiptables -A INPUT -p icmp -m icmp 00icmp-type any -j ACCEPT#让服务器可以pingiptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPTiptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT#让服务器自身可以上网iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#场景:浏览器中访问 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:8088iptables -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来联机#实现外网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/20 -d 124.42.34.112 -j SNAT --to-source 10.0.0.254iptables -t nat -A PREROUTING -d 124.42.34.112 -j DNAT --to-destination 10.0.0.8iptables -t nat -A POSTROUTING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.42.34.112
参考文档:
