4表5链:真实应用的时候只需要使用2表5链条
链是一组规则的集合。表里面包含过的链。
表:filter(默认表;过滤,处理端口和ip,实现白名单)net(进行源/目标地址转换,实现共享上网,端口和地址映射等)
链:INPUT:对进入本地的包进行访问控制(丢弃或者通过),比如外部想访问本地应用和服务时
OUTPUT: 对从本地出去的流量进行访问控制,比如自己想访问外部的应用和服务时
PREROUTING:在进入INPUT链前的访问控制,比如对目的ip地址进行修改
POSTROUTING:在OUTPUT链后面的访问控制,比如对源ip地址就行修改
FORWORD: 路过的包走的。
综上:做访问控制时,一般处理INPUT和OUTPUT链。且和filter表深度绑定
做地址转换时候,一般处理PREROUTING,POSTROUTING链,和net表深度绑定
全局管理命令:
iptables -F #清空默认防火墙规则
iptables -nL #查看默认表(filter)的规则
iptables-save > /etc/sysconfig/iptables #保存防火墙规则,重启后会自动加载改配置文件规则
iptables-restore < /etc/sysconfig/iptables #不想保存刚编辑的规则,从原规则的配置文件导入规则表来实现恢复。
iptables -t net -nL --line-number #查看net表的规则并显示规则编号
iptables -D INPUT 1 #删除默认表filter中INPUT链的第一条规则
生产环境白名单的配置
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT #默认表filter可以省略,-A表示新规则放在现有规则的后面,既然是对端口进行开放,不妨加上-p限制下协议。
iptables -A INPUT -i lo -j ACCEPT #这里就是略去了默认表filter
iptavles -A OUTPUT -o lo -j ACCEPT #从filter表中对本地流量的进和出进行开放
iptables -A INPUT -m multiport -p tcp --dport 80,443 -j ACCEPT #开放的服务,-m是使用模块,后面的--dport可以用逗号写多个端口
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT #开放的白名单网段
iptables -A INPUT -m state --state RELATED,ESTABLISHD -j ACCEPT #开放连接状态
iptables -A OUTPUT -m state --state RELATED,ESTABLISHD -j ACCEPT
iptables -P INPUT DROP #修改默认规则,变成默认drop
iptables-save #保存规则
#####以后在白名单中添加可放开的网段,就不能使用-A了,要换成-I,插入到原有规则的前面。因为规则是从上向下匹配的
iptables -t filter -I INPUT -s 192.168.100.0/24 -j ACCEPT
共享上网配置:想出去,在POSTROUTING上修改源地址
#内网的用户访问公网的服务。只要把内网用户的源地址改成公网出口的ip
#开启服务器的内核转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward #临时
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #永久生效
sysctl -p
#客户端的网关要指向防火墙,根据实际情况配置
#iptables转发
#公网ip固定的时候
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61 #SNAT标识修改的是源IP的地址
#公网ip不固定的转发
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
端口转发和映射:想进来,REROUTING链上,修改目标地址
iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --port 8080 -j DNAT --to_destination 172.16.1.7:22