Linux CentOS 8(iptables的配置与管理)
iptables 其实不是真正的防火墙,它只是一个命令行工具,位于用户空间,可以把它理解成一个客户端代理。用户通过 iptables 这个代理,将用户的安全设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙,名字叫netfilter,位于内核空间,以实现网络数据包的过滤管理(查看、记录、修改、丢弃、拒绝)。普遍应用于Rhel6、CentOS6及之前。
netfilter / iptables 组成Linux平台下的包过滤防火墙。在多数Linux版本内,firewalld、iptables、ebtables是共存的,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。
[root@localhost ~]# iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名>
-p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
//规则的次序非常关键,谁的规则越严格,应该放的越靠前
表名(如果不指定此选项,默认是 filter 表)包括(区分大小写):
规则链包括(区分大小写):
• INPUT链:处理输入数据包。
• OUTPUT链:处理输出数据包。
• FORWARD链:处理转发数据包。
• PREROUTING链:用于目标地址转换(DNAT)。
• POSTOUTING链:用于源地址转换(SNAT)。
1.2.1 规则管理命令,如表1-1所示:
选项 | 说明 |
---|---|
-A | 在指定链的末尾插入指新规则 |
-I | 在链的指定位置插入一条或多条规则,如果指定的规则号是1,则在链的头部插入。默认是1。 |
-D | 在指定链中删除一个或多个指定规则。 |
-R | 替换/修改第几条规则 |
1.2.2 源地址目标地址的匹配,如表1-2所示:
选项 | 说明 |
---|---|
-p | 匹配的数据包协议类型,如tcp,udp,icmp,all。也能在协议前加上“!”。 |
-s | 匹配来源地址IP/MASK,加叹号“!”表示除这个IP外。当后面没有 mask 时,address 是一个地址。iptables仅支持ipv4。 |
-d | 地址格式同上,匹配目标地址。 |
-i | 匹配从这块网卡流入的数据,比如最常见的 eth0 。 |
-o | 匹配从这块网卡流出的数据 |
1.2.3 链管理命令,如表1-3所示:
选项 | 说明 |
---|---|
-P | 为指定的链设置默认策略 |
-F | 清空指定链上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。 |
-X | 清除表中使用者自定的空链中的规则 |
-Z | 把指定链,或者表中的所有链上的所有计数器清零。 |
-N | 用指定的名字创建一个新的链 |
-j | 满足某条件时该执行什么样的动作 |
–dport num | 匹配目标端口号 |
–sport num | 匹配来源端口号 |
默认策略一般只有两种:
[root@localhost ~]# iptables -P INPUT ( DROP | ACCEPT )
//默认是关的/开的
[root@localhost ~]# iptables -P INPUT DROP
//拒绝默认规则。且并且没有定义什么动作,所以关于外界连接的所有规则,包括远程连接都被拒绝了。
动作包括:
• ACCEPT:接收数据包。
• DROP:丢弃数据包。
• REJRCT: 拒绝通过,必要时会给出提示
• SNAT:源地址转换。
• DNAT:目标地址转换。
• LOG:记录日志,然后传给下一条规则
1.2.4 查看管理命令,如表1-4所示:
选项 | 说明 |
---|---|
-L | 列出链上面的所有规则。如果没有指定链,默认只列出表filter上所有链的所有规则。 |
-n | 以数字形式显示地址、端口等信息 |
–line-numbers | 查看规则时,显示规则的行号。 |
注:如果没有找到匹配条件,则执行防火墙默认规则
匹配多个源端口:
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --sport 22,23,53,80 -j ACCEPT
匹配多个目的端口:
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 22,23,53,80 -j ACCEPT
匹配多端口(无论是源端口还是目的端口):
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --port 22,23,53,80 -j ACCEPT
匹配连续端口
[root@localhost ~]# iptables -A INPUT -p tcp --sport 20:80 -j ACCEPT
使用 –tcp-flags 选项可以根据tcp包的标志位进行过滤
[root@localhost ~]# iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN -j ACCEPT
//表示SYN、ACK、FIN的标志都检查,但是只有SYN匹配。
指定单位时间内允许通过的数据包个数,单位时间可以是/second、/minute、/hour、/day
[root@localhost ~]# iptables -A INPUT -m limit --limit 300/hour -j ACCEPT
指定触发事件的阀值
[root@localhost ~]# iptables -A INPUT -m limit --limit-burst 10 -j ACCEPT
# 一次同时涌入的封包超过10个将直接丢弃
在INPUT链添加一条规则,匹配已经建立的连接或由已经建立的连接所建立的新连接。
[root@localhost ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
在INPUT链链添加一条规则,匹配所有从非eth0接口来的连接请求包。
[root@localhost ~]# iptables -A INPUT -m state --state NEW -i !eth0 -j ACCEPT
1、安装iptables服务
[root@localhost ~]# yum install -y iptables-services
2、关闭firewalld服务
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
3、启动iptables服务
[root@localhost ~]# systemctl start iptables
4、备份iptables文件
[root@localhost ~]# cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
5、设置 INPUT 方向拒绝所有的请求
[root@localhost ~]# iptables -P INPUT DROP
6、开放所需端口
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
7、保存规则
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables
#如果不保存,重启服务器还是会恢复原来没有设置的状态。
8、设置为开机自启并重启服务
[root@localhost ~]# service iptables enabled
[root@localhost ~]# service iptables restart
制作成员: 何嘉愉
排版: 裕新
初审: 杨佳佳
复审: 二月二