四表:
(1)filter
(2)nat
(3)mangle
(4)raw
五链:都属于内核功能
(1)INPUT
(2)OUTPUT
(3)FORWARD
(4)POSROUTING
(5)PREROUTING
filter表:iptables_filter模块
默认使用的表,当我们没有使用-t
指定表名的时候,那么添加的规则就会进入filter
表,主要用于过滤经过主机的包,包括INPUT
,FORWARD
,OUTPUT
这三个链。也就是说所有从这三个链进过的包,iptbales_filter模块都会对照着filter表来“盘问”一番。
nat表:iptables_nat模块
用于进行网络地址转换(network address translation),包括PREROUTING
,POSROUTING
,OUTPUT
这三个链。
mangle表:iptabes_mangle模块
用于改造一些特殊的报文,这个链最特殊,包含了所有五个链:INPUT
,OUTPUT
,FORWARD
,PREROUTING
,POSTROUTING
。
raw表:iptables_raw模块
关闭nat
表上的连接追踪机制,主要包含OUTPUT
,PREROUTING
链。
注意:这四个表的匹配顺序为: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
##允许这些端口进入,15000:15010表示端口范围
多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
##其他主机添加一条到本机的默认路由
来源:CSDN
作者:ppplaybook
链接:https://blog.csdn.net/weixin_42768584/article/details/103189993