10.13 netfilter5表5链介绍
netfilter有下面5个表:
filter表:主要用于过滤包,是系统预设的表
nat表:主要用于网络地址转换,它有三个链
mangle表:主要用于给数据包做标记,然后根据标记去操作相应的包
raw表:可以实现不追踪某些数据包,默认系统的数据包都会被追踪
security表:用于强制访问控制的网络规则
5个链:
PREROUTING:数据包进入表之前
INPUT:通过路由表后目的地为本机
FORWARD:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外转发
POSTROUTING:发送到网卡接口之间
各个表和链之间的关系表,没画好 待补充
10.14 iptables语法
iptables 并不是防火墙,真正的防火墙叫做 netfilter,iptables只是一个实现工具。iptables是网络管理员的必备工具,作为系统管理员,要了解基本的操作。
iptables 基本语法
1.1、查看规则以及清除规则
查看规则
-t table 跟表的名字,不加-t默认是 filter
-nvL 查看
-n 不针对 IP 反解析主机名
-L 列出
-v 列出详细信息
#iptables -t nat -nvL
#iptables -nvL
1.2清除规则
-t 跟表名,不加默认filter
-F 把所有规则删除
-Z ZERO 表示把包及流量计数器 置零
#iptables -F 所有新增的规则都删除
#iptables -Z 所有规则的前两列抓包的数量和大小都会清零
Chain INPUT (policy ACCEPT 3 packets, 763 bytes)
pkts bytes target prot opt in out source destination
582 50129 ACCEPT all -- * * 192.168.247.1 0.0.0.0/0
-Z 只会清除582 50129 这一行,Chain INPUT 上面的数据不会清零。
2、增加删除一条规则
#iptables -A INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP
-t 表名,不加默认filter
-A 增加一条规则 后跟链tab表里面的链如 INPUT OUTPUT FORWORD
-I 插入一条规则 也可以是其他表的链
-D 删除一条规则
-s 跟源地址IP 可以是IP段 192.168.0.101/122
-d 目的IP(主要针对内网或者外网) 可以使IP段
-p 跟协议 tcp udp icmp(内网通信协议,TCP的子协议,在网络层),就是ping包
--sport 源端口 source
--dport 目标端口 destination
-j 后跟动作 DROP 丢包;REJECT 拒绝;ACCEPT 允许
#iptables -I INPUT -s 1.1.1.1 -j DROP 【插入一条规则,来自1.1.1.1的包丢掉】
#iptables -D INPUT -s 1.1.1.1 -j DROP 【删除规则。删除的时候,必须和增加的一模一样】
#iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP
【把来自2.2.2.2并且是tcp协议到本机80端口的数据丢掉丢掉。说明:--dport 和 --sport 必须和 -p 一起使用。可以只指定 -p,而不指定dport或者sport,如果指定port必须和 -p 一起用】
#iptables -I OUTPUT -p tcp --dport 22 -d 10.0.1.14 -j DROP 【插入,tcp协议到10.0.1.14的22端口的数据包丢掉】
#iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT 【来自192.168.1.0-24 IP段并且作用在 eth0上的包放行。】
iptables -I INPUT -m iprange --src-range 61.4.176.0-61.4.191.255 -j DROP 【针对一个网段】-m iprange --src-range 这个参数针对一个网段的 -m指定调用的模块
-I和-A都是增加一条规则,-I直接插在最前面,优先级高于A,-A放在最后面。
删除一条规则,删除规则
因为删除的时候,必须和当时建立的规则一模一样,但是很容易忘记,有方便的方法如下。
iptables -nvL --line-numbers 查看iptables
#iptables -D INPUT 1 【1指的是上面的第一行】
把规则保存
#iptables -F 把当前规则清除,暂时性的,重启系统或者重启iptables会加载之前的规则
iptables -I INPUT -s 192.168.247.1 -j ACCEPT
#service iptables save
#cat /etc/sysconfig/iptables 【查看iptables配置文件】
cat /etc/sysconfig/iptables
Generated by iptables-save v1.4.7 on Thu Feb 23 17:27:36 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [104:9904]
-A INPUT -s 192.168.247.1/32 -j ACCEPT
COMMIT
Completed on Thu Feb 23 17:27:36 2017
除了可以保存到自定义的文件中,还可以保存到指定的文件里面。
#iptables-save > 1.ipt 【重定向到1.cpt】
#cat 1.ipt 【查看内容,发现和iptables保存内容一致】
#iptables -F 【规则清空】
#iptables-restore < 1.ipt 【反向重定向】
补充说明
-P 预设策略
iptables -nvL
Chain INPUT (policy ACCEPT 3 packets, 763 bytes)
pkts bytes target prot opt in out source destination
582 50129 ACCEPT all -- * * 192.168.247.1 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 75 packets, 9389 bytes)
pkts bytes target prot opt in out source destination
#iptables -P INPUT DROP
-P 跟链名称,策略内容或者为DROP 或者为 ACCEPT,默认 ACCEPT。注意:如果在连接远程服务器,不用随便用这个命令,一旦敲完就会断掉。
策略设定后,只能用 iptalbes -P INPUT ACCEPT 才能恢复成原始状态,而不能使用-F参数
需求:针对filter表,预设策略 INPUT 链 DROP,其他两个链 ACCEPT,针对192.168.137.0/24 开通22端口,对所有网段开放80端口,所有网段开放21端口。
因为多条规则,建议写脚本,因为一旦预设策略改为了DROP,其他的后续操作都不能进行下去。
#cat /usr/local/sbin/iptales.sh
#! /bin/bash
ipt='/sbin/iptables'
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -s 192.168.137.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT