iptables

把网络层的数据包转发到netfilter里,然后再根据iptables 里的filter表、nat表、mangle表、raw表设置的规则对数据包进行处理。iptable 配置文件目录/etc/sysconfig/iptables-config

一、contos7 安装iptables

#禁用firewalld 并取消开机启动
systemctl stop firewalld
systemctl disable firewalld
#安装 iptables-services
yum -install  -y iptables-services
#启动iptables 并配置开机启动iptables 
systemctl start iptables
systemctl enable iptables 

二、iptables 表与链

filter INPUT、OUTPUT、FORWARD
nat OUTPUT、PREROUTING、POSTROUTING
mangel INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

contos 7 iptables使用汇总_第1张图片

三、iptables 命令

iptables  -t [filter|nat|mangle] comand(子命令) chain(链)rules(规则)-j target(动作)

1、iptables 常用子命令

子命令 说明
-P --policy 定义默认策略
-L --list 查看iptables规则列表 可以加-v -n
-A --append 在规则列表的最后增加一条规则
-I --insert 在指定的位置插入一条规则,默认第一条
-D --delete 删除规则
-R --replace 替换或修改某条规则
-F --flush 删除表中所有规则
-Z 清空计数
-S 显示规则链的默认规则

2、iptable选项

选项 说明
-i --in-interface 指定数据包从哪个网络接口进入
-o --out-interface 指定数据包从哪个网络接口出去
-p --protocol 指定数据包的协议类型,如TCP UDP FTP等
-d --destination 指定数据包的目标地址
--sport 指定源端口
--dport 指定目标端口

3、iptables 常用扩展选项

1)-m state --state [NEW|ESTATBLISHED|INVALID|RELATED]基于状态的包过虑,指定检测哪种状态
数据包的四种连接状态:

状态 说明
INVALID 表示数据包的连接编程(session ID)无法辨识或编号不正确,指无效数据包
ESTABLISHED 表示数据包属于已经建立的某个连接
RELATED 表示数据包属于已经建立的连接,发起新建连接。
NEW 表示第一次请求发的数据包 (重设连接或者连接重导向)

2)-m icmp --icmp-type
icmp包有两种:
echo-request: 数字表示为8,源ping目标发出 的包
echo-reply: 数字表示为0,目标响应源发出的包
3)-m multiport 指定多个端口
--sports 指定多个源端口
--dports 指定多个目标端口
--ports 多个端口
4)-m iprange 指定ip段
--src-range 192.168.0.1-192.168.0.100 源ip段
--dst-range 192.168.0.1-192.168.0.200 目标ip段
5)-m limit --limit 设定单位时间内允许通过的数据包的个数,时间单位可以分为/second
/minute /hour /day,每个包的大小为1500字节即1.5KB 通常可以用来做限速。
--limit-burst 瞬间流量
6)-m connlimit --connlimit-above 限定最大连接数
7)-m mac --mac-source 过虑来源数据包的MAC地址,这个参数不可以用在OUTPUT链和 postrouting链上

4、iptables 的处理动作,即选项 -j 的参数

ACCEPT:接受数据包。

DROP:直接丢弃数据包,不给任何回应信息

REDIRECT:重定向、映射、透明代理。

SNAT:源地址转换。

DNAT:目标地址转换。

MASQUERADE:IP伪装(NAT),用于ADSL。是SNAT的一种特殊形式,适用于动态的,临时会变的IP上。

LOG:日志记录。在/var/log/messages文件中记录日志信息,除了记录对数据包不做任何动作。

5、iptables 永久保存及导入导出其他文件

#iptables 永久保存 规则文件 /etc/sysconfig/iptables ,iptables 启动时会加个这个文件里的规则。
#第一种方式
service iptables save
#第二种方式
iptables-save
# 导出
iptables-save > files
#导入
iptables-restore < files

四、iptables 安全实战

1、禁用除了服务所使用的端口外所有的端口

如WEB服务器,只开放80端口,并指定ssl 22端口的源ip

2、recnt模块常用参数

参数 函义
--name 设定列表名称,默认DEFAULT
--source 源地址,此为默认
--rdest 目标地址
--seconds 指定时间
--hitcount 命中次数
--set 将地址及时间戳记录到列表中
--rcheck 检查列表,并从第一个匹配开始计算时间
--update 检查列表,从最后一个匹配开始计算时间
--remove 后面跟列表名及地址,在相应的表里删除相应的地址

示例:只允许客户在60秒内向web发起10请求

#依次加入以下三条规则
iptables -I INPUT -p tcp --dport 80 -m state --state  ESTABLISHED -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --name --set -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --name httpdtables --seconds 60s --hitcount 10 -j DROP

由于iptables 的规则是从上往下执行的,所以先执行第三条,再执行第二条,最后才执行第一条

3、设置打开端口的密钥

当服务器收到548字节icmp echo-request 包时,打开ssh;当服务器收到1342字节的icmp echo-request 包时,关闭ssh。

iptables -A INPUT -p icmp  --icmp-type echo-request -m length --length 548 -j LOG --log-prefix "sshopen"
iptables -A INPUT -p icmp  --icmp-type echo-request -m length --length 548 -m recent --name ssh --set -j ACCEPT 
iptables -A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 60 --name ssh -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 1342 -m rec
ent --name ssh --remove -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
#把INPUT 的默认规则改为DROP
iptables -P INPUT  DROP

五、NAT表

1、iptables 实现NAT 地址转换

iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 192.168.0.1

2、iptables实现端口映射

#把192.168.0.1的1000端口映射到192.168.0.107的80端口
iptables -t nat -I  PREROUTING  -d 192.168.0.107 -p tcp --dport 80 -j DNAT --to 192.168.0.1:1000

六、mangle表的应用

#TTL 增加1
iptables -t mangle -A PREROUTING -j TTL --ttl-inc  1
#TTL 减少1
iptalbes -t mangle -A RPEROUTNG -j TTL --ttl-dec 1
#直接把TTL 设置为某个值
iptalbes -t mangle -A RPEROUTNG -j TTL --ttl-set 1000