【Linux/CentOS的防火墙iptables操作】

 

 

 

 

 

[标签]: 服务器防火墙    iptables    firewalld配置    iptables的4表5链   定制个性化防火墙规则

 

 

问题详情的描述或方案目标的预期:

了解服务器防火墙配置、定制个性化iptables规则。

 

 

 

【解决方案】

 

防火墙功能是由linux内核来实现,内核有个模块 netfilter;

sbin/iptables,是用来管理防火墙的命令工具;防火墙工作在TCP/IP网络层;

 

防火墙的发展史就是从墙到链再到表的过程,ipfirewall(墙)-->ipchains(链条)--iptables(表);

iptables 是CentOS6的,firewalld是CentOS7及之后的,firewalld 在itpables 的基础上做了封装,底层依然使用的是iptables;

2.0版内核中,包过滤机制是ipfw,管理工具是ipfwadm;

2.2 版内核中,包过滤机制ipchain,管理工具是ipchains;

2.4版及以后的内核中,包过滤机制是netfilter,管理工具iptables。

 

linux的防火墙由netfilter和iptables组成。用户空间的iptables制定防火墙规则,内核空间的netfilter实现防火墙功能。

 

 

各种规则被组织在不同的链中,规则链是防火墙规则/策略的集合;

默认的5种规则链:

INPUT:处理入站数据包

OUTPUT:处理出站数据包

FORWARD:处理转发数据包

POSTROUTING:在进行路由选择后处理数据包

PREROUTING:在进行路由选择前处理数据包

 

规则链间的匹配顺序:

入站数据:PREROUTING,INPUT

出站数据:OUTPUT,POSTROUTING

转发数据: PREROUTING,FORWARD,POSTROUTING

 

 

 

规则表是规则链的集合,具有某一相似用途的防火墙规则,分属到不同的规则链以后,被归置到不同的表中;

默认的4个规则表:

raw表:确定是否对该数据包进行状态跟踪

mangle表:为数据包设置标记

nat表:修改数据包中的源,目标ip地址或端口

filter表:确定是否放行该数据包(过滤)

优先级:raw>mangle>nat>filter

 

 

策略:

ACCEPT:接受数据

DROP:不给任何回复,直接丢弃

REJECT:给不能到达的回复,拒绝了,但是给回复

 

 

表决定了数据报文处理的方式,而链则决定了数据报文的流经哪些位置。

 

防火墙规则通常有两种基本策略;

黑名单策略:维护一个黑名单,凡是不在黑名单的都可以通行。这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐;

白名单策略:维护一个白名单,凡是不在白名单的都无法通行。这种策略比较保守,根据需要,逐渐开放,目前一般都采用白名单策略,推荐;

 

制定iptables表规则思路:

(1)选择一张表(此表决定了数据报文处理的方式);

(2)选择一条链(此链决定了数据报文的流经哪些位置);

(3)选择合适的条件(此条件决定了对数据报文做何种条件匹配);

(4)选择处理数据报文的动作,制定相应的防火墙规则;

 

 

# ===============================================================

iptables命令的语法格式

iptables [-t表名] 管理选项 [链名] [条件匹配] [-j目标动作或跳转]

 

1> 不指定表名时,默认表示filter表

2> 不指定链名时,默认该表示该表内所有链

3> 除非设置规则链的缺省策略,否则需要指定匹配条件

 

 

-X:删除自定义的规则链;

-F:清空规则链内的所有规则、清除现有的所有规则;

清除规则并不会将默认策略改为ACCEPT;

-D:删除指定位置或内容的规则;

-N:创建一条新的规则链;

 

-P:设置指定链的默认策略 policy;

-p:设置协议 protocol

-A:在链尾追加一条新的规则 append

-I : 在指定位置(或链首)插入一条新的规则 insert

-R:修改,替换指定位置或内容的规则 replace

--dport 目的端口

--sport 来源端口

 

 

 

 

协议匹配

使用 -p+ 协议名的形式

协议名可以使用 /etc/protocols 文件中定义的名称

