防火墙 ¶
防火墙种类及使用说明 ¶
- 硬件: 整个企业入口
- 三层路由: H3C 华为 Cisco(思科)
- 深信服
Juniper- 软件: 开源软件 网站内部 封ip 封ip
- iptables 写入到Linux内核中 以后服务docker
- firewalld C7
- 云防火墙
- 阿里云:安全组
必须熟悉的名词 ¶
- 容器: 瓶子 罐子 存放东西
- 表(table): 存放 链 的容器
- 链(chain): 存放 规则 的容器
- 规则(policy): 准许或拒绝规则
Netfilter | 表(tables) | 链(chains) | 规则(Policy) |
---|---|---|---|
一栋楼 | 楼里的房子 | 房子里的柜子 | 柜子里衣服,摆放规则 |
iptables防火墙 ¶
iptables作用: ¶
1.拦截可疑数据包进入服务器
2.转发路由
数据包 ¶
1. 找我的
2. 转发的
3. 应用层自身产生的
执行过程 ¶
1. 工作在内核层中的网络层
2. filter表:监控数据能不能进出
3. NAT表:数据包能不能转发
4. Mangle表:改写头部信息
四表五链 ¶
1. Filter表: 控制数据包是否能进来,屏蔽或准许、端口、IP、确定是否放行该数据包(过滤)
1) INPUT链 处理入站的数据包
2) OUTPUT链 处理出站的数据包
3) FORWAED链 处理转发的数据包
2. NAT表: 控制转发、实现共享上网(内网服务器上外网)修改数据包中的源、目标IP地址或端口
1) PREROUTING链 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
2) OUTPUT链 处理出站的数据包
3) POSTROUTING链 在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
3.mangle表: 为数据包设置标记(较少使用), 数据改写
1) PREROUTING链 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
2) FORWAED链 处理转发的数据包
3) INPUT链 处理入站的数据包
4) OUTPUT链 处理出站的数据包
5) POSTROUTING链 在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
4. raw表: 确定是否对该数据包进行状态跟踪
规则表的先后顺序: ¶
raw → mangle → nat → filter
规则链的先后顺序: ¶
入站顺序: PREROUTING → INPUT
出站顺序: OUTPUT → POSTROUTING
转发顺序: PREROUTING → FORWARD→POSTROUTING
iptables命令中则常见的控制类型有 ¶
- ACCEPT: 允许通过.
- LOG: 记录日志信息,然后传给下一条规则继续匹配.
- REJECT: 拒绝通过,必要时会给出提示.
- DROP: 直接丢弃,不给出任何回应.
iptables安装准备 ¶
1. 关闭 firewalld
1)systemctl stop firewalld disable
2. 安装iptables
1)yum -y install iptables-services
3. 加载模块
1) lsmod |egrep 'filter|nat|ipt'
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)或者将2)的内容写入到开机自启中/etc/rc.d/rc.local
4)加执行权限
(1)chmod +x /etc/rc.d/rc.local
4. 开启iptables
1)开启iptables并加入开机自启
(1)systemctl start iptables.service
(2)systemctl enable iptables.service
5. 列出规则
1)iptables -nL
2)iptables 参数
3)iptables -t 指定表名称 规则 -j 动作
参数 | 含义 |
---|---|
-L | 显示表中的所有规则 |
-n | 不要把端口 或ip反向解析为 名字 |
-t | 指定表 不指定默认是filter表 |
-A | append 追加 加入准许类规则 使用-A |
-D | delete 删除 -D INPUT 1 |
-I | insert 拒绝类规则放在所有规则最上面 拒绝类 -I |
参数 | 含义 | |
---|---|---|
-p | 协议 protocal tcp/udp/icmp/all | |
--dport | 目标端口 dest destination 指定端口 加上协议 -p tcp | |
--sport | 源端口 source 源 | |
-s | --source 源ip | |
-d | --destination 目标ip | |
-m | 指定模块 multiport | |
-i | input 输入的时候 从哪个网卡进来 | |
-o | ouput 输出的时候 从哪个网卡出去 |
参数 | 含义 | |
---|---|---|
-j | 满足条件后的动作 : DROP/ACCEPT/REJECT | |
DROP REJECT拒绝 DROP把数据丢掉 不会返回信息给用户 REJECT 拒绝 返回拒绝信息 |
||
参数 | 含义 | |
---|---|---|
-F flush | 清除所有规则,不会处理默认的规则 | |
-X | 删除用户自定义的链 | |
-Z | 链的计数器清零(数据包计数器与数据包字节计数器) |
配置filter表规则 ¶
6. 先备份, 清空规则
1)iptables -F
2)iptables -X
3)iptables -Z
4)iptables -nL 查看当前规则
7. 禁止访问22端口
1)设置禁止访问22端口
(1)iptables -t filter -I INPUT -p tcp --dport 22 -j DROP
2)删除上面设置的规则
(1)iptables -t
(2)iptables -D INPUT -p tcp --drpot 22 -j DROP
(3)iptables -nL --line
(4)iptables -D INPUT 1
8. 屏蔽某个IP
1) iptables -t filter -I INPUT -s 10.0.0.7 -j DROP
2) iptables -I INPUT -s 172.16.1.7 -j DROP
3) iptables -nL
4) 删除上面规则
(1)iptables -D INPUT 2
(2)iptables -t filler -D INPUT -s 10.0.0.7 -j DROP
9. 查看与服务器建立连接的ip
1)netstat -an|grep ESTAB
10. 禁止网段连入(禁止客户端访问8.8.8.8端口)
用nc来模拟端口
yum -y install nc 服务端
nc -kl 8888 模拟端口
telnet 10.0.0.5 8888 客户端连接
1)拒绝客户端访问服务端8888端口
(1)iptables -t filter -I INPUT -s 10.0.0.0/24 -p tcp --dport 8888 -j DROP
11. 只允许指定网段连入(允许10.0.0.0网段)
方法一:
1)iptables -I INPUT ! -s 10.0.0.0/24 -j DROP0
2)
(1)iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j
(2)iptables -P INPUT DROP
利用 ! 进行排除,只准许 10.0.0.0/24 访问 言外之意 除了 10.0.0.0/24 都拒绝
12. Iptables 开放网口与ip来源
例:所有的来自 lo 这个网口的封包,都予以接受
iptables –A INPUT –i lo –j ACCEPT
例:目标来自 192.168.1.200 这个 IP 的封包都予以接受
iptables –A INPUT –i eth0 –s 192.168.1.200 –j ACCEPT
例:192.168.1.0/24 可接受,但 192.168.1.10 丢弃
iptalbes –A INPUT –i eth0 –s 192.168.1.0/24 –j ACCEPT
iptables -A INPUT -i eth0 -s 192.168.1.10 -j DROP
方法二:
1) iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
2) iptables -nL
3) iptables -P INPUT DROP
4) iptables -nL
5) 测试完成、修改回默认 iptables -P INPUT ACCEPT
13. 指定多个端口
1)指定80、443端口
(1)iptables -I INPUT -p tcp -m multiport ! --dport 80,443 -j DROP
14. 控制是否允许被ping
1. 通过防火墙规则 控制是否可以ping
1)拒绝被ping
(1)iptables -I INPUT -p icmp --icmp-type 8 -j DROP
2. 通过内核参数,控制,禁止被ping
1)cat /etc/sysctl.conf
#/proc/sys/net/ipv4/icmp_echo_ignore_all
net.ipv4.icmp_echo_ignore_all = 1
2)sysctl -p
net.ipv4.icmp_echo_ignore_all = 1
3)echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
4)echo net.ipv4.icmp_echo_ignore_all=1 >> /etc/sysctl.conf
5)sysctl -p
6)echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
15. 匹配网络状态(TCP/IP连接状态)
1)iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
2)iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
16. 限制并发及速率
-m limit --limit 10/minute #每分钟只能有10个数据包 每6秒生成
1)iptables -F
2)iptables -I INPUT -p icmp -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
3)iptables -A INPUT -p tcp --dport 22 -j ACCEPT
4)iptables -P INPUT DROP
web端测试:
1)ping 10.0.0.61
17. 防火墙规则的保存与恢复
- iptables-save 默认输出到屏幕
- iptables-restore 加上文件
- 写入到/etc/sysconfig/iptables
1)iptables-save >/etc/sysconfig/iptables 备份规则
2)iptables-restore </etc/sysconfig/iptables 恢复规则
3)iptables -nL 查看规则
4)systemctl restart iptables 读取规则
18. -s ip
-p 端口
-s 网段
filter表小结 ¶
- 封ip 端口 网段
- 禁止ping
- 限制速度和并发
- iptables filter表 功能 可以在 云服务器使用
配置nat表规则 ¶
1. 共享上网
2. 端口转发
3. 端口映射
iptables -t nat
1) iptables -P INPUT ACCEPT
2) iptables -P FORWARD ACCEPT
3) iptables -nL
4) iptables -F
5) iptables -nL
实现共享上网 ¶
NAT(Network AddressTranslation网络地址转换) ¶
首先说说局域网内封包的传送,
-
先经过 NAT table 的 PREROUTING 链;
-
经由路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;
-
再经过 Filter table 的 FORWARD 链;
-
通过 NAT table 的 POSTROUTING 链,最后传送出去。
NAT 主机的重点就在于上面流程的第 1,4 步骤,也就是 NAT table 的两条重要的链:PREROUTING 与POSTROUTING。 那这两条链重要功能在于修改IP,而这两条链修改的IP又是不一样的,POSTROUTING在修改来源IP,PREROUTING则在修改目标IP 。由于修改的 IP 不一样,所以就称为来源NAT (Source NAT, SNAT) 及目标 NAT (Destination NAT, DNAT)。
SNAT 源地址转换 ¶
Snat
SNAT即源地址转换,能够让多个内网用户通过一个外网地址上网,解决了IP资源匮乏的问题。一个无线路由器也就使用此技术。
需要将192.168.10.10转换为111.196.211.212,iptables命令如下
iptables –t nat –A POSTROUTING –s 192.168.10.10 –o eth1 –j SNAT --to-source 111.196.221.212
外网IP地址不稳定的情况即可使用MASQUERADE(动态伪装),能够自动的寻找外网地址并改为当前正确的外网IP地址
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
DNAT 目地地址转换 ¶
Dnat
DNAT即目地地址转换,则能够让外网用户访问局域网内不同的服务器。(相当于SNAT的反向代理)
目标地址192.168.10.6在路由前就转换成61.240.149.149,需在网关上运行iptables命令如下:
iptables –t nat –A PREROUTING –i eth1 –d 61.240.149.149 –p tcp –dport 80 –j DNAT --to-destination 192.168.10.6:80
eth1网口传入,且想要使用 port 80 的服务时,将该封包重新传导到 192.168.1.210:80 的 IP 及 port 上面,可以同时修改 IP 与 port。此为地址映射与端口转换。
还可以使用REDIRECT单独进行端口转换
例:将 80 端口的封包转递到 8080端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
防火墙配置 ¶
1. 防火墙配置
(1)iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61
(2)echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
(3)sysctl -p
net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.ip_forward = 1
注意事项:
公网ip不固定:
iptables -t nat -A POSTROUTING -s 172.19.0.0/16 -j MASQUERADE
2. web配置
(1)cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=no
IPADDR=10.0.0.7
PREFIX=24
GATEWAY=10.0.0.254
DNS1=223.5.5.5
GATEWAY=10.0.0.254
(2)cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
IPADDR=172.16.1.7
PREFIX=24
NAME=eth1
DEVICE=eth1
ONBOOT=yes
GATEWAY=172.16.1.61
DNS1=1.2.4.8
(3)systemctl restart network
(4)ssh 172.16.1.7
(5)ping baidu.com
端口转发 ¶
1. 端口转发
(1)iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
(2)iptables -nL -t nat
测试:
[d:\~]$ ssh root@10.0.0.61 9000
iptables -t nat -A PREROUTING -d 1.116.64.223 -p tcp --dport 1433 -j DNAT --to-destination 10.1.5.11:1433
iptables -t nat -A POSTROUTING -d 10.1.5.11 -p tcp --dport 1433 -j SNAT --to 10.1.5.9
iptables -t nat -A PREROUTING -p tcp --dport 1433 -j DNAT --to-destination 10.1.5.11:1433
iptables -t nat -A POSTROUTING -d 10.1.5.11 -p tcp --dport 1433 -j SNAT --to 10.1.5.9
实现ip映射 ¶
1. iptables -t nat -A PREROUTING -d 10.0.0.62 -j DNAT --to-destination 172.16.1.7
2. iptables -nL -t nat
7. 实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网
1)iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 123.32.54.26
2)iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT MASQUERADE
nat表小结 ¶
- 实现共享上网
- 端口转发
- nat功能在 云服务器无法使用 替代品叫: NAT网关
实际生产用法 ¶
- 默认关闭:DROP
- 开启:ACCEPT
1. iptables 规则关闭
(1)修改成开启
1)iptables -P INPUT DROP
(2)修改成默认
1)iptables -P INPUT ACCEPT
默认规则关闭时,添加的规则为允许
默认规则允许时,添加的规则为拒绝
2. 设置允许本机lo、通讯规则
1)允许本机回环lo接口数据流量流出与流入
(1)iptables -A INPUT -i lo -j ACCEPT
(2)iptables -A OUTPUT -o lo -j ACCEPT
3. 配置默认规则、放行 80 、 443 端口
1) iptables -p INPUT DROP
2) iptables -p FORWARD DROP
3) iptables -p OUTPUT ACCEPT
4) iptables -A INPUT -m multiport -p tcp --dport 443,80 -j ACCEPT
5) iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
6) iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
7) iptables-save
4. 禁止来自10.0.0.188 ip地址访问80端口的请求
1)iptables -I INPUT -s 10.0.0.188 -p tcp --dport 80 -j DROP
5. 如何使在命令行执行的iptables规则永久生效?
1)iptables-save
6. 实现把访问10.0.0.3:80的请求转到172.16.1.17:80
1)iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.xxxx:80
7. 实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网
1)iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 123.32.54.26
2)iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT MASQUERADE
8. iptalbes 实现防止syn ddos 和ping攻击
1) -A FORWARD -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT
2)-A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
3)-A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
说明:第一行:每秒中最多允许5个新连接。第二行:防止各种端口扫描。第三行:Ping洪水攻击(Ping of Death),可以根据需要调整或关闭
9. 请写出查看iptables当前所有规则的命令
1)iptables-save
2)iptables -nL
3)iptables -nL -t nat
10. 端口扫描
1)nmap -sN 172.16.1.7