1.常见防火墙选用
硬件防火墙
开源软件:iptables(默认规则改为INPUT DROP)
云服务器:安全组(阿里云 白名单,默认是拒绝的)
2.iptables使用 执行过程
3.iptables 4表5链
4.准备iptables环境
5.iptables功能之一防火墙
封IP 封端口
准许某个ip访问 网段访问
6.iptables功能之内网服务器上外网(共享上网)
7.iptables功能之 端口转发
2.常见防火墙选用
- 公司网站入口使用的硬件 防火墙 、三次路由带有防火墙功能
- itpables访问量小 C5 C6自带,CentOS 7为Firewalld
SELinux
3.相关名词与单词
名词 | 含义 | 对比 |
---|---|---|
容器 | 存放内容/存放东西 | |
Netfilter/iptables | 是表的容器 | 国家 |
表(table) | 表是用来存放链的容器 | 省 |
链(chain) | 链 存放规则的容器 | 市 |
规则(policy) | 准许/拒绝访问 | 区/县 |
4.防火墙执行过程
- 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
- 如果匹配上规则,即明确表示是阻止(DROP)还是通过(ACCEPT)数据包就不再向下匹配新的规则。
- 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
- 防火墙的默认规则是所有规则执行完才执行的。
5.四表五链
5.1 四表及作用
表 | 功能 |
---|---|
Filter | 过滤,默认的表,防火墙功能 |
NAT | 实现NAT转化:1.共享上网 2.端口转发 |
mangle | 查询帮助man iptables 了解即可 |
raw | 查询帮助man iptables 了解即可 |
5.2 四表中的5链
五链:
PREROUTING
FORWARD
INPUT
OUPUT
POSTROUTING
5.3 filter表和nat表
5.3.1 filter表
filter表 | 企业工作场景:主机防火墙 |
---|---|
INPUT | 就是过滤进入主机的数据包 |
FORWARD | 负责转发流经主机的数据包 |
OUTPUT | 就是处理从主机发出去的数据包 |
5.3.2 nat表
nat表 | |
---|---|
PREROUTING | 处理用户请求中的目的地址 目的端口 端口转发 ip映射 |
POSTROUTING | 处理离开服务器的请求 源端口 源ip :共享上网 |
OUTPUT | 和主机放出去的数据包有关,改变主机发出数据包的目的地址 |
补充:
filter表:
INPUT 作用:用于发送到本地套接字的数据包。
FORWARD 作用:对于正在通过该框路由的数据包
OUTPUT 作用:用于本地生成的数据包。
nat表:
PREROUTING 作用:因为他们一进来就改变了包
OUTPUT 作用:用于在路由之前更改本地划分的数据包。
POSTROUTING 作用:改变包,因为它们即将离开
6.防火墙之filter表
6.1环境准备
m01 iptables iptables-services
db01 iptables iptables-services
[root@m01 ~]# rpm -qa iptables-services
iptables-1.4.21-28.el7.x86_64
[root@m01 ~]# rpm -ql iptables-services
/etc/sysconfig/ip6tables
/etc/sysconfig/iptables #iptables 配置文件
/usr/lib/systemd/system/ip6tables.service
/usr/lib/systemd/system/iptables.service #iptables服务管理配置
启动防火墙
[root@m01 ~]# systemctl stop firewalld #CentOS7关闭firewalld [root@m01 ~]# systemctl restart iptables [root@m01 ~]# systemctl enable iptables
手动加载内核模块
[root@m01 ~]# modprobe ip_tables
[root@m01 ~]# modprobe iptable_filter
[root@m01 ~]# modprobe iptable_nat
[root@m01 ~]# modprobe ip_conntrack
[root@m01 ~]# modprobe ip_conntrack_ftp
[root@m01 ~]# modprobe ip_nat_ftp
[root@m01 ~]# modprobe ipt_state
检查防火墙内核模块是否加载成功:
[root@m01 ~]# lsmod |egrep 'nat|ipt|filter' nf_nat_ftp 12770 0 nf_conntrack_ftp 18638 1 nf_nat_ftp ipt_REJECT 12541 2 nf_reject_ipv4 13373 1 ipt_REJECT ipt_MASQUERADE 12678 1 nf_nat_masquerade_ipv4 13412 1 ipt_MASQUERADE iptable_filter 12810 1 xt_nat 12681 2 iptable_nat 12875 1 nf_nat_ipv4 14115 1 iptable_nat nf_nat 26787 4 nf_nat_ftp,nf_nat_ipv4,xt_nat,nf_nat_masquerade_ipv4 nf_conntrack 133095 8 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4 ip_tables 27126 2 iptable_filter,iptable_nat libcrc32c 12644 3 xfs,nf_nat,nf_conntrack
6.2 配置规则-禁止访问22端口
[root@m01 ~]# iptables -F #清除规则 [root@m01 ~]# iptables -X [root@m01 ~]# iptables -Z [root@m01 ~]# iptables -nL #查看规则 Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@m01 ~]# #添加一条规则,禁止22端口访问 [root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP [root@m01 ~]# Type `help' to learn how to use Xshell prompt. [d:\~]$ #断开了~跑下机房
删除规则,重新连接m01
[root@m01 ~]# iptables -nL --line-number #查看防火墙规则 [root@m01 ~]# iptables -t filter -D INPUT 1 #删除第1条规则 [root@m01 ~]# iptables -nL --line-number #再次查看
重新连接 22端口就可以用了
Type `help' to learn how to use Xshell prompt.
[d:\~]$
Connecting to 10.0.0.61:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Tue Jul 2 17:04:55 2019
[root@m01 ~]#
配置防火墙规则注意事项:
去机房重启系统或者登陆服务器删除刚才的禁止规则。
让机房人员重启服务器或者让机房人员拿用户密码登录进去
通过服务器的远程管理卡管理(推荐)
先写一个定时任务,每5分钟就停止防火墙**5. 测试环境测试好,写成脚本,批量执行
6.3 filter表其他规则配置
6.3.1 只让10.0.0.0/24网段进行访问连接
只要是10.0.0.0/24 局域网的用户 访问m01 都ACCEPT
此例子主要限制:网段或ip地址
[root@m01 ~]# iptables -A INPUT -p tcp ! -s 10.0.0.0/24 -j DROP #"!" 叹号表示取反
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- !10.0.0.0/24 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
去另一台服务器上测试一下是否成功:
[root@db01 ~]# ssh 10.0.0.61 #连接10.0.0.61,可以连接 root@10.0.0.61's password: Last login: Tue Jul 2 17:41:01 2019 from 10.0.0.51 [root@m01 ~]# logout #退出 Connection to 10.0.0.61 closed. [root@db01 ~]# ssh 172.16.1.61 #连接172.16.1.61,不可以连接 ....等到死
6.3.2准许或禁止端口
多个端口:表示范围 1-1024范围
[root@m01 ~]# iptables -I INPUT -p tcp ! --dport 1:1024 -j DROP
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:!1:1024
2 DROP tcp -- !10.0.0.0/24 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
多个端口 不连续 80,443,52113,22
[root@m01 ~]# iptables -I INPUT -p tcp -m multiport ! --dport 80,443,22 -j DROP
[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports !80,443,22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
6.4 iptables命令及参数
iptables | |
---|---|
-t | 指定表 filter(默认) nat |
-A | append 把规则追加到末尾 |
-I (大写字母i ) | insert 把规则插入到规则的第1条 (添加拒绝类规则的时候) |
-p | protocal 指定协议:tcp /udp/icmp |
--dport | destination port 目标端口 |
--sport | source port 源端口 |
-d | dest ip address 目标ip地址 |
-s | source ip address 源ip地址 |
-j | jump 方法 DROP (拒绝)、 ACCEPT(准许) 、REJECT(拒绝) |
iptables查看 删除 | ||
---|---|---|
-F | 清除链中所有规则 | |
-X | 清空自定义链的规则 | |
-Z | 清空计数器 | |
-n | 不要把端口解析服务名字 | |
-L | 显示表中的规则 | |
--line-number | 给每个链中的规则加上行号 | |
-D | 删除规则 根据规则的号码进行删除 |
7. nc命令
nc用法:
nc -l 指定监听端口
nc/telnet 连接
[root@m01 ~]# nc -l 888 #m01服务器上
爱你哦
晚上好
你也好
[root@db01 ~]# nc 10.0.0.61 888 #db01服务器上
爱你哦
晚上好
你也好
iptables防火墙必会面试题:https://www.cnblogs.com/wajika/p/6382853.html