linux运维

iptables

2019-10-16  本文已影响0人  吃可爱长大鸭

iptables工作流程

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

第2章 iptables四表五链

表 tables
链 chains

四表

- Filter表
- NAT表
- Managle表
- Raw表

五链

- INPUt
- FORWARD
- OUTPUT
- PREROUTING 
- POSTROUTING

第3章

源端口
目的端口
源IP
目的IP

访问10.0.0.61的9999端口,转发到10.0.0.7的22端口

数据包未改变之前:

源端口:22
目的端口:9999
源IP:10.0.0.1
目的IP:10.0.0.61 

数据包改变之后:

源端口:22
目的端口:22
源IP:10.0.0.1
目的IP:10.0.0.7 

第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

查看已加载的模块

lsmod |egrep 'filter|nat|ipt'

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

systemctl stop firewalld
systemctl disable firewalld

启动iptables

systemctl start iptables.service
systemctl enable iptables.service

查看防火墙规则

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 
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

禁止10.0.0.7ping

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

除了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章 防火墙备份与恢复

备份方法

iptables-save > iptables_m01_20191010

恢复方法

iptables-restore < iptables_m01_20191010

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

iptables-save > /etc/sysconfig/iptables

第8章 内网共享上网
实验环境:

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

实验步骤:
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

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章 端口映射
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

连接测试

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

第x章 陨石坑

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

临时此时解决方法:

1.告诉机房服务器账号密码,让机房人员登录进去执行恢复命令
- systemctl restart iptables 
- iptables -P INPUT ACCEPT

2.直接让机房人员硬重启服务器

风险:如果运行的是数据库,那么硬重启可能会导致数据丢失或者数据库损坏,启动失败

如何规避这样的风险:

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

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

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

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

第x章 防火墙两种模式

白名单:广场巡逻
黑名单:火车站
上一篇下一篇

猜你喜欢

热点阅读