【Linux应用层】防火墙iptables命令

iptables四个表作用图:

【Linux应用层】防火墙iptables命令_第1张图片

iptables的四个表:
raw表有2个链:prerouting、output
mangle表有5个链:prerouting、postrouting、input、output、forward
nat表有3个链:prerouting、postrouting、output
filter表中有3个链:input、output、forward

命令

1. iptables打印信息解释

字段 解释
target 代表进行的操作。ACCEPT,放行;REJECT,拒绝;DROP,丢弃
prot 代表使用的数据包协议,主要有TCP、UDP、ICMP
opt 额外的选项说明
source 代表此规则是针对哪个来源IP进行限制
destination 代表此规则是针对哪个目标IP进行限制

2. 规则查看与清除
规则查看:

iptables [-t tables] [-L] [-nv]
选项 参数解释
-t 后面接table,例如nat或filter,若省略此项目,则默认使用filter
-L 列出目前的table规则
-n 不进行IP与HOSTNAME的反查,显示信息速度会快很多
-v 列出更多信息,包括通过该规则的数据包总位数、相关的网络接口等

例:

iptables -L -n  //列出filter table 3条链的规则
iptables -t nat -L -n  //列出nat table 3条链的规则

规则清除:

iptables-save  //列出完整防火墙规则
iptables-save [-t table] //列出NAT表规则 iptables-save [-t table] [-FXZ] 
选项 解释
-F 清除所有已制订的规则
-X 除掉所有用户“自定义”的chain(或者说tables)
-Z 将所有的chain的计数与流量统计都归零

例:

iptables -F 
iptables -X
iptables -Z

3. 定义默认策略(policy)
当数据包不在我们设定的规则之内时,则该数据包的通过与否,是以Policy的设置为准

iptables [-t table] -P [INPUT, OUTPUT, FORWORD] [ACCEPT, DROP]
选项 解释
-P 定义策略(policy)。注意这个 P 大写
ACCEPT 该数据包可接受
DROP 该数据包直接丢弃,不会让Client端知道为何被丢弃

范例:将本机的INPUT设置为DROP,其他设置为ACCEPT

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWORD ACCEPT

4. 数据包的基础比对:IP、网络及接口设备

iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源 IP/网络] [-d 目标 IP/网络] -j [ACCEPT|DROP|REJECT|LOG]
选项 - 解释
-AI 链名 针对某条链进行规则的“插入”或 “累加”
-A 在原规则末尾新增加一条规则
-I 插入一条规则, 默认是插入变成第一条规则
有INPUT、OUTPUT、FOPRWARD等,此链名称又与 -io 有关
-io 网络接口 设置数据包进出接口规范
-i 数据包所进入的那个接口,如eth0, lo接口,需与INOUT配合
-0 数据包所传出的那个接口,需与OUTPUT配合
-p 协定 设置此数据包适用于那种数据包格式。常用的有:tcp、udp、icmp及all
-s 来源 IP/网络 设置此规则之数据包来源地,可指定单纯的IP或网络
IP 192.168.0.100
网络 192.168.0.0/24、 192.168.0.0/255.255.255.0 均可。 -s ! 192.168.100.0/24 表示不接受 192.168.100.24.0/24 发来的数据包
-d 目标 IP/网络 同 -s ,只不过这里表示的是目标的IP或网络
-j 后面接操作 主要的操作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG)

范例1:设置lo成为受信任的设备,即 进出lo的数据包都予以接受

iptables -A INPUT -i lo -j ACCEPT

范例2:只要是来自内网的(192.168.100.0/24)的数据包就通通接受

iptables -A IMPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT

范例3:接受来自192.168.100.10的数据,丢弃来自192.168.100.230的数据

iptables -A INPUT -i eth1 -s 192.168.100.10 -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP

范例4: 记录某个规则记录

iptables -A INPUT -s 192.168.2.200 -j LOG

只要数据包来自192.168.2.200这个IP时,该数据包的相关信息就会被写入到内核日志文件(var/log/messages)中,然后该数据包会继续进行后续的规则比对

5. TCP、UDP的规则比对:针对端口设置

iptables [-AI 链] [-io 网络接口] [-p tcp,udp] [-s 来源 IP/网络] [--sport 端口范围] [-d 目标 IP/网络] [--drop 端口范围] -j [ACCEPT|DROP|REJECT]
选项 - 解释
–sport 端口范围 限制来源的端口号码,端口可以是连续的,例如:1024:65535
–dport 端口范围 限制目标端口号码

注意:因为仅有TCP与UDP数据包具有端口,因此想要使用-dport、–sport时,需要加上 -p tcp 或 -p udp 的参数才会成功。

范例1:阻挡进入本机 port 21 的数据包

iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP

范例2:想连到本台主机的网上邻居(udp port 137, 138 tcp port 139, 445)就放行

iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT

范例3:来自 192.168.1.0/24 的 1024:65535 端口的数据包,且想要连接到本机的 ssh port 就予以阻挡

iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --port 1024:65534 --dport ssh -j DROP

范例4:将来自任何地方来源 port 1:1023 的主动连接到本机端的 1:1023 连接丢弃

iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --drop 1:1023 --syn -j DROP

6. iptables外挂模块: mac 与 state
网络是双向的,当我们放行数据包出去的时候同样也要放行对应的数据包进来,在管理上就有一定的困难。
iptables可以通过一个模块来分析这个想要进入的数据包是否为刚刚发出去的响应,如果是,则予以接受放行。这样就不用考虑远程主机是否进来的问题了。

iptables -A INPUT [-m state] [--state 状态]
选项 - 解释
-m 一些iptables的外挂模块
state 状态模块
mac 网卡硬件地址(hardware address)
–state 一些数据包的状态
INVALID 无效的数据包,例如数据破损的数据包状态
ESTABLISHED 已经连接成功的连接状态
NEW 想要建立连接的数据包状态
ESTABLISHED 这个最常用、表示这个数据包时与主机发送出去的数据包相关

范例1:只要以建立连接或与已发出请求相关的数据包就予以通过,不合法的数据包就丢弃

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A INPUT -m state --state --state INVALID -j DROP

范例2:针对局域网内的 aa:bb:cc:dd:ee:ff 主机放开其连接

iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
选项 解释
–mac-source 来源主机的mac

7. ICMP数据包规则的比对:针对是否相应ping来设计

iptables -A INPUT [-p icmp] [--icmp-type 类型] -j ACCEPT
选项 解释
–icmp-type 后面必须要接 ICMP 的数据包类型,也可以使用代号,例如:8 代表 echo request 的意思

范例:让 0,3,4, 11,12,14,16,18 的 ICMP type 可以进入本机

[root@F12 ~]# vi somefile
#!/bin/bash
icmp_type="0 3 4 11 12 14 16 18"
for typeicmp in $icmp_type
do
    iptables -A INPUT -i eth0 -p icmp --icmp-type $typeicmp -j ACCEPT
done
[root@F12 ~]# vi somefile

你可能感兴趣的:(linux,防火墙,iptables)