firewalld 与 iptables

不同Linux内核版本的防火墙软件

在设置 Linux 防火墙规则时,可以先用 uname  -r  查看一下 Linux 内核版本。


Firewalld

从Cent7以后,iptables服务的启动脚本已被忽略。请使用firewalld来取代iptables服务。

在RHEL7里,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables。

firewalld是iptables的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面。

firewalld 与 iptables的比较:

1,firewalld可以动态修改单条规则,动态管理规则集,允许更新规则而不破坏现有会话和连接。而iptables,在修改了规则后必须得全部刷新才可以生效;

2,firewalld使用区域和服务而不是链式规则;

3,firewalld默认是拒绝的,需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制;

4,firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现。也就是说,firewalld和iptables一样,它们的作用都用于维护规则,而真正使用规则干活的是内核的netfilter。只不过firewalld和iptables的结果以及使用方法不一样!

firewalld是iptables的一个封装,可以让你更容易地管理iptables规则。它并不是iptables的替代品,虽然iptables命令仍可用于firewalld,但建议firewalld时仅使用firewalld命令。

一个重要规则:区域管理

通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送数据流。

例如,互联网是不可信任的区域,而内部网络是高度信任的区域。

网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化。改模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式。

初始化区域:

阻塞区域(block):任何传入的网络数据包都将被阻止;

工作区域(work):相信网络上的其他计算机,不会损害你的计算机;

家庭区域(home):相信网络上的其他计算机,不会损害你的计算机;

公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接;

隔离区域(DMZ):也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接;

信任区域(trueted):所有网络连接都可以接受;

丢弃区域(drop):任何传入的网络连接都被拒绝;

内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只选择接受传入的网络连接;

外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只选择接受传入的网络连接;

firewalld的默认区域是public。

firewalld使用XML进行配置。除非非常特殊的配置,你不必处理他们,而应该使用firewalld-cmd。

配置文件:

/usr/lib/firewalld    #保存默认配置,避免修改他们;

/etc/firewalld    #保存系统配置文件,这些文佳你将覆盖默认配置;

firewalld默认提供了九个zone配置文件:block.xml,dmz.xml,drop.xml,external.xml,home.xml,internal.xml,public.xml,trusted.xml,work.xml

/usr/lib/firewalld/zone/


firewalld配置方法

firewalld的配置方法主要有三种:firewall-config(图形化工具)、firewall-cmd(命令行工具) 和 直接编辑XML文件。

yum  install  firewalld  firewall-config

systemctl  start|stop|status|restart  firewalld

systemctl  enable|disable  firewalld

firewalld-cmd  --state    #检查防火墙状态;

systemctl status firewalls    #查看firewalld守护进程状态;

firewall-cmd --help

firewall-cmd --version

firewall-cmd --state

firewall-cmd --get-active-zones     #查看网络接口使用的区域

firewall-cmd --zone=public --list-all    #查看指定区域的所有配置

firewall-cmd --list-all-zones    #查看所有区域配置

firewall-cmd --get-default-zone    #查看默认区域

firewall-cmd --set-default-zone=internal    #设置默认区域

firewall-cmd --get-zone-of-interface=eth0    #查看指定接口所属区域

firewall-cmd --zone=public --add-interface=eth0    #将接口添加到区域,默认接口都在public,永久生效加上 --permanent,然后reload

#需要永久生效需加上 --permannent

firewall-cmd --panic-on|off    #拒绝|开启 所有包

firewall-cmd --query-panic    #查看是否拒绝

firewall-cmd --reload    #无需断开连接更新防火墙规则

firewall-cmd --complete-reload    #类似于重启更新规则

firewall-cmd --zone=dmz --list-ports    #查看所有打开的端口

firewall-cmd --zone=dmz --add-port=8080/tcp    #加入一个端口的区域

与服务一起使用

firewalld可以根据特定网络服务的预定义规则来允许相关流量。你可以创建自己的自定义系统规则,并将它们添加到任何区域。默认支持的服务的配置文件位于 /usr/lib/firewalld/services,用于创建的服务文件位于 /etc/firewalld/services 中。

/usr/lib/firewalld/services/

firewall-cmd --get-services    #查看默认可用服务

firewall-cmd --zone=区域 --(add|remove)-service=http --permanent    #永久启用或禁用HTTP服务

firewall-cmd --zone=public --add-port=123456/tcp --permanent    #添加123456端口的tcp流量;

firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=123456    #将80端口的流量转发到123456端口

将端口转发到另外一台服务器上:

firewall-cmd --zone=区域 --add-masquerade    #在需要的区域中激活masquerade

firewall-cmd --zone=区域 --remove-masquerade    #删除

firewall-cmd --zone=区域 --add-forward--port=port=80:proto=tcp:toport=8080:toaddr=123.123.123.123    #将本地80端口的流量转发到指定IP的8080端口;




iptables

数据包进入流程:规则顺序的重要性

根据数据包的分析资料“比对”预先定义的规则内容,若数据包与规则内容相同则进行动作,否则就继续下一条规则的比对,重点在比对与分析顺序。

规则是有顺序的,规则的顺序很重要。

