linux防火墙iptables

Posted 遙遙背影暖暖流星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux防火墙iptables相关的知识,希望对你有一定的参考价值。

一、Linux防火墙简介

yum -y install iptables-services.x86_64    #安装

必须先关闭firewalld防火墙
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service    
安装iptables防火墙
[root@localhost ~]# yum -y install iptables-services.x86_64    #安装
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl enable iptables.service    //设置iptables开机启动

1、规则链的简介

规则的作用:对数据包进行过滤或者处理
链的作用: 容纳各种防火墙规则
链的分类依据:处理数据包的不同时机2、

2、默认的五种规则链:

(1)INPUT: 处理入站数据包
(2)OUTPUT: 处理出站数据包
(3)FORWARD: 处理转发数据包
(4)POSTROUTING链: 在进行路由选择后处理数据包
(5)PREROUTING链: 在进行路由选择前处理数据包
注意,这里是大写的字母(-A跟链名新增)

3、规则表的简单介绍

规则表的作用: 容纳各种规则链
表的划分依据:防火墙规则的作用相似

4、默认的四种规则表

(1)raw表: 确定是否对该数据包进行状态跟踪
(2)mangle表: 为数据包设置标记
(3)nat表: 修改数据包中的源、目标lP地址或端口
(4)filter表: 确定是否放行该数据包(过滤)
-t 跟表明,不写默认为filter,最常使用

5、基本语法

在这里插入图片描述

注意事项:

(1)不指定表名时,默认指filter表
(2)不指定链名时,默认指表内的所有链
(3)除非设置链的默认策略,否则必须指定匹配条件
(4)选项、链名、控制类型使用大写字母,其余均为小写
(5)当前命令行修改的内容的需要保存在配置文件中才能永久保存

iptables-save > /etc/sysconfig/iptables    //iptables-save可以看修改的规则,配置文件etc/sysconfig/iptables,

6、选项

管理选项

管理选项 用法示例
-A 在指定链末尾追加一条iptables -A INPUT
-I 在指定链中插入一条新的,未指定序号默认作为第一条iptables -I INPUT
-P指定默认规则iptables -POUTPUT ACCEPT
-D 删除iptables -t nat -D INPUT
-R 修改、替换某一条规则iptables -t nat -R INPUT
-L 查看iptables -t nat -L
-n 所有字段以数字形式显示(比如!任意ip地址是e.0.0.e而i不是anywhere,比如显示协议端口号而不是服务名)iptables -L -n,iptables -nL,iptables -vnL
-v 查看时显示更详细信息,常跟-L一起使用
–line-number 规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number
-F 清除链中所有规则 iptables -F
-X 清空自定义链的规则,不影响其他链iptables -X
-Z 清空链的计数器(匹配到的数据包的大小和总和) iptables -Z
-S 查看链的所有规则或者某个链的规则/某个具体规则后面跟编号 iptables -t nat -S、iptables -t nat -S POSTROUTING 1

控制选项(需大写)

ACCEPT 允许数据包通过
REJECT 拒绝数据包通过,必要时会给数据包发送端一个响应信息
DROP 直接丢弃数据包,不给任何回应
LOG 在/var/log/messages文件中记录日志信息,然后将数据包给下一条规则,它本身不处理数据包

-j +控制选项

添加新的规则

-A :在末尾追加一条规则
-I :在链的开头添加规则

7、顺序问题

1.规则表之间的顺序
raw→mangle→nat→filter

2.规则链之间的顺序
入站:PREROUTING→INPUT
出站: OUTPUT>POSTROUTING
转发:PREROUTING→FORWARD→POSTROUTING
3.规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理

每个表内从上到下执行


[root@localhost ~]# iptables -A INPUT  -p icmp -s 192.168.100.6 -j ACCEPT
[root@localhost ~]# iptables -A INPUT  -p icmp -s 192.168.100.6 -J DROP
[root@localhost ~]# iptables -vnL  --line-number
Chain INPUT (policy ACCEPT 67 packets, 4264 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        6   504 ACCEPT     icmp --  *      *       192.168.100.6        0.0.0.0/0     
#同时有拒绝和同意通过时 ,看谁在前面
2       2   168 DROP       icmp --  *      *       192.168.100.6        0.0.0.0/0

在这里插入图片描述

二,操作部分

1,查看

iptables -vnL   #常用搭配-vnL
iptables -vnL --line-number    #查看规则时并标序号
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 856 packets, 349K bytes)
 pkts bytes target     prot opt in     out     source               destination
    2   168 DROP       icmp --  *      *       192.168.100.6        0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0            all  --  *      *       192.168.150.0/24     192.168.160.0/24

