- 内核
- iptable 提供了 raw filter nat mangle 表操作hooks点
- 命令(command)
- 入站链(chain) 排名分先后
- 转发链(chain) 排名分先后
- 出站链(chain) 排名分先后
- 条件(condition)
- 结果(target)
- iptables 语法
- 举例
- firewalld
内核
- 数组[proto][hooks]
- proto AP_INET(PF_INET) AP_INET6…
- hooks PRE_ROUTING LOCAL_IN FORWARD LOCAL_OUT POST_ROUTING
- PRE_ROUTING -> FORWARD -> POST_ROUTING
- PRE_ROUTING -> LOCAL_IN
- LOCAL_OUT -> POST_ROUTING
iptable 提供了 raw filter nat mangle 表操作hooks点
- 表排名分先后
- raw 决定是否进行数据跟踪和nat -j xxx 应用于 PRE_ROUTING LOCAL_OUT
- mangle 包修改 数据修改应用于 所有hook
- nat 网络地址转换 PRE_ROUTING LOCAL_OUT POST_ROUTING
- filter 包过滤 LOCAL_IN LOCAL_OUT FORWARD
- 现有表 cat /proc/net/ip_tables_names
- -t 指定操作表名,默认filter
命令(command)
- -A 在指定链的末尾添加一条新的规则
- -D 删除指定链中的某一条规则,可以按规则序号和内容删除
- -I 在指定链中插入一条新的规则,默认在第一行添加
- -R 修改、替换指定链中的某一条规则,可以按规则序号和内容替换
- -L 列出指定链中所有的规则进行查看
- -E 重命名用户定义的链,不改变链本身
- -F 清空(flush)
- -N 新建一条用户自己定义的规则链
- -X 删除指定表中用户自定义的规则链
- -P 设置指定链的默认策略
- -Z 将所有表的所有链的字节和数据包计数器清零
- -n 使用数字形式显示输出结果
- -v 查看规则表详细信息的信息
- -V 查看版本
- -h 获取帮助
入站链(chain) 排名分先后
- PREROUTING(nat mangle raw)内核判断是否为本机数据
- INPUT(filter mangle) 用户空间输入过滤
转发链(chain) 排名分先后
- PREROUTING(nat mangle raw)内核判断是否为本机数据
- FORWARD(filter mangle) 内核判断
- POSTROUTING(nat raw mangle)输出内核过滤
出站链(chain) 排名分先后
- OUTPUT(filter nat mangle raw) 用户空间输出过滤
- POSTROUTING(nat raw mangle)输出内核过滤
条件(condition)
-
-p TCP UDP ICMP all /etc/protocols 中任意name -
-s networ name hostname 192.0../24 IP 源地址 -
-d networ name hostname 192.0../24 IP 目的地址 -
-i eth0 eth+ 入口设备 -
-o eth0 eth+ 出口设备 -
–sport 80 80:8080 源端口或范围 -
–dport 80 80:8080 目的端口或范围
结果(target)
- ACCEPT 允许数据包通过
- DROP 丢弃数据包不响应
- REJECT 拒绝数据包并发送拒绝响应 –reject-with tcp-reset
- LOG 记录日志并检查下一条规则 –log-prefix “…”
- REDIRECT 重新导向另一端口并继续检查规则 –to–ports
- MASQUERADE 修改源IP为当前IP可指定端口并继续 –to–ports
- SNAT 修改源IP或端口,并继续 –to-souce 10.1..-10.2..:2-9
- DNAT 修改目标IP后端口,并继续 –to-destination 1.1..-1.2..:2-9
- MIRROR 将源和目的地址互换并发回。
- QUEUE 放入队列等待用户防火墙程序处理
- RETURN 结束当前子过滤程序并返回上一级过滤继续执行
- MARK 做标记继续下面的规则 –set-mark 2
iptables 语法
- iptables [-t filter] command [chian] [condtion] [-j target]
举例
- service iptables save 保存规则到/etc/sysconfig/iptables
- iptables -D INPUT 1 删除IPUT链的filter表的第一条规则
- iptables -I INPUT -p icmp -j REJECT 拒绝进入防火墙的所有ICMP协议包
- iptables -A FORWARD -p ! icmp -j ACCEPT 允许转发除ICMP协议外所有数据包
- iptables -nL –line-number -t nat 显示nat表所有管道的规则及行号
firewalld
- 动态防火墙
- /etc/firewalld/优先加载
- /usr/lib/firewalld/
- 9个区域
- trusted(信任区域) 允许所有的传入流量
- public(公共区域) 允许ssh等预定义服务的传入流量,默认区域包含所有网卡
- external(外部区域) 允许ssh等预定义服务的传入流量,做伪路由
- home(家庭区域) 允许ssh(更多)等预定义服务的传入流量
- internal(内部区域) 默认值与homel区域相同
- work(工作区域) 允许ssh等预定义服务的传入流量
- nm-share
-
dmz(隔离 非军事区域) 允许ssh等预定义服务的传入流量 - block(限制区域) 拒绝所有传入流量
- drop(丢弃区域) 丢弃所有传入流量,并且不产生包含ICMP的错误响应
- 根据源IP:PORT IP PORT 的顺序筛选区域判断规则,无对应规则使用public
-
firewall-cmd 命令行规则配置、firewall-config 图形配置界面、直接编辑xml ```shell firewall-cmd -h, –help #帮助 -V, –version #版本信息 -q, –quiet #不输出状态信息 –state #当前状态 –reload #重新加载配置,保持已有链接 –complete-reload #重新加载配置,断开所有链接 –list-all #查看当前配置概览 –get-log-denied #当前拒绝日志级别 –set-log-denied=all|unicast|broadcast|multicast|off –check-config #检测当前保存配置是否有误 –panic-on #启用拒绝所有包模式 –panic-off #禁用拒绝所有包模式 –query-panic #是否启用拒绝所有包模式 –permanent #指定针对保存的配置、或修改保存的配置 –runtime-to-permanent #将临时规则保存,成为永久规则 –timeout=
#'s' or 'm' or 'h'规则启用时长 –get-default-zone #显示当前默认区域 –set-default-zone=zone #设置默认区域 –get-active-zones #当前正在使用的区域及对应网卡 [–permanent] –get-zones #显示所有预定义的区域 [–permanent] –get-zone-of-interface=l #显示指定网卡绑定的区域 [–permanent] –get-zone-of-source=ip/24|mac|ipset:ipset [–permanent] –list-all-zones #显示所有区域及其规则 –permanent –new-zone=zone #创建一个新的区域 –permanent –new-zone-from-file=path [–name=zone] –permanent –delete-zone=zone #删除一个区域 –permanent –load-zone-defaults=zone #加载区域默认配置 –info-zone=zone #显示指定区域的规则 –permanent –path-zone=zone #显示指定区域保存路径 –zone=zone #指定某个区域作为后面子命令的目标
–get-policies #显示预定义策略 –get-active-policies #显示当前使用的策略规则 –list-all-policies #显示所有策略的规则及配置 –new-policy=
#添加一个策略 --permanent --new-policy-from-file=path [--name=policy] --delete-policy= #删除一个策略 --load-policy-defaults= #加载指定策略的默认规则 --info-policy= #显示某策略的规则及配置 --path-policy= #显示某策略保存路径 --policy= #指定某个策略作为后面子命令的目标 –get-ipset-types #显示支持的ipset类型 –new-ipset=
--type= [--option= [= ]].. --permanent --new-ipset-from-file=path [--name= ] --permanent --delete-ipset= #删除指定的ipset --permanent --load-ipset-defaults= --info-ipset= #显示指定ipset的配置 --permanent --path-ipset= #显示指定ipset的保存路径 --get-ipsets #显示预定义ipset --permanent --ipset= --set-description="xx" --permanent --ipset= --get-description --permanent --ipset= --set-short="sort description" --permanent --ipset= --get-short #显示指定ipset的简短说明 [--permanent] --ipset= --add-entry= [--permanent] --ipset= --remove-entry= [--permanent] --ipset= --query-entry= [--permanent] --ipset= --get-entries [--permanent] --ipset= --add-entries-from-file= [--permanent] --ipset= --remove-entries-from-file= [–permanent] –get-icmptypes #显示所有预定义的ICMP类型 –permanent –new-icmptype=
#添加icmp类型 --permanent --new-icmptype-from-file= [--name= ] --permanent --delete-icmptype= #删除icmp类型 --permanent --load-icmptype-defaults= --info-icmptype= #显示icmptype的配置信息 --permanent --path-icmptype= #显示icmptype配置保存路径 --permanent --icmptype= --set-description="xxx" --permanent --icmptype= --get-description --permanent --icmptype= --set-short="sort description" --permanent --icmptype= --get-short --permanent --icmptype= --add-destination=ipv4/ipv6:ip/24 --permanent --icmptype= --remove-destination=ipv4/ipv6:ip/24 --permanent --icmptype= --query-destination=ipv4/ipv6:ip/24 --permanent --icmptype= --get-destinations [–permanent] –get-services #显示所有预定义的服务 –permanent –new-service=
#添加新服务 --permanent --new-service-from-file=path [--name= ] --permanent --delete-service= #删除服务 --permanent --load-service-defaults= --info-service= #显示服务配置 --permanent --path-service= #显示服务保存地址 --permanent --service= --set-description="xxx" --permanent --service= --get-description --permanent --service= --set-short="short description" --permanent --service= --get-short --permanent --service= --add-port= [-port]/ --permanent --service= --remove-port= [-port]/ --permanent --service= --query-port= [-port]/ --permanent --service= --get-ports --permanent --service= --add-protocol= --permanent --service= --remove-protocol= --permanent --service= --query-protocol= --permanent --service= --get-protocols --permanent --service= --add-source-port=<p>[-p]/ --permanent --service= --remove-source-port=<p>[-p]/ --permanent --service= --query-source-port=<p>[-p]/ --permanent --service= --get-source-ports --permanent --service= --add-helper= --permanent --service= --remove-helper= --permanent --service= --query-helper= --permanent --service= --get-service-helpers --permanent --service= --set-destination= :<address>[/ ] --permanent --service= --remove-destination= --permanent --service= --query-destination= : [/ ] --permanent --service= --get-destinations --permanent --service= --add-include= --permanent --service= --remove-include= --permanent --service= --query-include= --permanent --service= --get-includes –get-helpers #显示预定义helper列表 –permanent –new-helper=
--module= [--family= ] --permanent --new-helper-from-file= [--name= ] --permanent --delete-helper= #删除helper --permanent --load-helper-defaults= --info-helper= #显示helper信息 --permanent --path-helper= #显示helper保存路径 --permanent --helper= --set-description= --permanent --helper= --get-description --permanent --helper= --set-short= --permanent --helper= --get-short --permanent --helper= --add-port= [- ]/ --permanent --helper= --remove-port= [-port>]/ --permanent --helper= --query-port= [- ]/ --permanent --helper= --get-ports --permanent --helper= --set-module= --permanent --helper= --get-module --permanent --helper= --set-family={ipv4|ipv6|} --permanent --helper= --get-family #[P] permanent #[Z] zone= #[O] policy= #[T] timeout= –<P|Z|O> –list-all #显示指定类型的所有对象 –permanent –<Z|O> –set-description=
--permanent --<Z|O> --get-description #显示指定类型的描述 --permanent --<Z|O> --get-target #获取指定类型的目标 --permanent --<Z|O> --set-target= --<Z|O> --set-short= #设置指定类型的短描述 --permanent --<Z|O> --get-short #显示指定类型的短描述 --<P|Z> --list-services #显示之地类型中的服务列表 --<P|Z|O|T> --add-service= #添加服务到指定类型中 --<P|Z|O> --remove-service= #从指定类型中删除服务 --<P|Z|O> --query-service= #查询指定类型中是否有指定服务 --<P|Z|O> --list-ports #显示指定类型中设置的端口 --<P|Z|O|T> --add-port= [-port]/ --<P|Z|O> --remove-port= [- ]/ --<P|Z|O> --query-port= [- ]/ --<P|Z|O> --list-protocols #显示指定类型中设置的协议列表 --<P|Z|O|T> --add-protocol= #添加协议到指定类型中 --<P|Z|O> --remove-protocol= #从指定类型中删除指定协议 --<P|Z|O> --query-protocol= #查询指定类型中是否有指定协议 --<P|Z|O> --list-source-ports #显示指定类型中配置的端口 --<P|Z|O|T> --add-source-port= [- ]/ --<P|Z|O> --remove-source-port= [- ]/ --<P|Z|O> --query-source-port= [- ]/ --<P|Z|O> --list-icmp-blocks #显示指定类型是否有icmp类型 --<P|Z|O|T> --add-icmp-block= #在指定类型中添加icmp类型 --<P|Z|O> --remove-icmp-block= #删除指定类型中icmp类型 --<P|Z|O> --query-icmp-block= #查询指定类型中是否有icmp类型 --<P|Z|O> --list-forward-ports #显示指定类型的转发端口 --<P|Z|O|T> --add-forward-port=port= [-sport]:proto= [:toport=dport[-dport]][:toaddr=<address>[/ ]] --<P|Z|O> --remove-forward-port=port= [- ]:proto= [:toport= [- ]][:toaddr=<address>[/ ]] --<P|Z|O> --query-forward-port=port= [- ]:proto= [:toport= [- ]][:toaddr=<address>[/ ]] --<P|Z|O|T> --add-masquerade #在指定类型上添加nat转换 --<P|Z|O> --remove-masquerade #删除指定类型上的nat转换 --<P|Z|O> --query-masquerade #查询指定类型上是否有nat转换 --<P|Z|O> --list-rich-rules #显示指定类型上复杂规则 --<P|Z|O|T> --add-rich-rule= #在指定类型上添加复杂规则 --<P|Z|O> --remove-rich-rule= #在指定类型上删除复杂规则 –<P Z O> –query-rich-rule= #查询指定类型上是否有指定复杂规则 –<P Z> –add-icmp-block-inversion #在指定类型启用icmp阻止规则反转 –<P Z> –remove-icmp-block-inversion #失效指定类型icmp阻止规则反转 –<P Z> –query-icmp-block-inversion #查询指定类型是否启用icmp阻止规则反转 –<P Z T> –add-forward #启用指定类型的包转发 –<P Z> –remove-forward #禁用指定类型的包转发 –<P Z> –query-forward #查询指定类型是否启用包转发 –<P O> –get-priority #显示指定策略优先级 –<P O> –set-priority= #设置指定策略优先级 –<P O> –list-ingress-zones #显示指定策略in流量涉及的区域 –<P O> –add-ingress-zone= #为指定策略添加in流量区域 –<P O> –remove-ingress-zone= #移除指定策略in流量区域 –<P O> –query-ingress-zone= #查询指定策略in流量是否有指定区域 –<P O> –list-egress-zones #显示指定策略out流量涉及的区域 –<P O> –add-egress-zone= #为指定策略添加out流量区域 –<P O> –remove-egress-zone= #移除指定策略out流量区域 –<P O> –query-egress-zone= #查询指定策略out流量是否有指定区域 –<P Z> –list-sources #显示指定区域源列表 –<P Z> –add-source=[/ ] ipset: –<P Z> –change-source=[/ ] ipset: –<P Z> –query-source=[/ ] ipset: –<P Z> –remove-source=[/ ] ipset: –<P Z> –list-interfaces #显示指定区域网卡列表 –<P Z> –add-interface= #为指定区域添加网卡 –<P Z> –change-interface= #修改指定区域网卡 –<P Z> –query-interface= #查询指定区域是否包含指定网卡 –<P Z> –remove-interface= #删除指定区域的指定网卡 #类似iptable的规则 [–permanent] –direct –get-all-chains #获取网络栈列表 [–permanent] –direct –get-chains {ipv4|ipv6|eb} <table> [–permanent] –direct –add-chain {ipv4|ipv6|eb} <table>
[--permanent] --direct --remove-chain {ipv4|ipv6|eb} <table> [--permanent] --direct --query-chain {ipv4|ipv6|eb} <table> [--permanent] --direct --get-all-rules #获取所有规则 [--permanent] --direct --get-rules {ipv4|ipv6|eb} <table> [--permanent] --direct --add-rule {ipv4|ipv6|eb} <table> ... [--permanent] --direct --remove-rule {ipv4|ipv6|eb} <table> ... [--permanent] --direct --remove-rules {ipv4|ipv6|eb} <table> [--permanent] --direct --query-rule {ipv4|ipv6|eb} <table> ... [--permanent] --direct --passthrough {ipv4|ipv6|eb} ... [--permanent] --direct --get-all-passthroughs [--permanent] --direct --get-passthroughs {ipv4|ipv6|eb} ... [--permanent] --direct --add-passthrough {ipv4|ipv6|eb} ... [--permanent] --direct --remove-passthrough {ipv4|ipv6|eb} ... [--permanent] --direct --query-passthrough {ipv4|ipv6|eb} ... –lockdown-on #开启lockdown –lockdown-off #禁用lockdown –query-lockdown #查询lockdown状态 [–permanent] –list-lockdown-whitelist-commands [–permanent] –add-lockdown-whitelist-command=
[–permanent] –remove-lockdown-whitelist-command= [–permanent] –query-lockdown-whitelist-command= [–permanent] –list-lockdown-whitelist-contexts [–permanent] –add-lockdown-whitelist-context= [--permanent] --remove-lockdown-whitelist-context= [--permanent] --query-lockdown-whitelist-context= [--permanent] --list-lockdown-whitelist-uids [--permanent] --add-lockdown-whitelist-uid= [--permanent] --remove-lockdown-whitelist-uid= [--permanent] --query-lockdown-whitelist-uid= [--permanent] --list-lockdown-whitelist-users [--permanent] --add-lockdown-whitelist-user= [--permanent] --remove-lockdown-whitelist-user= [--permanent] --query-lockdown-whitelist-user=
firewall-cmd –permanent –add-rich-rule=”rule family=”ipv4” source address=”192.168.142.166” port protocol=”tcp” port=”5432” accept” ```