防火墙定义:是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。
防火墙发展应用:最早是ipfwadm和ipchains(Redhat7.0), 其次是iptables,Centos7开始后friewalld迅速发展,对iptables进行了 改良,目前还是iptables用的比较多。
防火墙的布防位置:
官网解释:iptables是用户空间命令行程序,用于配置 Linux 2.4.x 及更高版本的包过滤规则集。它面向系统管理员,由于网络地址转换也是从包过滤规则集配置的,iptables的包装还包括ip6tables。ip6tables用于配置 IPv6 包过滤器。
个人理解:是Linux下自带(C7以前)的开源的一款免费的基于包过滤的防火墙工具,可以对流入、流出、流经服务器的数据包进行精细的控制。目前Iptables主要工作在OSI七层的二、三四层(不编译的情况下),如果重新编译内核,Iptables也可以支持7层控制(squid代理+iptables)进行7层过滤。
iptables是采用【数据包】过滤机制工作的,所以它会对请求的数据包的【包头数据】进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。
【数据包的包头】是传输数据流经OSI七层模型中,经过各个层时,各个层根据遵循的协议给数据进行层层打包,如下图所示:
如图所示:
根据 IPtables的内部结构可以细化分为以功能为做区分的称呼为表,以IPtables动作为区分的称呼为链;其中包含关系为:IPtables(用户空间)-->netfilter (内和空间)-->tables(4表) -->chains(5链)--> 规则policy。
注:可以通过man IPtables 命令查看系统中具体的表和链的说明
不关闭selinux ,iptables不读取配置文件
临时关闭命令:getenforce 0
永久关闭命令:
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config #修改完成后需要重启才能生效
关闭防火墙
systemctl stop firewalld
关闭开机自启
systemctl disable firewalld
查看防火墙状态
systemctl status firewalld
命令:systemctl status iptables
安装命令: yum install iptables-services -y
启动和查看iptables状态
systemctl start iptables systemctl enable iptables
查看配置文件信息
查看配置文件命令:cat /etc/sysconfig/iptables
1 filter <==表table 2 :INPUT ACCEPT [0:0] 进入控制 chains 3 4 :FORWARD ACCEPT [0:0] 流经控制 5 6 :OUTPUT ACCEPT [0:0]流出控制 7 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #<==规则rule 8 -A INPUT -p icmp -j ACCEPT 9 -A INPUT -i lo -j ACCEPT 10 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 11 -A INPUT -j REJECT --reject-with icmp-host-prohibited 12 -A FORWARD -j REJECT --reject-with icmp-host-prohibited
-n #<==以数字的形式显示规则
-L #<==列表链里的所有规则
--line-number #<==打印规则序号
-t 指定表(default: `filter')
1 iptables -[A] chain rule-specification [options] #添加规则到链 2 iptables -I chain [rulenum] rule-specification [options] #插入规则到链 3 iptables -D chain rulenum [options] #根据规则号删除规则 4 iptables -[FZ] [chain] [options] #清除规则清除计数器 5 iptables -[X] chain #删除用户自定义的链。 6 iptables -P chain target [options] #针对链设置默认规则 7 iptables -h #帮助
1 --append -A chain #添加规则到链 2 --delete -D chain #删除规则从链里 3 --delete -D chain rulenum #根据规则号删除 4 --insert -I chain [rulenum] #插入规则默认到第一条 5 --list -L [chain [rulenum]] #列表规则 6 --flush -F [chain] #清空所有规则 7 --zero -Z [chain [rulenum]] #计数器 8 --policy -P chain target #改默认规则 9 --protocol -p proto #针对协议过滤,例如`tcp' 10 --source -s address[/mask][...] #基于源地址 11 --destination -d address[/mask][...] #基于目的地址 12 --in-interface -i input name[+] #指定进入接口 13 --jump -j target #跳转 14 --numeric -n #数字输出地址和端口 15 --out-interface -o output name[+] # 指定出去接口 16 --table -t table #指定表(default: `filter') 17 --line-numbers #显示规则号
1 *ACCEPT:允许数据包通过。 2 *DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。 3 *REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。 4 *SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。 5 *MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。 6 *DNAT:目标地址转换。 7 *REDIRECT:在本机做端口映射。 8 *LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
1 iptables -I INPUT -p tcp --dport 23:8809 -j DROP #过滤从23端口到8809端口 2 iptables -I INPUT -p tcp -s 192.168.56.1 -j DROP #封单个IP 3 iptables -I INPUT -p tcp --dport 23:8809 -j DROP #同时封多个端口:从23端口到8809端口 4 iptables -A INPUT -P TCP --dport 80 -j ACCEPT #开发80端口 5 iptables -I OUTPUT -p tcp --dport 80 -j DROP #不允许80端口流出 6 iptables -I INPUT -p tcp -m multiport --dport 21,23,24,80,3306 -j DROP #匹配端口范围 7 iptables -A INPUT -p icmp -s 192.168.56.0/24 --icmp-type 8 -j ACCEPT #设置同网段内可以访问(公司内部可以访问,其他人员不能访问) 8 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许关联的状态包(ftp协议,21连接端口,20数据传输端口)
1 iptables -F 2 iptables -X 3 iptables -Z 4 iptables -F -t nat 5 iptables -X -t nat 6 iptables -Z -t nat
1 iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT 2 iptables -A INPUT -s 203.81.18.0/24 -j ACCEPT 3 iptables -A INPUT -p tcp --dport 22 -j ACCEPT ##工作中根据自己情况,一般不用
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
1 iptables -A INPUT -i lo -j ACCEPT #允许回环地址 2 iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT #设置80端口转发 3 iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT 4 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT#连接状态设置
-A INPUT -p tcp -m tcp --dport 3306 -j DROP
#封掉规则,要放在里面其他允许规则的上面才能生效。
#允许规则,要放在里面其他允许规则上面才能生效。 重新加载生效:systemctl reload iptables
2.临时封Ip(-I):针对特殊ip重启后规则消失
iptables -I INPUT -s 203.71.78.10 -j DROP
3、常用的规则放在前面生效