当规则顺序排列错误时,会产生很严重的错误。


iptables 的表格(table)和链(chain)

为什么称为 iptables 呢?因为这个防火墙软件里面由多个表格(table),每个表格定义出自己的默认策略和规则,且每个表格的用途都不相同。

默认情况下,Linux 的 iptables 至少有3个表格,包括管理本机进出的Filter、管理后端主机(防火墙内部的其他计算机)的NAT、管理特殊标志使用的Mangle(较少使用)。我们还可以自定义额外的链。

iptables 的表格与相关链示意图

Filter(过滤)

:主要跟进入Linux本机的数据包有关,是默认的table。

INPUT : 主要与想要进入 Linux 本机的数据包有关

OUTPUT : 主要与 Linux 本机所要送出的数据包有关

FORWARD(发送): 与 Linux 本机没有关系,它可以传递数据包到后端的计算机中,与 NAT table 相关性较高

NAT(地址转换):这个 table 主要用来进行 源和目的IP或Port的转换,与Linux本机无关,主要与局域网内计算机相关。

PREROUTING : 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)

POSTROUTING : 在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)

OUTPUT: 与发送出去的数据包有关

Mangle(破坏者):这个 table 主要是与特殊的数据包的路由标志有关。


iptables 内建表格与链的相关性

本机的 iptables 语法

切记谨慎使用 iptables 命令,特别是在远程连接的时候。

防火墙的设置主要是使用的 iptables 这个命令,而防火墙是系统管理员的主要任务之一,且对于系统的影响相当大,因此只能让 root 使用 iptables,不论是设置还是查看防火墙规则。

规则的查看与清除

#  iptables  -L  -n

target : 代表进行的操作,ACCEPT是放行,而 REJECT 则是拒绝,此外,尚有 DROP(丢弃)的项目;

prot : 代表使用的数据包协议;

opt : 额外的选项说明;

source : 针对来源 IP;

destination : 针对目的 IP

建议使用 iptables-save 这个命令来查看防火墙规则

iptables-save

清除防火墙规则 

iptables  [ -t  tables ]  [ -FXZ ]

iptables  -F    #清除所有已制定的规则

iptables  -X    #清除用户 "自定义"

iptables  -Z    #将所有的 chain 的计数与流量统计都归零

# 这三个命令会将本机防火墙的所有规则都清除,但却不会改变 "默认策略(policy )"

定义默认策略(policy)

当数据包不在我们设置的规则之内时,则该数据包的通过与否,是以Policy的设置为准。

如果对于局域网内的用户有信心,那么Filter内的INPUT就可以定义严格一点,而OUTPUT和FORWARD则可以制定的松一些。

iptables [ -t nat ] -P [ INPUT, OUTPUT, FORWARD ] [ ACCEPT, DROP ]

举例,修改默认策略,信任内部网络,严格对待 INPUT

iptables  -P  INPUT  DROP;    #丢弃

iptables  -P  OUTPUT  ACCEPT;

iptables  -P  FORWARD  ACCEPT;

最后使用  iptables-save  查看

数据包的基础比对 : IP、网络及接口设备

举例,没有指定的项目则表示该项目完全接受

还要说一遍,规则顺序是很重要的,一定要重视和注意这个问题。

iptables  -A  INPUT  -i  lo  -j  ACCEPT    #只要是loopback这个接口,不管 Source 和 Destination,予以接受

iptables  -A  INPUT  -i  eth0  -s  192.168.2.0/24  -j  ACCEPT

iptables  -A  INPUT  -i  eth1  -s  111.111.111.111  -j  DROP    # 从 Source"111.111.111.111" 进来的数据包就丢弃

iptables  -A  OUTPUT  -i  eth1  -d  8.8.8.8  -j  LOG    #到Destination为"8.8.8.8"则进行日志记录

TCP、UDP的规则比对:针对端口设置

其实相较于IP,这个只不过增加了 tcp/udp 和 sport/dport,包括 tcp 连接数据包状态,最常见的 SYN等

几个小测试:

iptables  -A  INPUT  -i  eth0  -p  tcp  --dport  22 -j DROP

iptables  -A  INPUT  -i  eth1  -p  udp  --dport  555:666 -j  ACCEPT

iptables  -A  INPUT  -i  eht0  -s  192.168.2.0/24  -p  tcp  --sport  1024:65534  --dport  ssh  -j  DROP

iptables  -A  INPUT  -i  eth0  -p  tcp  --sport  1:1023  --syn  -j  DROP

# 切记要选择是  TCP 还是 UDP

iptables外挂模块:mac 与 state

通过一个状态模块来分析这个想要进入的数据包是否为刚刚发出去的响应。如果是,则予以放行。

举例:

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

iptables  -A  INPUT  -m  mac  --mac--source  aa:bb:cc:11:22:33  -j  DROP    #针对网卡执行的放行和防御

其实MAC也是可以伪装,此外,MAC是不能跨过Router的,因此针对网卡的方案只存在与局域网内

关闭主机的ICMP ping

iptables  -A  INPUT  -p  icmp  --icmp-type  8  -j  REJECT

ICMP字段类型

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容