iptables firewall

iptables防火墙应用

一、iptables防火墙基础;

1.概述:保护内部主机和内部网络的安全,通过过滤的方式对网络层的ip地址和端口进行处理;
2.了解防火墙:
硬件防火墙:ASA
软件防火墙:iptables(linux平台)、ISA(windows自带的)
3.iptables防火墙结构:
netfilter内核模块、iptables用户工具、firewall用户工具
4.iptables的表:按照不同功能来划分;
raw(状态跟踪)、mangle(标记)、nat(修改)、filter(过滤)
raw:主要是为了提高效率使用的,raw本身的含义是指“原生的”、“未经过加工 的”,符合raw表所对应规则的数据包将会跳过一些检查,这样就可以提高效率;
mangle:mangle表的规则可以对数据包进行修改,比如修改ttl值等;
nat:进行源地址或目标地址修改转换;
filter:通过过滤数据包的ip地址、mac地址、协议、端口,对数据包进行控制;
5.iptables规则链:根据不同时机来划分链,在链中存放规则;
INPUT(入站)、OUTPUT(出站)、FORWARD(转发)、PREROUTING(路由前)、POSTROUTING(路由后)
6.表中默认包含链:
raw:PREROUTING、OUTPUT
mangle:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
nat: PREROUTING、POSTROUTING、OUTPUT
filter:INPUT、FORWARD、OUTPUT
iptables firewall
总结:表相当于内核空间的一个容器,在表容器中又包含不同的链,在链中包含不同的规则;
7.iptables匹配流程:(根据数据流的方向确定匹配顺序)
链:入站数据流向:PREROUTING、INPUT
出站数据流向:OUTPUT、POSTROUTING
转发数据流向:PREROUTING、FORWARD、POSTROUTING
表:raw--mangle--nat--filter
总结:链内规则匹配顺序:从上到下、匹配即停止、未匹配使用默认规则;
iptables firewall

二、编写iptables规则:

语法:iptables -t 表名 选项 链名 条件 -j 动作
1.编写规则语法注意:
省略表名,默认表示filter表,省略链名,表示表内所有链;
除非设置默认规则,否则必须设置匹配的规则;
选项、链名、动作必须大写,其他小写;
2.动作:对匹配的条件进行处理;
ACCEPT:允许
DROP:丢弃
REJECT:拒绝
LOG:日志
3.选项:对链中的规则进行增删改查操作;
a.增加:-A链的末尾添加、-I 链的指定位置添加,需要指定序号(若不指定,默认作为第一条规则),例:-I INPUT 2
b.删除:-D 删除一条规则,-F清空链内所有规则,例:iptables -D 链名 2
c.查看:-L -n 查看规则,-L -n -v 查看更详细的信息,-L -n --line-number显示规则的序号(大写为选项,后边小写为子选项, 子选项需要跟在链名的后边)
d.设置默认规则:-P 链名 DROP或ACCEPT
4.匹配条件:
a.通用匹配条件:
-p 协议 ##常用的协议ICMP、TCP、UDP协议;
-s 源地址 ##控制源地址访问,网段书写格式:192.168.1.0/24
-d 目的地址 ##控制目的地址访问
-i 入站网卡名称 ##控制传输数据的入站网卡
-o 出站网卡名称 ##控制传输数据的出站网卡
注:编写规则时,需要判断主机数据的流向,如INPUT链只能用-i入站网卡;
b.隐含匹配条件:
端口:-p 协议 --dport 目的端口
-p 协议 -sport 源端口
c.显式匹配条件:
多端口:-m multiport -p tcp或udp --dports 端口号 ##指定多个端口,若连续端口11:22,若不连续端口11,22
mac地址:-m mac --mac-source MAC地址 ##MAC地址中间用:隔开,指定的mac地址为源地址
ip地址范围:-m iprange --src-range 192.168.1.1-192.168.1.10 ##指定的ip地址范围是源地址
数据包的状态:-m state --state NEW,ESTABLISHED,RELATED ##三个选项分别表示,新建,已经建立的连接,已经相关,例:默认规则为DROP并且无允许ssh22号端口,但是允许已经建立的连接,ssh不会断开,ss命令查看当前的连接;

三、实战演练:

