首页 > 代码库 > iptables防火墙(一)
iptables防火墙(一)
Linux的防火墙主要工作在网络层,针对TCP/IP数据包实现过滤和限制,属于包过滤防火墙(或称为网路层防火墙)。
1.LINUX防火墙:Netfilter和iptables的主要区别如下:
netfilter :位于Linux内核中的包过滤功能体系
称为Linux防火墙的“内核态”
iptables :位于/sbin/iptables,用来管理防火墙规则的工具
称为Linux防火墙的“用户态”
规则的作用:对数据包进行过滤或处理
2.规则表:
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
默认包括4个规则表
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
3.规则链
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
默认包括5种规则链
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
4.默认的表、链结构示意图
6.规则表之间的顺序
raw?mangle?nat?filter
6.规则链之间的顺序
入站:PREROUTING?INPUT
出站:OUTPUT?POSTROUTING
转发:PREROUTING?FORWARD?POSTROUTING
7.规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理
8.基本语法:
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
默认处理filter表
9.数据包的常见控制类型
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配
例子:在filter表的input链中插入(-I)一条规则,拒绝发给本机的icmp协议的数据包
[root@crushlinux~]# iptables -t filter -I INPUT -p icmp -j REJECT
10.添加新的规则
选项:
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则
-D: 删除指定链中的某一条规则
-L:制定并列出
-F:清空指定链中的所有规则
-P:设置指定链中的默认策略
-n:使用数字形式
-v:查看规则列表时显示详细信息
-h:查看命令的详细信息
-line-numbers:查看并显示序列号
添加一条防火墙规则
[root@crushlinux ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
添加的两条规则分别位于filter表的第一条和第二条
[root@crushlinux~]# iptables -I INPUT -p udp -j ACCEPT [root@crushlinux~]# iptables -I INPUT 2 -p icmp -j ACCEPT
12.查看规则表
[root@crushlinux~]# iptables -L INPUT --line Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT udp -- anywhere anywhere 2 ACCEPT icmp -- anywhere anywhere 3 REJECT icmp -- anywhere anywhere reject-with icmp-port-unreachable 4 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED 5 ACCEPT icmp -- anywhere anywhere 6 ACCEPT all -- anywhere anywhere 7 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh 8 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited 9 ACCEPT tcp -- anywhere anywhere
13. 删除,清空规则
[root@crushlinux~]# iptables -n -L INPUT Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
删除INPUT
[root@CentOS6-node1 ~]# iptables -D INPUT 3
14.设置默认策略
在iptables的各条链中,默认策略是规则匹配的最后一个环节,当找不到任何一条能够匹配数据包的规则时,则执行默认策略
[root@crushlinux~]# iptables -t filter -P FORWARD DROP
[root@crushlinux~]# iptables -t filter -P OUTPUT ACCEPT
15.通用匹配
1)协议匹配
丢弃通过icmp协议访问防火墙本机的数据包,允许转发经过防火墙的除icmp协议之外的数据包
[root@crushlinux~]# iptables -I INPUT -p icmp -j DROP
[root@crushlinux~]# iptables -A FORWARD ! -p icmp -j ACCEPT
2)地址匹配
拒绝转发源地址为192.168.1.11的数据,允许转发源地址位于192.168.7.0/24网段的数据
[root@crushlinux~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT [root@crushlinux~]# iptables -A FORWARD -s 192.168.7.0/24 -j ACCEPT
3)网络接口匹配
若要丢弃从外网接口访问访问防火墙本机且源地址为私有地址的数据包
[root@crushlinux~]# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP [root@crushlinux~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP [root@crushlinux~]# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
隐含匹配
1) 端口匹配
允许为网段192.168.4.0/24转发DNS查询数据包
[root@crushlinux~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT [root@crushlinux~]# iptables -A FORWARD -d 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
1) ICMP类型匹配
要禁止从其他主机ping本机,但是允许本机ping其他主机
[root@crushlinux~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP [root@crushlinux~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT [root@crushlinux~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT [root@crushlinux~]# iptables -A INPUT -p icmp -j DROP
列出所有支持类型
[root@crushlinux~]# iptables -p icmp –h Valid ICMP Types: any echo-reply (pong) destination-unreachable network-unreachable host-unreachable ……………………………………………..
显示匹配
1) 多端口匹配
允许本机开放25,80,110,143端口
[root@crushlinux ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
2) IP范围匹配
禁止192.168.4.21-192.168.4.28之间的TCP数据包
[root@crushlinux ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
3) MAC地址匹配
根据mac地址封锁主机
[root@crushlinux ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:a9:8a:dc -j DROP
4) 状态匹配
禁止转发与正常TCP连接无关的非—syn请求数据包
[root@crushlinux ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
只开放本机的80端口,但对发给本机的TCP应答数据包予以放行,其它入站数据包均丢弃,则对应的入站控制规则
[root@crushlinux ~]# iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT [root@crushlinux ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT [root@crushlinux ~]# iptables -P INPUT DROP
iptables防火墙(一)