iptables防火墙
iptables介绍
其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。
规则表:
1.filter表——三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包 内核模块:iptables_filter.
2.Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
3.Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)
4.Raw表——两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable_raw
规则链:
1.INPUT——进来的数据包应用此规则链中的策略
2.OUTPUT——外出的数据包应用此规则链中的策略
3.FORWARD——转发数据包时应用此规则链中的策略
4.PREROUTING——对数据包作路由选择前应用此链中的规则
(记住!所有的数据包进来的时侯都先由这个链处理)
5.POSTROUTING——对数据包作路由选择后应用此链中的规则
(所有的数据包出来的时侯都先由这个链处理)
数据包处理方式
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
iptables使用
input链
[root@node2 ~]# iptables -t filter -A INPUT -s 192.168.5.102 -j REJECT
-t 指定表
-A 最后一行插入规则
-s 源ip
-j 指定动作
[root@node2 ~]# iptables -nL --line-number 显示行号
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 LOG all -- 192.168.5.102 0.0.0.0/0 LOG flags 0 level 4
2 REJECT all -- 192.168.5.102 0.0.0.0/0 reject-with icmp-port-unreachable
[root@node2 ~]# iptables -t filter -D INPUT 1
删除filter表INPUT链第一条规则
[root@node2 ~]# iptables -t filter -A INPUT -s 192.168.5.102 -p tcp --dport 22 -j REJECT
-p 指定tcp 目标端口22
[root@node2 ~]# iptables -I INPUT -s 192.168.5.102 -p tcp --dport 80 -j ACCEPT
-I 指定将规则插入到第几行 不加指定插入到第一行
[root@node2 ~]# iptables -N wsa
创建用户自定义链
Chain wsa (0 references)
target prot opt source destination
[root@node2 ~]# iptables -A wsa -s 192.168.5.102 -p tcp --dport 22 -j REJECT
默认状态下流量不会经过自定义链
[root@node2 ~]# iptables -A INPUT -j wsa
进入input的链最后经过wsa链
forward链
[root@node1 network-scripts]# iptables -A FORWARD -s 192.168.91.11 -d 192.168.5.102 -p tcp --dport 22 -j REJECT
源ip 192.168.91.11 访问 目标ip 192.168.5.102 的22端口动作为拒绝
nat表
PREROUTING:进入防火墙,做DNAT转换
POSTROUTING:通过防火墙出去,做SNAT转换
[root@node2 ~]# iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -j SNAT --to-source 192.168.1.10
原地址为192.168.5.0/24的网段 出去时转换为 192.168.1.10
[root@node2 ~]# iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -j MASQUERADE
MASQUERADE 地址伪装
[root@node2 ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-dest 192.168.5.102
进入防火墙目标端口为80的全部转换到192.168.5.102的80端口
[root@node2 ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-dest 192.168.5.102:8080
进入防火墙目标端口为80的全部转换到192.168.5.102的8080端口
firewalld防火墙
firewalld介绍
dynamic firewall daemon。支持ipv4和ipv6。Centos7中默认将防火墙从iptables升级为了firewalld。firewalld相对于iptables主要的优点有:
firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
过滤规则集合:zone
一个zone就是一套过滤规则,数据包必须要经过某个zone才能入站或出站
[root@node1 ~]# firewall-cmd --get-zones
block dmz drop external home internal libvirt nm-shared public trusted work
drop 任何流入的包都被丢弃,不做任何响应。只允许流出的数据包。
block 任何流入的包都被拒绝,返回icmp-host-prohibited报文(ipv4)或icmp6-adm-prohibited报文(ipv6)。只允许由该系统初始化的网络连接
public 默认的zone。部分公开,不信任网络中其他计算机,只放行特定服务。
external 只允许选中的服务通过,用在路由器等启用伪装的外部网络。认为网路中其他计算器不可信。
dmz 允许隔离区(dmz)中的电脑有限的被外界网络访问,只允许选中的服务通过。
work 用在工作网络。你信任网络中的大多数计算机不会影响你的计算机,只允许选中的服务通过。
home 用在家庭网络。信任网络中的大多数计算机,只允许选中的服务通过。
internal 用在内部网络。信任网络中的大多数计算机,只允许选中的服务通过。
trusted 允许所有网络连接,即使没有开放任何服务,那么使用此zone的流量照样通过(一路绿灯)。
[root@node1 ~]# firewall-cmd --get-default-zone 默认zone为public
public
[root@node1 ~]# firewall-cmd --list-all ---查看默认zone规则
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@node1 ~]# firewall-cmd --list-all --zone=home --查看home的规则
home
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
添加放行端口
[root@node1 ~]# firewall-cmd --add-port=80/tcp 默认zone,当前生效,临时
[root@node1 ~]# firewall-cmd --permanent --add-port=80/tcp
[root@node1 ~]# systemctl reload firewalld.service
重载配置文件后永久生效
删除放行端口
[root@node1 ~]# firewall-cmd --permanent --remove-port=80/tcp ---永久删除
success
[root@node1 ~]# systemctl reload firewalld.service
查看定义的服务端口
cd /usr/lib/firewalld/services
[root@node2 services]# cat syslog.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>syslog</short>
<description>Syslog is a client/server protocol: a logging application transmits a text message to the syslog receiver. The receiver is commonly called syslogd, syslog daemon or syslog server.</description>
<port protocol="udp" port="514"/>
</service>
修改配置的话只需要将/usr/lib/firewalld中的配置文件复制到/etc/firewalld中修改。恢复配置的话直接删除/etc/firewalld中的配置文件即可。
过滤规则
- source 根据数据包源地址过滤,相同的source只能在一个zone中配置。
- interface 根据接收数据包的网卡过滤
- service 根据服务名过滤(实际是查找服务关联的端口,根据端口过滤),一个service可以配置到多个zone中。
- port 根据端口过滤
- icmp-block icmp报文过滤,可按照icmp类型设置
- masquerade ip地址伪装,即将接收到的请求的源地址设置为转发请求网卡的地址(路由器的工作原理)。
- forward-port 端口转发
- rule 自定义规则,与itables配置接近。rule结合--timeout可以实现一些有用的功能,比如可以写个自动化脚本,发现异常连接时添加一条rule将相应地址drop掉,并使用--timeout设置时间段,过了之后再自动开放。
过滤规则优先级
1. source 源地址
2. interface 接收请求的网卡
3. firewalld.conf 中配置的默认zone
firewalld富规则
富规则的基本语法
firewall-cmd --add-rich-rule='<rule>'
rule family="ipv4" source address="源地址" port port="端口号" protocol="协议" accept|reject|drop
family: 协议族,通常是 ipv4 或 ipv6。
source address: 指定源 IP 地址。
destination address: 指定目标 IP 地址。
port: 指定端口号。
protocol: 指定协议(例如,tcp、udp、icmp 等)。
accept: 允许流量。
reject: 拒绝流量。
drop: 丢弃流量。
允许指定源 IP 地址访问特定端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="80" protocol="tcp" accept'
允许某个 IP 地址访问任何端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
拒绝某ip访问端口
在Firewalld防火墙服务中配置一条富规则,拒绝所有来自于192.168.10.0/24网段的用户访问本机ssh服务(22端口):
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
[root@linuxprobe ~]# firewall-cmd --reload
查看已应用的富规则
firewall-cmd --list-rich-rules
删除富规则
firewall-cmd --remove-rich-rule='<rule>'
添加日志记录
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="80" protocol="tcp" accept log prefix="HTTP access: "' --permanent
log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"]
[root@node2 firewalld]# firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.168.5.101" port port="80" protocol="tcp" accept'
标签:iptables,--,root,192.168,规则,数据包
From: https://www.cnblogs.com/cloudwangsa/p/18579053