Iptables防火墙基础知识及规则编写


Iptables是基于数据包过滤的linux免费开源防火墙,主要工作在osi七层的2、3、4层,如果编译内核,iptables也可以支持7层控制(squid代理+iptables)

容器、表、链相关知识

容器:形容包含或者属于的关系。

Iptables是表的容器,即iptables包含各个表。

表又是链的容器,即表里包含各个链。

链又是规则的容器,即链里包含各个规则。

Iptables的常见表、链以及相关关系

  1. Filter表:主要和主机自身有关,真正负责防火墙功能的(过滤流入流出数据包),是 iptables默认表

其中包含的链及其功能:

INPUT:负责过滤目标地址是本机的数据包,过滤进入主机的数据包

FORWARD:负责转发流经主机的数据包

OUTPUT:处理从主机流出的数据包

  1. NAT表:负责网络地址转换

其中包含的链及其功能:

OUTPUT:改变主机发出数据包的目的地址

PREROUTING:在数据包到达防火墙时进行路由判断之前执行的规则,改变数据包  的目的地址、目的 端口等

POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则,改变数据包  的源地址、源端口等

  1. Mangle:主要负责修改数据包中特殊的路由标记,如TTL\TOS\MARK等

总结关系如下(√表示包含,×表示不包含):

链(所有链名要大写)
INPUT FORWARD OUTPUT PREROTING POSTROUTING
Fillter × ×
NAT × ×
Mangle

规则编写

  • 禁用80端口

iptables -t filter -A INPUT -p tcp --dport 80 -j DROP

INPUT后面也可以直接加数字指定插入行

-t指定表名

-p协议

--dport目的端口,--sport源端口

-A换成-D表示删除(如:iptables -t filter -D INPUT -p tcp --dport 80 -j DROP)

-j 处理行为有:ACCEPT(允许) DROP(丢弃)REJECT(拒绝)

-A 默认插到结尾,如果是-I 默认插到开头

  • 禁止10.0.0网段连入

iptables -t filter -A INPUT -i ens33 -s 10.0.0.0/24 -j DROP

可以在-s前添加!表示非此网段

-i 表示该接口进 ,-o 表示该接口出

-s表示源,-d表示目的

  • 封端口范围52000-53000

iptables -A INPUT -p tcp --dport 52000:53000 -j DROP

  • 封多个端口100,101,102

iptables -A INPUT -p tcp -m multiport --dport 100,101,102 -j DROP

部署网关NAT 内网访问外网

1.有固定的外网地址

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 221.1.1.1

-s 内网网段

-o 网关的外网卡接口

--to-source 221.1.1.1 外网卡ip地址

2.变化的外网卡地址(ADSL)

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

部署内网服务器映射到外网接口

如:将内网web服务器192.168.1.10开放的9000端口映射到221.1.1.1的80端口上,此时访问221.1.1.10:80就会访问到192.168.1.10:9000

iptables -t nat -A PREROUTING -d 221.1.1.1 -p tcp --dport 80 -j DNAT --todestination 192.168.1.10:9000

 

声明:朱木木的博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Iptables防火墙基础知识及规则编写


Carpe Diem and Do what I like