Fork me on GitHub

iptables防火墙(上)

day55-iptables防火墙.png


架构展望(来自老男孩教育机构—李导)

iptables防火墙必会面试题:https://www.cnblogs.com/wajika/p/6382853.html

非常详细的iptable原理
http://www.zsythink.net/archives/1199/

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.防火墙执行过程

  1. 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下从前到后进行过滤的。
  2. 如果匹配上规则,即明确表示是阻止(DROP)还是通过(ACCEPT)数据包就不再向下匹配新的规则。
  3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
  4. 防火墙的默认规则是所有规则执行完才执行的。


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表

image.png

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 #再次查看

image.png

重新连接 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 ~]# 
配置防火墙规则注意事项:
  1. 去机房重启系统或者登陆服务器删除刚才的禁止规则。

  2. 让机房人员重启服务器或者让机房人员拿用户密码登录进去

  3. 通过服务器的远程管理卡管理(推荐)

  4. 先写一个定时任务,每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,不可以连接
....等到死

image.png

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服务器上
爱你哦
晚上好
你也好

8.练习题

https://www.jianshu.com/p/2180face8381

posted @ 2019-08-19 11:08  lcx1997  阅读(141)  评论(0编辑  收藏  举报