iptables四表五链

你说的曾经没有我的故事 提交于 2019-11-25 18:50:57

四表:
(1)filter
(2)nat
(3)mangle
(4)raw

五链:都属于内核功能
(1)INPUT
(2)OUTPUT
(3)FORWARD
(4)POSROUTING
(5)PREROUTING

filter表:iptables_filter模块

默认使用的表,当我们没有使用-t指定表名的时候,那么添加的规则就会进入filter表,主要用于过滤经过主机的包,包括INPUTFORWARDOUTPUT这三个链。也就是说所有从这三个链进过的包,iptbales_filter模块都会对照着filter表来“盘问”一番。

nat表:iptables_nat模块

用于进行网络地址转换(network address translation),包括PREROUTINGPOSROUTINGOUTPUT这三个链。

mangle表:iptabes_mangle模块

用于改造一些特殊的报文,这个链最特殊,包含了所有五个链:INPUTOUTPUTFORWARDPREROUTINGPOSTROUTING

raw表:iptables_raw模块

关闭nat表上的连接追踪机制,主要包含OUTPUTPREROUTING链。

注意:这四个表的匹配顺序为:raw-->mangle-->nat-->filter

iptables执行的动作:

ACCEPT: 对于匹配到的数据包不做修改,并允许通行本链

DROP: 匹配到的数据包直接丢弃,对请求方不作任何回应(我是一个冷酷的杀手,呵呵),请求方只有在超时时才会收到超时信息

SNAT: 源地址转换,如果本主机可以上网,则可以将本机作为网关,然后将其他内网的主机ip都转换为本机网卡ip,从而其他主机可以通过本主机上网。在LVS中也可以通过此方式来隐藏后端应用主机的真实ip。

DNAT: 目的地址转换,在负载均衡LVS中使nat模式中,代理主机收到客户端请求的时候会将请求的目的地址修改为后端应用服务器的内网ip。

REJECT: 直接拒绝,不过会返回一个数据包到源客户端

RETURN: 停止遍历此链

MASQUERADE: SNAT的特殊模式,适用于临时会变动的动态ip上

REDIRECT: 用于做端口映射

LOG: 用于将经过的数据包登记至/var/log/message中,并不会对数据包进行任何修改

iptables用法:

iptables [-t table] {-A|-C|-D} chain rule-specification 
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name,
-A:append,用于添加一个规则
-C:check,用于检查某个规则是否存在
-D:delete,删除负责
-I:Insert,插入一条规则
-R:replace,替换规则
-S:列出某个链里的所有规则,不指定则列出所有链的规则
-L:列出所有链的规则
-F:清空指定链的规则,不指定则清空所有链
-Z:清零某个链锁匹配的数据包的数量

快速入门:

~]# iptables -vnL ##显示所有链的规则
~]# iptables -t filter -vnL ##显示filter表的规则
~]# iptbales -t filter -A INPUT -s 192.168.99.1 -j ACCEPT
~]# iptables -t filter -A INPUT -s 192.168.99.0/24 -j ACCEPT        ##对某个网络进行规则设置
~]# iptables -t filter -A INPUT -i ens33 -j DROP                    ##基于网卡设置规则
~]# iptables -t filter -A INPUT -i eth0 -d 192.168.99.111 -j ACCEPT 
~]# iptables -A INPUT -p tcp -s 192.168.99.1 --dport 3306 -j ACCEPT  ##允许特定主机访问本机3306端口
~]# iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT                ##多规则组合使用,并且将规则序号设置为1

禁ping

这么做的结果就是,别人ping本机的时候一直显示超时,但本机可以正常ping通其他主机

## 不想让其他主机ping通本机,但本机可以ping通其他主机
## 简单原理就是,丢弃ping入本机的的请求报文,远程主机收不到回应,一致等待直至超时
~]$ iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

多端口匹配

~]# iptables -A INPUT -p tcp -m multiport --dports 80,81,8080,8081,3306,22,15000:15010 -j ACCEPT
##允许这些端口进入,1500015010表示端口范围

多IP匹配

~]# iptables -A INPUT -p tcp --dport 22  -m iprange --src-range 192.168.99.100-192.168.99.110 -j ACCEPT
##允许此段主机ssh连入本机

SNAT配置

原理:开启本机的转发功能,通过配置使本机能够代理收发数据包,从而实现共享上网
前提:开启本机转发功能,另外云主机的SNAT功能是被云厂商关闭的,想要开启的话需要提需求
第一步:开启转发功能

~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
~]# sysctl -p

第二步:配置iptables规则

~]# iptables -t net -A POSTROUTING -s 192.168.99.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.99.100
##将192.168.99.0/24网络访问外网80端口的IP转换为192.168.99.100(本机IP)

第三步:设置路由

~]# route add -net 0.0.0.0/0 gw 192.168.99.100
##其他主机添加一条到本机的默认路由
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!