常用的协议包括tcp,udp,icmp等

 

地址匹配

使用 -s + 源地址 ,-d + 目标地址的形式

地址可以是单个IP地址,网络地址(带掩码长度)

 

端口匹配

使用 --sport 源端口 , --dport 目标端口的方式

 

接口匹配

使用 -i + 网络接口名, -o + 网络接口的形式

分别对应接受,发送数据包的网络接口

 

 

 

 

 

 

# ===============================================================

其他补充:

CentOS7:

保存:iptables-save > /PATH/TO/SOME_RULE_FILE

重载:iptabls-restore < /PATH/FROM/SOME_RULE_FILE

-n, --noflush:不清除原有规则

-t, --test:仅分析生成规则集,但不提交

 

 

CentOS6:

保存规则:service iptables save #保存规则于/etc/sysconfig/iptables文件,覆盖保存;

重载规则:service iptables restart #默认重载/etc/sysconfig/iptables文件中的规则

配置文件:/etc/sysconfig/iptables-config

 

 

 

 

# =========================== 实战示例: ====================================

#!/bin/bash -

# 用于 Al3的网络控制、端口控制、流量控制

# Edit by blubn

# 修正时间 20220819-101010

 

 

# -X:删除自定义的规则链; -F:清空规则链内的所有规则 清除规则并不会将默认策略改为ACCEPT; -D:删除指定位置或内容的规则; -Z 将计数器清零

# -N:创建一条新的规则链; -P:设置指定链的默认策略 policy;

# 默认的4个规则表:raw表:确定是否对该数据包进行状态跟踪;mangle表:为数据包设置标记;nat表:修改数据包中的源,目标ip地址或端口;filter表:确定是否放行该数据包(过滤);优先级:raw>mangle>nat>filter

# 默认的5种规则链:INPUT:处理入站数据包;OUTPUT:处理出站数据包;FORWARD:处理转发数据包;POSTROUTING:在进行路由选择后处理数据包;PREROUTING:在进行路由选择前处理数据包

# 其他: -i + 网络接口名

# -A:在链尾追加一条新的规则 append; -I : 在指定位置(或链首)插入一条新的规则 insert

 

# iptables命令的语法格式: iptables[-t表名]管理选项[链名][条件匹配][-j目标动作或跳转]

/sbin/iptables -X

/sbin/iptables -F

/sbin/iptables -Z

/sbin/iptables -P INPUT DROP

/sbin/iptables -P OUTPUT DROP

/sbin/iptables -P FORWARD DROP

/sbin/iptables -t nat -F

/sbin/iptables -A INPUT -p icmp -j ACCEPT

/sbin/iptables -A INPUT -i lo -j ACCEPT

/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

 

# Sshd

/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT

/sbin/iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 

 

# waterlf

/sbin/iptables -A INPUT -p tcp --dport 10000 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 10001 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 10002 -j ACCEPT

 

 

# =================== App_List: =========================

# Mysql

/sbin/iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

/sbin/iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

 

 

# Nginx

/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT

/sbin/iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

 

 

 

执行后查看放行规则:

[root@blubn-aly-03 ~]# iptables -nL

Chain INPUT (policy DROP)

target prot opt source destination

ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0

ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10000

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10001

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10002

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20000

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20001

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20002

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

Chain FORWARD (policy DROP)

target prot opt source destination

ACCEPT all -- 10.244.0.0/16 0.0.0.0/0

ACCEPT all -- 0.0.0.0/0 10.244.0.0/16

Chain OUTPUT (policy DROP)

target prot opt source destination

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22 state ESTABLISHED

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:3306 state ESTABLISHED

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80 state ESTABLISHED

  

  

  

总结: 简单而有效的方法才能写出最好的shell.

 

 

 

百度一下    谷歌翻译

 

 

 

 

 

 

【书君方案】 简洁、完整、漂亮、记忆深刻

 

 

 

 

 

 

©2022 BLUBN.HonL   京ICP备15053931号   书君   bookfooked.com V1.1