Iptables防火墙
1.防火墙的种类及使用说明
- 硬件防火墙
- 三层路由:华为/H3C/Cisco,公司使用H3C SecPath F1000-AK125和ACG1000-AK230应用网关作为防火墙
- 深信服
Juniper
- 软件防火墙
- iptables
- firewalld
- 云防火墙
- 阿里云:安全组
2.必须熟悉的名词
- 容器:瓶子,罐子,存放东西
- 表(table):存放链的容器
- 链(chain):存放规则的容器
- 规则(policy):准许或拒绝规则
Netfilter | 表(table) | 链(chains) | 规则(policy) |
---|---|---|---|
一栋楼 | 楼里的房子 | 房子里的柜子 | 柜子里的物品 |
3.iptables执行过程
3.1 工作流程
-
防火墙是层层过滤的,实际是按照配置贵的的顺序从上到下,从前到后进行过滤的.
-
如果匹配上规则,即明确表示是阻止还是通过,数据包就不在向下匹配新的规则
-
如果规则中没有明确表示是阻止还是通过,也就是没有匹配规则,向下进行匹配,直到匹配**默认规则**得到明确的组织还是通过.
-
防火墙的**默认规则是所有规则执行完才执行的**
3.2 表与链
-
iptables是 4 表 伍 链
-
4表: filter表 nat表 raw表 mangle表
3.2.1 表的说明
一.filter表
- 防火墙:屏蔽或准许端口/ip
filter表 | 强调:主要和主机自身有关,真正负责主机防火墙功能的(过滤流入流出主机的数据包) filter表是iptables默认使用的表,这个表定义了三个链(chains) 工作场景:企业主机防火墙 |
---|---|
INPUT | 负责过滤所有目标地址是本地地址的数据包,通俗的说:就是过滤进入主机的数据包 |
FORWORD | 负责转发流进记住的数据包.器转发的作用,和NAT关系很大,LVS NAT模式,net.ipv4.ip_foreword=0 |
OUTPUT | 处理所有源地址是本机地址的数据包,即从主机发出去的数据包 |
二.nat表
- 实现nat功能
- 实现共享上网(内网服务器上外网)
- 端口映射
- ip映射
nat表 | |
---|---|
OUTPUT | 和主机发出去的数据包有关,改变主机发出数据包的目的地址 |
PREROUTING | |
POSTROUTING |
4.安装iptables
4.1停止并禁用firewalld自启动
[root@k8s-02 ~]# systemctl stop firewalld
[root@k8s-02 ~]# systemctl list-unit-files | grep firewalld
firewalld.service enabled #可以看到是开机自启
[root@k8s-02 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
4.2安装iptables-services
[root@k8s-02 ~]# yum install -y iptables-services #安装
[root@k8s-02 ~]# systemctl start iptables #启动
[root@k8s-02 ~]# systemctl enable iptables #自启
[root@k8s-02 ~]# 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
5.使用iptables
5.1 iptables命令参数
参数 | 含义 |
---|---|
-L | 显示表中的所有规则 |
-n | 不要把端口或ip反向解析为域名 |
-t | 指定表 --不指定默认是filter表 |
-A | append追加准许ACCEPT 一般是加入准许类规则使用 |
-D | delete 删除 -D INPUT 1 |
-I | insert拒绝的规则放在最上面 |
参数 | 含义 |
---|---|
-p | protocal协议 tcp/udp/icmp/all |
–dport | 目标端口 |
–sport | 源端口 |
-s | –source 源IP 指定端口需要加上-p 协议 |
-d | –destination 目标IP |
-m | 指定模块 (多个端口multiport) |
-i | 输入的时候从哪个网卡进入 |
-o | 输出的时候从哪个网卡出去 |
参数 | 含义 |
---|---|
-j | 满足条件后的动作:DROP/ACCEPT/REJECT |
参数 | 含义 |
---|---|
-F | 清除所有规则,不会处理默认的规则 |
-X | 删除所有用户自定义的链 |
-Z | 链的计数器清零(数据包计数器与数据包字节计算器) |
5.2配置filter表规则
- 清空所有配置
[root@k8s-01 local]# iptables -F
[root@k8s-01 local]# iptables -X
[root@k8s-01 local]# iptables -Z
[root@k8s-01 local]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
- 允许访问22端口
root@iptables ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 禁止某个IP访问
[root@iptables ~]# iptables -I INPUT -s 172.20.20.18 -j DROP #设置规则
[root@iptables ~]# iptables -nL #查看
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 172.20.20.18 0.0.0.0/0
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@iptables ~]# iptables -D INPUT 1 #删除
[root@iptables ~]# 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)
- 开放/禁止多个端口
[root@iptables ~]# iptables -I INPUT -p tcp -m multiport --dport 1024:1026 -j ACCEPT #开放1024-1028端口
[root@iptables ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 1024:1026
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
-
禁止ping
- 内核操作(临时)
[root@iptables ~]# echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all #禁止 [root@iptables ~]# echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all #允许
- 内核操作(永久)
echo net.ipv4.icmp_echo_ignore_all=1 >/etc/sysctl.conf #禁止 echo net.ipv4.icmp_echo_ignore_all=0 >/etc/sysctl.conf #允许
- iptables操作
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP #丢弃 iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j REJECT #拒绝
-
限制并发及速率
-m limit限制模块
-m linit --limit 10/minute #限制每分钟只能有十个数据包,每6秒生成一个
–limit-burst[n]在同一时间内允许通过的请求"n"为数字,不指定默认为5
-m limit --limit 10/minute --limit-burst 5
- 防火墙规则的保存与恢复
保存:iptables-save
默认输出到屏幕 iptables-save >/etc/sysconfig/iptables
写入到配置文件
恢复:iptables-restore </etc/sysconfig/iptables
,或者重启iptables服务
5.3 nat表配置
- 查看nat表
[root@iptables ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@iptables ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
- 配置
[root@iptables ~]# iptables -t nat -A POSTROUTING -s 172.20.20.0/24 -j SNAT --to-srouce 10.0.0.1
# -s 172.20.20.0/24 需要转换的地址 --to-srouce 10.0.0.1 转换成的地址
[root@iptables ~]# echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf #开启内核的转发
[root@iptables ~]# sysctl -p #重新载入
net.ipv4.ip_forward = 1