常见防火墙的选用
公司网站入口使用的硬件放火墙,三层路由带有防火墙的功能
iptables访问量小 c5,c6系统默认,c7 Firewalld(关闭 安装iptables)
3. 名词(关系)与单词
- 容器:存放内容/存放东西
- Netfilter/iptables:Netfilter/iptables是表的容器
- 表(table):用来存放链的容器
- 链(chain):链存放 规则容器
- 规则:准许/拒绝访问
防火墙的执行过程
- 1. 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
- 2. 如果匹配上规则,即明确表示是阻止(DROP)还是通过(ACCEPT)数据包就不再向下匹配新的规则。
- 3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
- 4. 防火墙的默认规则是所有规则执行完才执行的
![0d65559eb465f139326aa730c406da64.png](https://i-blog.csdnimg.cn/blog_migrate/582b990fde4e9394b935a5695fc7657d.jpeg)
四表五链
整体说明 4表及作用
filter:过滤,默认得表,防火墙功能。
NAT:实现NAT转化1:共享上网,2:端口转发
mangle:
raw:
表中得5链
![7386e14ba377dbea50425116d8c1e6e6.png](https://i-blog.csdnimg.cn/blog_migrate/f030491afd0b8295f06eeaafc3990de9.png)
![9d8039a273eedb5c5f6d2d04e49e34ac.png](https://i-blog.csdnimg.cn/blog_migrate/6a9f75b8a07b07bb579f15e2f0b5dd6c.jpeg)
filter表
![cd57f553ab213abb2b34bc6844067f1f.png](https://i-blog.csdnimg.cn/blog_migrate/a9e198d1bc77ccfac61a597cb733724d.png)
nat表
![ca15b4d080ba1e43c4148cd0be95ce16.png](https://i-blog.csdnimg.cn/blog_migrate/c8f85073a8fea02481854ea61d7ba742.jpeg)
Mangle表
主要负责修改数据包中特殊的路由标记,如TTL,TOS,MARK等,这个表定义了5个链(需要补充)
防火墙之filter表
环境准备
m01 iptables
db01
yum install iptables iptables-services #下载
[root@m01 ~]# rpm -qa iptables-services
iptables-services-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服务管理配置
启动防火墙:
1systemctl start iptables.service
2systemctl enable iptables.service
检查防火墙内核模块是否加载成功:
[root@91 ~]# lsmod |egrep 'nat|ipt|filter'
ipt_REJECT 12541 2
nf_reject_ipv4 13373 1 ipt_REJECT
iptable_filter 12810 1
ip_tables 27126 1 iptable_filter
添加模块得命令
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
[root@91 ~]# modprobe ip_tables
[root@91 ~]# modprobe iptable_filter
[root@91 ~]# modprobe iptable_nat
[root@91 ~]# modprobe ip_conntrack
[root@91 ~]# modprobe ip_conntrack_ftp
[root@91 ~]# modprobe ip_nat_ftp
[root@91 ~]# lsmod |egrep 'nat|ipt|filter'
nf_nat_ftp 12770 0
nf_conntrack_ftp 18638 1 nf_nat_ftp
iptable_nat 12875 0
nf_nat_ipv4 14115 1 iptable_nat
nf_nat 26787 2 nf_nat_ftp,nf_nat_ipv4
ipt_REJECT 12541 2
nf_reject_ipv4 13373 1 ipt_REJECT
nf_conntrack 133095 6 nf_nat_ftp,nf_nat,nf_nat_ipv4,xt_conntrack,nf_conntrack_ftp,nf_conntrack_ipv4
iptable_filter 12810 1
ip_tables 27126 2 iptable_filter,iptable_nat
libcrc32c 12644 3 xfs,nf_nat,nf_conntrack
iptables 命令及参数
![d1536fb1d2c1d4804adab7970f66ba84.png](https://i-blog.csdnimg.cn/blog_migrate/365db9ef71900c88204709c142ec6d64.jpeg)
![5a86cba51472049c3377e6ddeb655ab6.png](https://i-blog.csdnimg.cn/blog_migrate/1ea213b91f97ed75e8b367533e67f9dd.png)
![1826f18e5d6f4d1bd5fb30795e2a6ec5.png](https://i-blog.csdnimg.cn/blog_migrate/d0e5419cccb0a317ad6f68afd0932315.jpeg)
[root@91 ~]# iptables -nL #查看规则
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@91 ~]# iptables -F #清空规则
[root@91 ~]# 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
配置规则-禁止访问22端口
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
配置防火墙规则注意事项:
- 去机房重启系统或者登陆服务器删除刚才的禁止规则。
- 让机房人员重启服务器或者让机房人员拿用户密码登录进去
- 通过服务器的远程管理卡管理(推荐)
- 先写一个定时任务,每5分钟就停止防火墙
- 测试环境测试好,写成脚本,批量执行
![4331d91ccb4536e377120cc4c6a17bdf.png](https://i-blog.csdnimg.cn/blog_migrate/9a4d7b8404fb07c95c039b36cbb8f820.png)
filter表其他规则配置
只让10.0.0.0/24网段进行访问
只要是10.0.0.0/24 局域网的用户 访问m01 都ACCEPT
此例子主要限制:网段或ip地址
[root@91 ~]# iptables -I INPUT -p tcp ! -s 10.0.0.0/24 -j DROP
[root@91 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- !10.0.0.0/24 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
准许或禁止端口
多个端口:表示范围 1-1024范围
[root@91 ~]# iptables -I INPUT -p tcp ! --dport 1:1024 -j DROP
[root@91 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:!1:1024
DROP tcp -- !10.0.0.0/24 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
nc用法:
nc -l 指定监听端口
nc/telnet 连接
多个端口 不连续 80,433,52113,22
[root@m01 ~]# iptables -I INPUT -p tcp -m multiport ! --dport 80,443,22 j DROP
6.4.2 准许或禁止ping
[root@m01 ~]# iptables -I INPUT -p icmp --icmp-type any -j DROP
禁止后检测是否通畅:
可以使用:telnet nc nmap进行检查
连 接 状 态
- NEW:已经或将启动新的连接
- ESTABLISHED:已建立的连接
- RELATED:正在启动的新连接
- INVALID:非法或无法识别的
1 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
2 iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
匹配网络限制策略(限制并发 访问的频率)
-m limit
-m limit --limit n/{second/minute/hour}:
解释:指定时间内的请求速率”n”为速率,后面为时间分别为:秒 分 时
--limit-burst [n]
解释:在同一时间内允许通过的请求”n”为数字,不指定默认为5
iptables -I INPUT -s 10.0.1.0/24 -p icmp --icmp-type 8 -m limit --limit 6/min
--limit-burst 5 -j ACCEPT
保存规则
[root@m01 ~]# iptables-save
[root@91 ~]# iptables-save >/etc/sysconfig/iptables #保存到这个文件
[root@91 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:!1:1024
DROP tcp -- !10.0.0.0/24 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@91 ~]# iptables -F #清空
[root@91 ~]# 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@91 ~]# 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@91 ~]# iptables-restore </etc/sysconfig/iptables #还原
[root@91 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:!1:1024
DROP tcp -- !10.0.0.0/24 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
注意事项:
iptables-save >/etc/sysconfig/iptables
iptables 是关闭状态 stop/disable
不要使用iptables -nL 查看状态,
如果使用防火墙自动打开查看防火墙状态:systemctl is-active iptables.service
生产环境防火墙配置
配置允许SSH登陆端口进入
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
允许本机回环lo接口数据流量流出与流入
1 iptables -A INPUT -i lo -j ACCEPT
2 iptables -A OUTPUT -o lo -j ACCEPT
-i input 与 INPUT链一起使用
-o output 与 OUTPUT 链一起使用
准许icmp协议通过
[root@m01 ~]# iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
准许用户使用的端口通过 80,443
1 iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2 iptables -A INPUT -p tcp --dport 443 -j ACCEPT
允许用户与服务器建立连接
1 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
2 iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
开启信任的IP网段**
1iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT
2iptables -A INPUT -s 172.16.1.0/24 -p all -j ACCEPT
修改默认规则
1 iptables -P INPUT DROP
2 iptables -P FORWARD DROP
3 iptables -P OUTPUT ACCEPT
NAT表
POSTROUTING
- 防火墙配置POSTROUTING规则开启内核转发
- 检查iptable nat模块是否加载 lsmod
[root@m01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 SNAT --to-source 10.0.0.61
[root@91 ~]# tail /etc/sysctl.conf
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1
[root@91 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@91 ~]# cat /proc/sys/net/ipv4/ip_forward
1
[root@91 ~]# lsmod |egrep 'ipt|nat|filter'
nf_nat_ftp 12770 0
nf_conntrack_ftp 18638 1 nf_nat_ftp
iptable_nat 12875 0
nf_nat_ipv4 14115 1 iptable_nat
nf_nat 26787 2 nf_nat_ftp,nf_nat_ipv4
ipt_REJECT 12541 0
nf_reject_ipv4 13373 1 ipt_REJECT
nf_conntrack 133095 6 nf_nat_ftp,nf_nat,nf_nat_ipv4,xt_conntrack,nf_conntrack_ftp,nf_conntrack_ipv4
iptable_filter 12810 1
ip_tables 27126 2 iptable_filter,iptable_nat
libcrc32c 12644 3 xfs,nf_nat,nf_conntrack
- 关闭eth0网卡
- 在eth1网卡中加入网关 指向 xxx.61
[root@db01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=no
IPADDR=10.0.0.51
PREFIX=24
GATEWAY=10.0.0.254
DNS1=10.0.0.254
[root@db01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=static 14 IPADDR=172.16.1.51
PREFIX=24
NAME=eth1
DEVICE=eth1
ONBOOT=yes
GATEWAY=172.16.1.61
重启网卡 ,通过内网连接进来 并进行测试
[root@db01 ~]# ping baidu.com
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.61 # 公网ip固定
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source MASQUERADE #伪装
MAS QUE RADE 【mæskəˈreɪd】
练习题
【面试题】防火墙www.jianshu.com![bc619dd9c25b27916fb3c7a94b5d9ba3.png](https://i-blog.csdnimg.cn/blog_migrate/1505ef2634e097f539a594a6b48729f3.png)