1.理解iptables表和链
如图:netfilter钩子与iptables表和链的处理顺序
五个表
filter 主要用于过滤包,是系统预设的表,该表内建3个链:
INPUT,OUTPUT,FORWARD。INPUT链作用于进入本机的包,OUTPUT链作用于本机送出去的包,FORWARD链作用于那些跟本机无关的包。
nat表 主要用于网络地址转换,它也有三个链。
PREROUTING链的作用是在包刚刚到达防火墙时改变它的目的地址(如果需要的话),OUTPUT链的作用是改变本地产生的包的目的地址,POSTROUTING链的作用是在包即将离开防火墙时改变其源地址。
mangle表
主要用于给数据包做标记,然后根据标记去操作相应的包。这个表几乎不怎么用,除非像称为一个高级网络工程师。
raw表
可以实现不追踪某些数据包,默认系统的数据包都会被追踪,但追踪势必消耗一定的资源,所以可以用raw表来指定某些端口的包不被追踪。
security表,
在centos6中是没有的,他用于强制访问控制(MAC)的网络规则。
netfilter的5个链
PREROUTING: 数据包进入路由表之前。
INPUT:通过路由表后目的地为本机。
FORWARDING: 通过路由表后,目的地不为本机。
OUTPUT: 由本机产生,向外转发。
POSTROUTONG: 发送到网卡接口之前。
2.iptables 语法
[root@bogon ~]# getenforce
Enforcing 开启状态
[root@bogon ~]# setenforce 0
[root@bogon ~]# getenforce
Permissive 暂停状态,重启后恢复
2.1脚本编写
!/bin/sh
首先清除所有规则
iptables -F
#以下两行允许某些调用localhost的应用访问
iptables -A INPUT -i lo -j ACCEPT #规则1
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT#规则2
#以下一行允许从其他地方 ping
iptables -A INPUT -p icmp --icmp-type echo-reguest -j ACCEPT#规则3
#以下一行允许从其他主机、网络设备发送MTU调整的报文
#在一些情况下,例如通过工Psec VPN隧道时,主机的MTU需要动态减小
iptables -A INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT #规则4
#以下两行分别允许所有来源访问TCP 80、443端口
iptables -A INPUT -p tcp --dport 80-j ACCEPT #规则5
iptables -AINPUT -p tcp --dport 443 -jACCEPT#规则6
#以下一行允许104.224.147.43来源的IP访同TCP 22端口(OpenssH)
iptables -A INPUT -p tcp -s 104.224.147.431 --dport 22 -j ACCEPT #规则7
#以下一行允许104.224.147.43来源的IP访间 UDP 161端口(SNMP)
iptables -A INPUT-p tcp -s 104.224.147.431 --dport 161 -j ACCEPT #规则8#以下一行禁止所有其他的进入流量
iptables -A 工NPUT -j DROP#规则9 白名单机制的贯穿原则
#以下一行允许本机响应规则编号为01~08的数据包发出
iptables -A OUTPUT -m state--stace bonDuaJ AccBPTY#规则10
#以下一行禁止本机主动发出外部连接
iptables -AOUTPUT -jDROP #规则11 防止反弹
#以下一行禁止本机转发数据包
iptables -A FORWARD -DROP#规则12
3.iptables网络地址转换
3.1源地址转化
1.在服务器B上,指定其网络的默认网关是10.128.70.112(即服务器A的内网地址)。
2.在服务器A上,启用路由功能。启用的方法命令如下:
sysctl -w net.ipv4.ip_forward=1
3.在服务器A上,设置iptables规则如下:
iptables -t filter -A FORWARD -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to x.y.z.173 #eth0是服务器A的外网网卡,x.y.z.173是服务器A的外网IP
3.2目的地址转换
目的地址转换用于外部直接访问无外网IP的服务器B,命令如下:
iptables -t nat -A PREROUTING -d x.y.z.173 -p tcp -m tcp --dport 1521 -j DNAT --to-destination 10.128.70.111:1521 #改写目的地址为:10.128.70.111,目的端口为1521
iptables -t nat -A POSTROUTING -d 10.128.70.111 -p tcp -m tcp --dport 1521 -j SNAT --to-source 10.128.70.112 #改写源地址ip为服务器A的内网ip,此时在服务器B上相当于是与服务器A在进行通信
参考:
https://blog.csdn.net/weixin_42478365/article/details/120711982
。