29.0iptables防火墙
iptables和firewalld互斥,功能一样,语法不同,
iptables初识
1、 Netfilter组件
2、 内核空间,集成在linux内核中
3、 扩展各种网络服务的结构化底层框架
4、 内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、 PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一 个命令工具(iptables)向其写入规则
5、 由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上
6、 三种报文流向:
流入本机:PREROUTING –> INPUT–>用户空间进程
流出本机:用户空间进程 –>OUTPUT–> POSTROUTING
转发:PREROUTING –> FORWARD –> POSTROUTING
7、 防火墙工具
8、 iptables
命令行工具,工作在用户空间
用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包
9、 firewalld
CentOS 7引入了新的前端管理工具
管理工具:
firewall-cmd 命令行
firewall-config 图形
内核中数据包的传输过程
1、 内核中数据包的传输过程
2、 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去
3、 如果数据包就是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING链输出/4、 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出
iptables的组成
1、五个表table:filter、nat、mangle、raw,Security
filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包
nat表:network address translation 地址转换规则表
mangle:修改数据标记位规则表
Raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度
Security:此表用于前置访问控制(mac)网络规则,由Linux安全模块(如SELinux)实现
优先级由高到低的顺序为:security–>raw–>mangle–>nat–>filter
2、五个内置链chain
INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING
iptables规则
1、规则rule:根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理
2、 匹配条件:默认为与条件,同时满足
基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
扩展匹配:通过复杂高级功能匹配
3、 处理动作:称为target,跳转目标
内建处理动作:ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG…
自定义处理动作:自定义chain,利用分类管理复杂情形
4、 规则要添加在链上,才生效;添加在自定义上不会自动生效
5、 链chain:
内置链:每个内置链对应于一个钩子函数
自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;
只有Hook钩子调用自定义链时,才生效
iptables命令
一、 规则格式:iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
-t table:
raw, mangle, nat, [filter]默认
SUBCOMMAND:
1、链管理:
-N:new, 自定义一条新的规则链
-X:delete,删除自定义的空的规则链
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受
DROP:丢弃
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除
2、查看:
-L:list, 列出指定鏈上的所有规则,本选项须置后
-n:numberic,以数字格式显示地址和端口号
-v:verbose,详细信息
-vv 更详细
-x:exactly,显示计数器结果的精确值,而非单位转换后的易读值
--line-numbers:显示规则的序号
常用组合:
--vnL
--vvnxL --line-numbers
-S selected,以iptables-save 命令格式显示链上规则
3、规则管理:
-A:append,追加 #追加到最后一条
-I:insert, 插入,要指明插入至的规则编号,默认为第一条
-D:delete,删除
(1) 指明规则序号
(2) 指明规则本身
-R:replace,替换指定链上的指定规则编号
-F:flush,清空指定的规则链
-Z:zero,置零
iptables的每条规则都有两个计数器
(1) 匹配到的报文的个数
(2) 匹配到的所有报文的大小之和
二、chain:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
三、匹配条件
基本:通用的,PARAMETERS
扩展:需加载模块,MATCH EXTENTIONS
1、基本匹配条件:无需加载模块,由iptables/netfilter自行提供
[!] -s, –source address[/mask][,…]:源IP地址或范围
[!] -d, –destination address[/mask][,…]:目标IP地址或范围
[!] -p, –protocol protocol:指定协议,可使用数字如0(all)
protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or “all“ 参看:/etc/protocols
[!] -i, –in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链
[!] -o, –out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链
2 扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效
查看帮助 man iptables-extensions
(1)隐式扩展:在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
tcp协议的扩展选项
[!] –source-port, –sport port[:port]:匹配报文源端口,可为端口范围
[!] –destination-port,–dport port[:port]:匹配报文目标端口,可为范围
[!] –tcp-flags mask comp
mask 需检查的标志位列表,用,分隔
例如 SYN,ACK,FIN,RST
comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔
tcp协议的扩展选项(隐式扩展)
1、–tcp-flags SYN,ACK,FIN,RST SYN
2、udp
[!] –source-port, –sport port[:port]:匹配报文的源端口;可以是端口范围
[!] –destination-port,–dport port[:port]:匹配报文的目标端口;可以是端口范围
3、icmp
[!] –icmp-type {type[/code]|typename}
type/code
0/0 echo-reply icmp应答
tcp协议的扩展选项(显式扩展)
必须使用-m选项指明要调用的扩展模块的扩展机制,要手动加载扩展模块
[-m matchname [per-match-options]]
处理动作:
-j targetname [per-target-options] #jump
简单: ACCEPT,DROP
扩展: REJECT:–reject-with:icmp-port-unreachable默认
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志,dmesg
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装 …
自定义链:
使用帮助:
CentOS 6: man iptables
CentOS 7: man iptables-extensions
centos6 基本用法和扩展用法man 8 iptables ; centos7基本用法man 8 iptables ,扩展用法man 8 iptables-extensions
1、multiport扩展
2、iprange扩展
3、mac扩展
4、string扩展
5、time扩展
6、connlimit扩展
7、limit扩展
8、state扩展
iptables命令
1、 iptables的链接跟踪表最大容量为/proc/sys/net/nf_conntrack_max,各种状态的超时链接会从表中删除;当模板满载时,后续连接可能会超时
解决方法两个:
(1) 加大nf_conntrack_max 值
vim /etc/sysctl.conf
net.nf_conntrack_max = 393216
net.netfilter.nf_conntrack_max = 393216
(2) 降低 nf_conntrack timeout时间
vi /etc/sysctl.conf
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
iptables -t nat -L -n
iptables命令
开机自动重载规则
开机自动重载规则文件中的规则:#centos7改为forwalld,要用iptables需要自己配置
(1) 用脚本保存各iptables命令;让此脚本开机后自动运行
/etc/rc.d/rc.local文件中添加脚本路径
/PATH/TO/SOME_SCRIPT_FILE
(2) 用规则文件保存各规则,开机时自动载入此规则文件中的规则
/etc/rc.d/rc.local文件添加
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
(3)自定义Unit File,进行iptables-restore
=============================================================
[[email protected] ~ ]#grep -i iptables /boot/config-3.10.0-862.el7.x86_64
CONFIG_IP_NF_IPTABLES=m #以模块方式编译存在
CONFIG_IP6_NF_IPTABLES=m
#iptables trigger is under Netfilter config (LED target)
[[email protected] ~ ]#ls /lib/modules/3.10.0-862.el7.x86_64/ #模块路径
#命令工具,默认安装好了
[[email protected] ~ ]#rpm -qi iptables
Name : iptables
Version : 1.4.21
Release : 24.el7
Architecture: x86_64
Install Date: Sun 19 Aug 2018 11:14:56 PM CST
Group : System Environment/Base
Size : 1555941
License : GPLv2
Signature : RSA/SHA256, Wed 25 Apr 2018 07:06:00 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : iptables-1.4.21-24.el7.src.rpm
Build Date : Fri 13 Apr 2018 01:42:37 AM CST
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.netfilter.org/
Summary : Tools for managing Linux kernel packet filtering capabilities
Description :
The iptables utility controls the network packet filtering code in the
Linux kernel. If you need to set up firewalls and/or IP masquerading,
you should install this package.
[[email protected] ~ ]#rpm -ql iptables #查看提供的程序及服务
iptables和Firewallsd服务是互斥的,把firewalld服务停止
[[email protected] ~ ]#systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2018-08-20 09:11:30 CST; 6h ago
Docs: man:firewalld(1)
Main PID: 794 (firewalld)
CGroup: /system.slice/firewalld.service
└─794 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Aug 20 09:11:27 cos17.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
Aug 20 09:11:30 cos17.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
[[email protected] ~ ]#systemctl stop firewalld
[[email protected] ~ ]#systemctl disable firewalld #开机不启动
[[email protected] ~ ]#systemctl is-enabled firewalld #查看开机是否自启动
disabled
[[email protected] ~ ]#iptables -vnL #默认filter -t nat|mangle|raw
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
上一篇: xml解析3:使用jdom框架进行对xml文档生成和读写解析
下一篇: 61 iptables