防火墙前提得是路由能通,这个封包能过来,封包进入本机
防火墙主机内部要有路由
防火墙链上(chain)规则是有先后顺序,封包表头信息满足某条规则就action,并不会进行下面的规则匹配,
如果上面的都没有匹配到,那么就执行默认的规则,也就是policy的action。
规则里先过滤精确的,在放通全部的就可以限制指定的IP
tables
filter 管理本机的表【默认的表】
input 从外部进入本机的封包。从外部主机访问本机时候
output 从本机发出的封包。从本机访问外部主机时候
forward 转发到后端主机上
nat 用在linux路由器主机上,管理防火墙内部的主机。进行来源ip+port与目的ip+port之间的转换。需要结合filter表中的forward链。
prerouting 进入本机。在进行路由判断之前进行的规则,修改目标IP地址。dnat
postrouting 从本机出去。在路由判断之后进行的规则,修改来源IP地址。snat
input
output
POSTROUTING 在修改来源 IP ,
PREROUTING 则在修改目标 IP 。
mangle 管理标志的
options 自定义表
查看指定表上的防火墙规则
v会显示统计信息
iptables -t nat -L -nv
iptables -t nat -L -n
列出防火墙的规则命令
iptables-save
iptables-save -t nat
防火墙规则解释
target代表要执行的动作,有ACCEPT DROP REJECT
prot 代表封包的协议,有tcp udp icmp
opt 额外说明
source 代表封包上的来源ip地址
destination 代表封包的上目标ip地址
清理防火墙规则
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
设定防火墙
1、设定防火墙filter表上的INPUT链上的默认策略为drop
iptables -t filter -P INPUT DROP
2、设定常见的参数
没有指定的参数,就是接受
-A 在原本规则最后面追加一条
-I 默认插入在第1条规则
-A 链名称
-i 封包进入的网卡名称,与INPUT链结合
-o 封包出去的网卡名称,与OUTPUT 链结合
-p 封包的协议,有tcp udp icmp all
-s 封包表头的来源地址,可以是ip,也可以网段
-s 192.168.1.1
-s 192.168.1.1/24
-s 192.168.1.1/255.255.255.0
如果不允许
-s ! 192.168.1.1
-d 封包表头上的目标地址,可以是ip,也可以网段
–sport 封包表头上的来源地址的端口,通常结合tcp或者udp协议使用
-p tcp --sport 1521
-p udp --sport 1521:1588
–dport 封包表头上的目标地址的端口,通常结合tcp或者udp协议使用
-j 动作,有ACCEPT DROP REJECT LOG
iptables -A INPUT -p tcp -s 172.16.0.131 -j DROP
iptables -A INPUT -p tcp -i eth0 -s 172.16.0.132 -j DROP
-m 外挂模块,state(状态模块)mac(网卡地址)
–state 封包状态
INVALID 无效封包
ESTABLISHED 已经联机成功的封包
NEW 想新建立联机的封包
RELATED 我们主机发送出去的封包有关
-m state --state ESTABLISHED,RELATED
-m mac --mac-source mac地址
禁ping
iptables -A INPUT -i eth34 -p icmp --icmp-type 8 -j DROP
常见的设定
- 清除规则
iptables -F
iptables -X
iptables -Z - 设定政策
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
3.制定规则
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p TCP -i $EXTIF --dport 80 --sport 1024:65534 -j ACCEPT
4.写入防火墙规则文件里/etc/sysconfig/iptables
/etc/init.d/iptables save
SNAT 用于内部主机访问外网
出去:POSTROUTING 经过路由后,将来源地址从私网ip修改成public ip
返回:PREROUTING 经过路由前,将目标地址从public ip修改成私网ip地址
eth1是内网网卡 eth0是外网网卡
iptables -A INPUT -i eth1 -j ACCEPT
echo “1” > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.0.20/24 -o ens32 -j MASQUERADE
直接修改ip
iptables -t nat -A POSTROUTING -o ens32 -j SNAT --to-source 192.168.1.100
DNAT 用于外部主机访问内部主机,外部先请求到linux路由器上,然后由DNAT将真正的需要转发到内部服务器上
进去:PREROUTING 经过路由之前,将目标地址从public ip修改成私网IP
回来:POSTROUTING 经过路由后,扔到了public ip上,将来源地址从私网ip修改成public ip
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
DNAT和SNAT刚好相反
iptables -t nat -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.16.0.20/24 -o ens32 -j MASQUERADE