您的位置:首页 > 运维架构 > Linux

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

2015-11-23 20:09 761 查看
iptables四个表作用图:



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. 规则查看与清除

规则查看:

[code]iptables [-t tables] [-L] [-nv]


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

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


规则清除:

[code]iptables-save  //列出完整防火墙规则
iptables-save [-t table] //列出NAT表规则
iptables-save [-t table] [-FXZ]


选项解释
-F清除所有已制订的规则
-X除掉所有用户“自定义”的chain(或者说tables)
-Z将所有的chain的计数与流量统计都归零
例:

[code]iptables -F 
iptables -X
iptables -Z


3. 定义默认策略(policy)

当数据包不在我们设定的规则之内时,则该数据包的通过与否,是以Policy的设置为准

[code]iptables [-t table] -P [INPUT, OUTPUT, FORWORD] [ACCEPT, DROP]


选项解释
-P定义策略(policy)。注意这个 P 大写
ACCEPT该数据包可接受
DROP该数据包直接丢弃,不会让Client端知道为何被丢弃
范例:将本机的INPUT设置为DROP,其他设置为ACCEPT

[code]iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWORD ACCEPT


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

[code]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或网络
IP192.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的数据包都予以接受

[code]iptables -A INPUT -i lo -j ACCEPT


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

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


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

[code]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: 记录某个规则记录

[code]iptables -A INPUT -s 192.168.2.200 -j LOG


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

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

[code]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 的数据包

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


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

[code]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 就予以阻挡

[code]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 连接丢弃

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


6. iptables外挂模块: mac 与 state

网络是双向的,当我们放行数据包出去的时候同样也要放行对应的数据包进来,在管理上就有一定的困难。

iptables可以通过一个模块来分析这个想要进入的数据包是否为刚刚发出去的响应,如果是,则予以接受放行。这样就不用考虑远程主机是否进来的问题了。

[code]iptables -A INPUT [-m state] [--state 状态]


选项-解释
-m一些iptables的外挂模块
state状态模块
mac网卡硬件地址(hardware address)
–state一些数据包的状态
INVALID无效的数据包,例如数据破损的数据包状态
ESTABLISHED已经连接成功的连接状态
NEW想要建立连接的数据包状态
ESTABLISHED这个最常用、表示这个数据包时与主机发送出去的数据包相关
范例1:只要以建立连接或与已发出请求相关的数据包就予以通过,不合法的数据包就丢弃

[code]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 主机放开其连接

[code]iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT


选项解释
–mac-source来源主机的mac
7. ICMP数据包规则的比对:针对是否相应ping来设计

[code]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 可以进入本机

[code][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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: