我的微服务docker

第十四章:iptables防火墙

2019-10-17  本文已影响0人  chenkang

第1节:iptables工作流程

  1. 规则匹配顺序是从上往下依次执行。
  2. 只要匹配上,就不再往下执行 。
  3. 防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。
  4. 默认情况下,默认规则是放开所有。

第2节:iptables四表五链

四表 (tables)

五链 (chains)

第3节: iptables环境准备

1.安装iptables

yum install iptables-services -y

2.加载防火墙模块

modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state

3.查看已加载的模块

lsmod |egrep 'filter|nat|ipt'

4..启动防火墙 首先停止firewalld

systemctl stop firewalld
systemctl disable firewalld

5.启动iptables

systemctl start iptables.service
systemctl enable iptables.service

6.查看防火墙规则

iptables -nL

第4节:iptables基本操作命令

1.查看防火墙规则,默认查看的是filter表

iptables -nL

2.查看nat表

iptables -nL -t nat

3.清除防火墙规则

iptables -F <- 清除所有规则,不会处理默认的规则
iptables -X <- 删除用户自定义的链
iptables -Z <- 链的计数器清零(数据包计数器与数据包字节计数器)

4.删除指定链的指定规则

iptables -nL --line-numbers  <-查看规则的number
iptables -D INPUT 7 

第5节:iptables实战

需求:访问的数据包 源端口:22 目的端口:22 源IP:10.0.0.1 目的IP:10.0.0.61

1.禁止某个端口访问

iptables -A INPUT  -p tcp --dport 22 -j DROP
命令解释 
iptables -A INPUT   #在filter表的INPUT链上添加规则
-p tcp              #协议是tcp
--dport 22          #目标端口是22
-j DROP             #执行的动作,如果匹配上,丢弃这个包

2.禁止某个IP访问

iptables -A INPUT -p tcp -s 10.0.0.7 -i eth0 -j DROP 
iptables -A INPUT -p tcp -s 172.16.1.7 -i eth1 -j DROP
命令解释:
iptables -A INPUT 
-p tcp 
-s 10.0.0.7         #如果源地址是10.0.0.7 
-i eth0             #如果流量来自eth0
-j DROP             #执行拒绝操作

3.禁止某个网段访问

iptables -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j DROP 

4.只允许某个IP访问

iptables -A INPUT -p tcp ! -s 10.0.0.7 -i eth0 -j DROP
命令解释
iptables -A INPUT 
-p tcp 
! -s 10.0.0.7       #!取反,只要不是10.0.0.7的地址,执行的动作是拒绝
-i eth0             
-j DROP     

5.匹配端口范围

iptables -A INPUT -p tcp -s 10.0.0.7 -m multiport --dport 22,80 -j DROP
命令解释:
iptables -A INPUT -p tcp 
-s 10.0.0.7 
-m multiport        #匹配多个端口
--dport 22,80       #匹配目标端口是22和80 
-j DROP             #匹配上就拒绝

iptables -A INPUT -p tcp -s 10.0.0.7 --dport 22:80 -j DROP

命令解释:
-s 10.0.0.7 
-m multiport        #匹配多个端口
--dport 22:100      #匹配目标端口是22到100 
-j DROP             #匹配上就拒绝

6.匹配ICMP类型 禁止所有主机ping

iptables -A INPUT -p icmp --icmp-type 8 -j DROP

7.禁止10.0.0.7ping

iptables -A INPUT -p icmp --icmp-type 8 -s 10.0.0.7 -j DROP

8.除了10.0.0.7以外,所有的主机都禁止ping

iptables -A INPUT -p icmp --icmp-type 8 ! -s 10.0.0.7 -j DROP

第6节:iptables企业案例

如何配置lb服务器的防火墙

1.运行了哪些服务 nginx keepalived

2.启动了哪些端口 80 443 22

3.哪些IP和端口需要对外开放 VIP 80 443

4.默认规则修改为禁止

5.编写防火墙规则

iptables -F
iptables -X
iptables -Z 
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
iptables -A INPUT -p tcp -s 172.16.1.61 --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -s 172.16.1.0/24 -j ACCEPT 
iptables -A INPUT -i lo -j ACCEPT
iptables -P INPUT  DROP 

6.测试命令

ping 10.0.0.7       #不通
ping 172.16.1.7     #通

ssh 10.0.0.7        #不通
ssh 172.16.1.7      #通

curl 10.0.0.7       #通
curl 172.16.1.7     #通

第7节:防火墙备份与恢复

1.备份方法

iptables-save > iptables_m01_20191010

2.恢复方法

iptables-restore < iptables_m01_20191010

3.将修改写入配置文件,下次重启依然生效

iptables-save > /etc/sysconfig/iptables

第8节:内网共享上网

实验环境: m01: 共享上网网关出口 web01: 只有内网地址,网关指向m01

实验步骤:

1.m01操作

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

iptables -F
iptables -X
iptables -Z
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61

2.web01操作

[root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.1.7
GATEWAY=172.16.1.61
PREFIX=24
DNS1=223.5.5.5
[root@web01 ~]# systemctl restart network 
[root@web01 ~]# ifdown eth0 
[root@web01 ~]# ping www.baidu.com 

第9节:端口映射

1.m01操作

iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
命令解释 
表:nat
链:PREROUTING
目标IP:10.0.1.61
目标端口:9000
协议:tcp
动作:DNAT
目标IP:172.16.1.7
目标端口:22

2.连接测试

ssh 10.0.0.61 -p 9000

第10节:IP映射

ip a add 10.0.0.62/24 dev eth0 label eth0:0
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -I PREROUTING -d 10.0.0.62 -j DNAT --to-destination 172.16.1.7

第11节:陨石坑

假如配置安全规则的时候配置了默认拒绝所有规则 那么此时如果手欠,又输入了iptable -F 不好意思,这台服务器就谁都连不上了

临时此时解决方法:

1.告诉机房服务器账号密码,让机房人员登录进去执行恢复命令

- systemctl restart iptables 
- iptables -P INPUT ACCEPT

2.直接让机房人员硬重启服务器 风险:如果运行的是数据库,那么硬重启可能会导致数据丢失或者数据库损坏,启动失败

3.使用远程控制卡登录到服务器,执行恢复命令

- systemctl restart iptables 
- iptables -P INPUT ACCEPT

如何规避这样的风险:

1.配置防火墙的时候,添加一条定时任务,定时恢复默认规则为ACCPET

*/1 * * * * /usr/sbin/iptables -P INPUT ACCEPT

2.先在测试环境充分测试充足了,确定没有问题了再在生产环境部署

3.建议先保存当前防火墙的配置,基于配置文件去修改防火墙规则,然后将修改后的规则恢复进去

上一篇 下一篇

猜你喜欢

热点阅读