[root@lwh ~]# /etc/init.d/iptables stop                     ##清空防火墙规则;
iptables:将链设置为政策 ACCEPT:filter                    [确定]
iptables:清除防火墙规则:                                 [确定]
iptables:正在卸载模块:                                   [确定]
[root@lwh ~]# iptables -A INPUT -i lo -j ACCEPT     ##允许本地网卡所有访问
[root@lwh ~]# iptables -A INPUT -s 192.168.100.1-p tcp -m multiport --dports 80,443,20,21,22,25,45000:50000 -j ACCEPT       ##设置开启的端口
[root@lwh ~]# iptables -A INPUT -m mac --mac-source 00:0C:29:D9:32:C9 -p icmp -j ACCEPT ##设置此mac地址可以ping访问本主机
[root@lwh ~]# iptables -A INPUT -m iprange --src-range 192.168.100.1-192.168.100.10 -d 192.168.100.150 -p icmp -j ACCEPT        ##设置此ip地址范围可以访问ping此主机
[root@lwh ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT      ##设置数据的状态,本机可以访问别的主机
[root@lwh ~]# iptables -P INPUT DROP            ##设置INPUT入站链的默认规则为丢弃
[root@lwh ~]# iptables -P FORWARD DROP      ##设置FORWARD转发链的默认规则为丢弃
[root@lwh ~]# /etc/init.d/iptables save         ##保存防火墙配置到/etc/sysconfig/iptables文件中,每次开机都会加载这个文件中的防火墙规则
iptables:将防火墙规则保存到 /etc/sysconfig/iptables:     [确定]
[root@lwh ~]# chkconfig iptables on         ##设置开机启动防火墙

iptables高级应用

一、SNAT源地址转换;

1.原理:在路由后链POSTROUTING将内网主机的ip地址转换成外网网卡的ip地址;
2.应用场景:共享内部主机上网,在网关主机上设置;
iptables firewall
iptables firewall
3.设置SNAT:
a.设置内外网网卡的网络参数;
b.开启路由转发功能;
sed -i '/ip_forward/s/0/1/g' /etc/sysctl.conf
sysctl -p
c.编写规则;
iptables -t nat -I POSTROUTING -o 外网网卡 -s 内网的网段/24 -j SNAT --to-source 外网网卡的ip地址 ##适用于 外网ip地址固定的环境
iptables -t nat -I POSTROUTING -o 外网网卡 -s 内网的网段/24 -j MASQUERADE ##适用于网关服务器外网网卡 地址不是固定的环境
d.做好安全控制:使用FORWARD时机进行控制,严格设置INPUT规则;
e.配置客户端网关;

二、DNAT目的地址转换;

1.原理:在路由前链PREROUTING将来自外网访问网关公网ip及对应端口的目的ip及端口修改为内部服务器的ip及端口,实现发布内网服务器;
2.应用场景:发布内网主机到公网
iptables firewall
3.设置DNAT:网关主机上设置
a.设置ip地址,开启路由,设置SNAT,保证内部主机和内部服务器可以连接公网;
b.编写防火墙规则;
iptables -t nat -I PREROUTING -i 外网网卡名 -d 外网网卡的ip地址 -p tcp --dport 发布的端口 -j DNAT --to-destination 内网服务器ip地址 ##将内网服务器发布到网关主机的外网ip地址并对应其端口,后边的端口可以省略;
c.外网客户端访问网关外网ip地址进行测试;

三、SNAT和DNAT的实战案例:

1.需求:共享公网ip上网,发布ftp和httpd服务,控制网关安全;
2.配置过程:
a.配置好ip地址等参数后,开启路由转发功能;
b.编写规则:
编写SNAT和DNAT规则:

    [root@lwh ~]# /etc/init.d/iptables stop
    [root@lwh ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth1 -j MASQUERADE
    [root@lwh ~]# iptables -t nat -A PREROUTING -d 192.168.50.101 -i eth1 -p tcp -m multiport --dports 21,20,40000:45000,80,443 -j DNAT --to-destination 192.168.100.153
    编辑网关安全控制规则:
    [root@lwh ~]# iptables -A INPUT -i lo -j ACCEPT     ##允许本地网卡访问
    [root@lwh ~]# iptables -A INPUT -s 192.168.100.0/24 -i eth0 -p icmp -j ACCEPT       ##允许内网ping
    [root@lwh ~]# iptables -A INPUT -s 192.168.100.250 -p tcp --dport 22 -j ACCEPT      ##允许主机100.250远程登陆主机
    [root@lwh ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT      ##允许放行主机已经建立的连接
    [root@lwh ~]# iptables -A FORWARD -s 192.168.100.0/24 -j ACCEPT     ##转发源地址为内网地址的流量
    [root@lwh ~]# iptables -A FORWARD -d 192.168.100.0/24 -j ACCEPT     ##转发目的地址为内网地址的流量
    [root@lwh ~]# iptables -P INPUT DROP
    [root@lwh ~]# iptables -P FORWARD DROP
  d.保存规则:
    [root@lwh ~]# /etc/init.d/iptables save
    [root@lwh ~]# chkconfig iptables on
    [root@lwh ~]# iptables-save >/root/1.txt        ##将iptables规则导入到某文件中
    [root@lwh ~]# iptables-restore </root/1.txt     ##恢复文件中的防火墙规则

Firewalld防火墙应用

重点:
一、概述;
概述:Filewalld(动态防火墙)作为redhat7系统中变更对于netfilter内核模块的管理工具;
差异点:
前者:iptables 防火墙:
iptables service 管理防火墙规则的模式(静态):用户将新的防火墙规则添加进 /etc/sysconfig/iptables 配置文件当中,再执行命令 /etc/init.d/iptables reload 使变更的规则生效。在这整个过程的背后,iptables service 首先对旧的防火墙规则进行了清空,然后重新完整地加载所有新的防火墙规则,如果加载了防火墙的模块,需要在重新加载后进行手动加载防火墙的模块;
后者:firewalld防火墙:
使用 python 语言开发,管理防火墙规则的模式(动态):任何规则的变更都不需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新到运行中的 iptables 即可。还有命令行和图形界面配置工具,它仅仅是替代了 iptables service 部分,其底层还是使用 iptables 作为防火墙规则管理入口。
iptables firewall

二、Frewalld 的原理;
便于理解:
firewalld支持动态更新技术并加入了区域(zone)的概念:
简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。例如,我们有一台笔记本电脑,每天都要在办公室、咖啡厅和家里使用。按常理来讲,这三者的安全性按照由高到低的顺序来排列,应该是家庭、公司办公室、咖啡厅。
当前,我们希望为这台笔记本电脑指定如下防火墙策略规则:在家中允许访问所有服务;
在办公室内仅允许访问文件共享服务;在咖啡厅仅允许上网浏览。
在以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合,
然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。
区域:
zone 默认共有9个:block(拒绝)block(拒绝) dmz(非军事化) drop(丢弃) external(外部) home(家庭) internal(内部) public(公开) trusted(信任) work(工作区)
不同的区域之间的差异是其对待数据包的默认行为不同,firewalld的默认区域为public;
iptables firewall
相关文件:
/usr/lib/firewalld/services/:firewalld服务默认在此目录下定义了70+种服务供我们使用;
/etc/firewalld/zones/:默认区域配置文件,配置文件中指定了编写完成的规则(规则中的服务名必须与上述文件名一致,调用关系);
iptables firewall

三、规则编写:
语法:firewall-cmd [选项]
选项语法:[--zone=zone] 动作 [--permanent]
注:如果不指定--zone选项,则为当前所在的默认区域;
--permanent选项为是否将改动写入到区域配置文件中,如果加此选项,需要重新加载firewalld服务方可生效;

选项之状态:
--state ##查看防火墙的状态
--reload ##重新加载防火墙,中断用户的连接,将临时配置清掉,加载配置文件中的永久配置
--complete-reload ##重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)
--panic-on ##紧急模式,强制关闭所有网络连接,--panic-off是关闭紧急模式

选项之动作中查看操作:
--get-icmptypes ##查看支持的所有ICMP类型
--get-zones ##查看所有区域
--get-default-zone ##查看当前的默认区域
--get-active-zones ##查看当前正在使用的区域
--get-services ##查看当前区域支持的服务
--list-services ##查看当前区域开放的服务列表
--list-all ##查看此区域内的所有配置,类似与iptables -L -n

选项之更改区域操作:
--set-default-zone=work ##更改默认的区域

选项之新建--add或删除--remove规则:
--add-interface=eth0 ##将网络接口添加到默认的区域内
--add-port=12222/tcp --permanent ##添加端口到区域开放列表中
--add-port=5000-10000/tcp --permanent ##将端口范围添加到开放列表中;
--add-service=ftp --permanent ##添加服务到区域开放列表中(注意服务的名称需要与此区域支持的服务列表中的名称一致)
--add-source=192.168.1.1 ##添加源地址的流量到指定区域
--remove-source=192.168.1.1 ##删除源地址的流量到指定区域
--change-interface=eth1 ##改变指定的接口到其他区域
--remove-service=http ##在home区域内将http服务删除在开放列表中删除
--add-masquerade ##开启SNAT(源地址转换)
--query-masquerade ##查询SNAT的状态
--remove-interface=eth0 ##将网络接口在默认的区域内删除
--query-interface=eth0 ##确定该网卡接口是否存在于此区域

Rich规则:
当基本firewalld语法规则不能满足要求时,可以使用以下更复杂的规则
.rich-rules 富规则,功能强,表达性语言,查看帮助:man 5 firewalld.richlanguage
.rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,还可以实现日志syslog和auditd,也可以实现端口转发,伪装和限制速率
rich规则实施顺序有以下四点
a.该区域的端口转发,伪造规则
b.该区域的日志规则
c.该区域的允许规则
d.该区域的拒绝规则
每个匹配的规则都生效,所有规则都不匹配,该区域默认规则生效;

Rich规则语法:
iptables firewall

Rich规则选项:
--add-rich-rule=’rule’ ##新建rich规则
--remove-rich-rule=’rule’ ##删除rich规则
--query-rich-rule=’rule’ ##查看单条rich规则
--list-rich-rules ##查看rich规则列表

Rich规则示例:
1.拒绝从192.168.100.0的ping流量;
firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.100.0/24 protocol value='icmp' reject
2.接受所有192.168.1.0/24子网端口范置7900-7905的TCP流量;
firewall-cmd  --permanent --zone=vnc  --add-rich-rule=‘rule family=ipv4 source address=192.168.1.0/24  port  port=7900-7905 protocol=tcp accept‘
3.开启SNAT;
firewall-cmd   --permanent --add-rich-rule=‘rule family=ipv4 source address=192.168.0.0/24 masquerade‘
4.拒绝192.168.100.100主机ping的流量(0代表优先级);
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.100.100 -p icmp -j DROP
5.允许当前的数据包的状态;
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m state --state RELATED,ESTABLISHED -j ACCEPT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章