Linux中级(防火墙iptables)
一。什么是防火墙?
1.定义:防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出
2.分类:
硬件防火墙:由厂商设计好的主要硬件,其操作系统主要是提供数据包数据的过滤机制为主,并去掉不必要的功能
软件防火墙:保护系统网络安全的一套软件,如Netfilter(数据包过滤)
二。Netilter(数据包过滤)
1.定义:
netfilter 是一个工作在Linux内核的网络数据包处理框架,用于分析进入主机的网络数据包,将数据包的头部数据(硬件地址,软件地址,TCP、UDP、ICMP等)提取出来进行分析,以决定该连接为放行或拒绝的机制,主要用于分析OSI七层协议的2(数据链路)、3(网络)、4(传输)层。
2.Netfilter分析内容:
拒绝让Internet的数据包进入主机的某些端口·拒绝某些来源IP的数据包进入
拒绝让带有某些特殊标志(flag)的数据包进入,如:带有SYN的主动连接标志·分析MAC地址决定是否连接
3.防火墙无法完成的任务
防火墙并不能杀毒或清除木马程序(假设主机开放了www服务,防火墙的设置是一定要将www服务的port开放给client端的。假设www服务器软件有漏洞,或者请求www服务的数据包本身就是病毒的一部分时,防火墙是阻止不了的)
防火墙无法阻止来自内部LAN的攻击(防火墙对于内部的规则设置通常比较少,所以就很容易造成内部员工对于网络无用或滥用的情况)
三。iptables的执行原则:
1.原则:防火墙会从上至下的顺序来读取配置文件的策略规则,在找到匹配项后就会立即结束匹配工作并去执行匹配项中定义的行为(即放行或者阻止),如果在读取完所有的匹配规则后没有匹配项,就去执行默认的策略、
2.防火墙规则:通(放行,允许) 堵(阻止,拒绝)
注释:当默认策略为拒绝的时候,就要设置允许规则,否则数据包都进不来,若默认为允许的啥时候,就要设置拒绝规则,否则数据包都能进来,防火墙也就失去了作用
3.规则链分类:
注释iptables流量处理动作:
accept:允许流量通过
reject:拒绝流量通过,拒绝后回复拒绝信息
log:记录日志信息
drop:拒绝流量通过,流量丢弃不响应
四。iptable表
规则链容纳了各种流量匹配规则,规则表则存储了不同功能对应的规则链,总之表里有链,链里有规则(表,链,规则)
四种规则表
1.filter表:用于对数据包过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、 REJECT、LOG),包含三个规则链,INPUT、FORWARD、 OUTPUT,所谓的防火墙其实基本上是指这张表上的过滤规则,常用
2.nat表: network address translation,网络地址转换功能,主要用于修改数据包的源、目标 IP地址、端口,包含三个规则链,OUTPUT、PREROUTING、POSTROUTING
3·mangle表:拆解报文,做出修改,并重新封装,主要用于修改数据包的TOS(Type Of
Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,由于需要相应的路由设备支持,因此应用并不广泛,包含全部五个规则链
4·raw表:是自1.2.9以后版本的iptables新增的表,用于是否对该数据包进行状态跟踪,在匹配数据包时,raw表的规则要优先于其他表,包含两个规则链,OUTPUT、PREROUTING.
五。iptables基本操作:
管理命令:
1.yum install iptables-services(下载iptables)
2.systemctl stop firewalld
3.systemctl disable firewalld
4.systemctl start iptables
5.systemctl enable iptables
6.service iptables save(保存iptables设置)
规则链存储文件:
1.vim /etc/sysconfig/iptables
注释:ping命令基于ICMP协议
六。iptables语法和参数
格式:iptables [-t 表名] 选项 [链名] [条件] [-j 控制动作]
1.iptables -nvxL --line(显示iptables的全部信息)
n:源信息 v:详细信息 x:进行单位转换 L:列出所有规则
注释:规则按照从上到下的顺序依次进行匹配,相同内容的规则不会进行矛盾,会按照顺序依次执行最上面的规则,后面则忽视
添加规则和删除规则的常用实例:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT(添加开放80端口规则)
iptables -I INPUT -p tcp --dport 80 -j REJECT(添加拒绝80端口规则)
iptables -D INPUT 3(删除input表中的第三条规则)
iptables -F(清空规则)
iptables -A INPUT -p tcp -s 192.168.1.151 -dport 22 -j REJECT(对于指定IP进行端口拒绝)
iptables -A INPUT -p tcp -s 192.168.1.151 -dport 80 -j ACCEPT(对于指定IP地址端口放行)
-A:表末尾追加 -p:协议 --dport:端口 -j:动作
实验一:为nginx网站添加iptables防火墙
2.systemctl stop firewalld
3.systemctl disable firewalld
4.systemctl start iptables
5.systemctl enable iptables
6.mkdir -p /www/wed
7.echo "hello world" > /www/wed/index.html
8.iptables -A INPUT -p tcp --dport 80 -j ACCEPT(设置规则)
-A:表末尾追加 -p:协议 --dport:端口 -j:放行
例如:iptables -I INPUT -p tcp --dport 80 -j REJECT(拒绝80端口)
注释:规则和处理动作要进行大写
9.service iptables save(保存规则)
10.iptables -nvxL --line(进行查看规则)
11.vim /etc/nginx/nginx.conf
12.systemctl restart nginx
13.curl ip地址
注意:显示不成功的原因:安全上下文没有一致性
chcon -v --reference=/usr/share/nginx/html /www/wed/index.html