iptables filter表操做

netfilter、iptables、firewalld的关系:linux

iptables服务和firewalld服务都不是真正的防火墙,只是用来定义防火墙规则功能的管理工具,将定义好的规则交由内核中的netfilter(网络过滤器来读取)从而实现真正的防火墙功能。centos

关系如图:(iptables/firewalld管理工具都是经过iptables命令来管理防火墙netfilter)bash

在这里插入图片描述

在centos7以上的版本中使用firewalld服务替代了iptables服务,可是依然可使用iptables来管理防火墙netfilter,为了不冲突使用iptables以前须要先关闭firewalld网络

关闭firewalld:app

[root@linux ~]# systemctl stop firewalld.service

禁止开机启动firewalld:ssh

[root@linux ~]# systemctl disable firewalld.service

安装iptables服务管理工具:tcp

[root@linux ~]# yum -y install iptables-services

设置开机启动iptables:工具

[root@linux ~]# systemctl enable iptables.service

启动iptables:centos7

[root@linux ~]# systemctl start iptables.service

netfilter 5表5链:日志

filter 表用于过滤数据包,有INPUT丶FORWARD丶OUTPUT三个链 nat 表用于网络地址转换,有PREROUTING丶OUTPUT丶POSTROUTING三个链 mangle 表用于给数据包作标记 raw 表能够实现不追踪某些数据包 security 表在centos7中才出现,用于强制访问控制(MAC)的网络规则

最经常使用的5链:INPUT丶FORWARD丶OUTPUT、PREROUTING丶POSTROUTING

iptables数据包的传输过程:

在这里插入图片描述

1.当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否须要转送出去。 2.若是数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序能够发送数据包,这些数据包会通过OUTPUT链,而后到达POSTROUTING链输出。 3.若是数据包是要转发出去的,且内核容许转发,数据包就会如图所示向右移动,通过FORWARD链,而后到达POSTROUTING链输出。

查看iptables规则:

[root@linux ~]# iptables -nvL

查看iptables规则配置文件:

[root@linux ~]# cat /etc/sysconfig/iptables

清空iptables规则:

[root@linux ~]# iptables -F

*清空后使用 iptables -nvL会看到规则已经被清空,但 /etc/sysconfig/iptables文件中规则配置还在,须要执行 service iptables save 才能使配置文件生效

计数器清零:

[root@linux ~]# iptables -Z

*iptables -nvL的输出信息中,第一列表明数据包的数量,第二列表明数据大小,在有须要时,可使用 -Z参数清零重新计算

iptables添加防火墙规则:

[root@linux ~]# iptables -A INPUT -p tcp -s 192.168.1.100  --sport 80 -d 192.168.1.200 --dport 80 -j DROP

可根据实际需求自由选择参数设置规则:

-A :append (在现有规则后面补充/添加一条) -I:insert (在规则最前面插入一条) INPUT:指定链 -p:protocol 指定请求的协议(tcp、udp、icmp等) -s:source 源地址 --sport :原地址的端口(如不指定,则默认全部端口) -d:目标地址 --dport:目标地址的端口 -i:指定网卡名 -j:控制类型(ACCEPT:容许经过,LOG:记录日志信息,而后传给下一条规则继续匹配, REJECT:拒绝经过,必要时会给出提示,DROP:直接丢弃,不给出任何回应) -P:给指定的链设置默认策略:iptables -P INPUT (DROP|ACCEPT)

iptables删除一条规则:-D参数

1.将添加规则的语句中的-A改成-D便可

2.根据规则表行号删除:

[root@linux ~]# iptables -L INPUT --line-numbers  #列出INPUT链的全部规则和行号

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
2    ACCEPT     icmp --  anywhere             anywhere            
3    ACCEPT     all  --  anywhere             anywhere            
4    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
5    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
6    DROP       tcp  --  192.168.1.100        192.168.1.200        tcp spt:http dpt:http

删除指定行便可:

[root@linux ~]# iptables -D INPUT 6

注意: 1.在添加规则后,会当即生效,但添加的内容还未写进配置文件 /etc/sysconfig/iptables中,重启iptables服务就会失效,如需永久生效,在作完变动后,执行 service iptables save便可

2.在删除规则时,需注意规则是否写入配置文件中,如没有,直接删除便可,如写入了配置文件中,删除后需执行 service iptables save 才能避免在重启iptables服务后恢复删除了的规则

案例补充: 禁止别人ping本机:

iptables -I INPUT -p icmp --icmp-type 8 -j DROP

脚本:

#! /bin/bash
ipt="/usr/sbin/iptables"
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT	
$ipt -A INPUT -s 192.168.133.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

*禁止全部 INPUT网络包,只打开80、21端口和192.168.133.0网段的22端口

相关文章
相关标签/搜索