Chain OUTPUT (policy ACCEPT 673 packets, 143K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0            icmp --  *      *       192.168.200.0/24     0.0.0.0/0

[root@localhost ~]# iptables -vnL --line-number
Chain INPUT (policy ACCEPT 889 packets, 351K bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        2   168 DROP       icmp --  *      *       192.168.100.6        0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0            all  --  *      *       192.168.150.0/24     192.168.160.0/24

Chain OUTPUT (policy ACCEPT 703 packets, 145K bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0            icmp --  *      *       192.168.200.0/24     0.0.0.0/0

2、删除规则

iptables -D [表名] [序号]

iptables -D INPUT 1  #删除INPUT表中的序号为1的规则
//如果不加表明会删除所有的表,只有表没有序号则会删除整个表
iptables -t filter -F   #清空所有规则
iptables -t filter -X   #清空自定义的链
iptables -t filter -Z   #清除计数器
#一般清除把三条全执行一次,保证不会有遗留

3,添加规则

-A 将规则追加到最后
-I 将该规则插入到最前面
-R 修改
-p 指定协议名,如tcp,udp,icmp,all等

-s 跟来源ip
-d 跟目标ip
-i 指定进站网卡
-o 指定出站网卡

! 表示非的意思
–sport 指定源端口
–dport 指定目标端口
-m multiport --sport (或者–dport ) 指定多个源端口或者目标端口,连续用:隔开,如20:80
-m mac --mac-source MAK地址 匹配mak地址

-m stare --state 使用连接状态的形式

常用连接状态
NEW:想要新建立联机的封包状态
ESTABLISHED:已经联机成功的联机状态
RELATED:表示这个封包是与我们主机发送出去的封包有关,可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定INVALID:无效的封包,例如I数据破损的封包状态

–icmp-type 匹配ICMP的类型

icmp类型:
Echo-Request:代码为8
Echo-Reply:代码为0

-m iprange --dst-range IP范围 #匹配多个ip地址

iptables -A  INPUT -p icmp -j REJECT  //不允许任何主机ping本主机
iptables -A INTPUT -p icmp -s 192.168.100.5  -j REJECT //不允许该ip的主机ping本主机

iptables -A 	OUTPUT -p icmp -d 192.168.100.6  -j  DROP //不允许本主机ping该ip的主机 
iptable -I OUTPUT ! -p icmp -j DROP     .// 丢弃icmp外的所有进站的数据包,并该规则置顶为序列1
iptables -t filter -A INPUT -j REJECT   //所有进站的包全部拒绝

修改-R

[root@localhost ~]# iptables -I INPUT -p icmp -s 192.168.100.8 -j REJECT   #先限制
[root@localhost ~]# iptables -vnL --line-number
Chain INPUT (policy ACCEPT 12 packets, 768 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     icmp --  *      *       192.168.100.8        0.0.0.0/0            reject-w

[root@localhost ~]# iptables -R INPUT 1 -j ACCEPT  #将第一条改为 ACCEPT ,不常用,实际删除在重新添加更好
[root@localhost ~]# iptables -vnL --line-number
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1       10   640 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0

iptables -A OUTPUT -p tcp -d 192.168.100.211 -j CROP
#禁止了对该ip的主机的tcp协议出站数据包
iptables -A FORWARDT -p tcp -s 192.168.100.6 -d 192.168.100.10  -j DROP
#禁止来自0.6的ip转发到0.10

iptables -A INPUT -i ens33 -j DROP   #禁止了该网卡进来的所有数据包
iptables -A OUTPUT -o ens33 -j DROP   #禁止了该网卡出去的所有数据包(似乎用的比较少)
iptables -A INPUT -i ens33 -s 192.168.100.10 -j DROP   #禁止了来该ip的数据包从该网卡进入
iptables -A INPUT ! -p icmp -j DROP  #禁止了非icmp的所有数据包


iptables -A INPUT -p tcp --dport 80 -s 192.168.254.100 -j DROP  
#禁掉了来自该ip,以tcp80端口为目标端口的(端口时也要指定协议 -p)

iptables -A INPUT -p tcp -m multiport --dport 80,20,100 -s 192.168.254.100 -j DROP  
#指定多个不连续端口
 iptables -A INPUT -p tcp -m multiport --dport 20:100 -s 192.168.254.100 -j DROP
 #指定多个连续端口,如2080
iptables -A OUTPUT -p icmp -m iprange --dst-range 192.168.100.2-192.168.100.102 -j DROP
#指定多个连续的ip地址 --dst-range
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.245.211 -j DROP
#不允许请求包通过
[root@localhost ~]# iptables -vnL --line-number
Chain INPUT (policy ACCEPT 19 packets, 1240 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       icmp --  *      *       192.168.245.211      0.0.0.0/0            icmptype 8


iptables -A INPUT -p icmp -m mac --mac-source 00:0c:26:f5:ac:58 -j DROP
#指定mak地址

iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许响应请求连续放行

iptables -save  #查看已修改的配置
iptables -save > /etc/sysconfig/iptables   #保存至配置文件,则关机重启依旧存在

以上是关于linux防火墙iptables的主要内容,如果未能解决你的问题,请参考以下文章

iptables基础知识

Linux系统/etc/sysconfig目录下没有iptables文件

iptables防火墙介绍+实战

实战Linux下防火墙iptables设置

Linux中级之netfilter/iptables应用及补充

防火墙之iptables