昨天读了一篇文章说,服务器不能把防火墙关闭。那么我在unbuntu上通过ufw enable开启了防火墙,然后我执行了以下命令,懵逼了,这都是啥啊。
Filter表
主要和主机自身有关,真正负责主机防火墙功能(过滤流入,流出,主机的数据包)。filter是主机默认使用的表。这表定义了三个链。生产场景单台,服务器的防火墙功能全靠这张表。
INPUT:负责过滤进入主机的数据包
FORWARD:负责转发流进主机的数据包,起转发的作用,和NAT关系很大。 net.ipv4.ip_forward=0 这个参数很重要,有的场景需要开启。echo 1 > /proc/sys/net/ipv4/ip_forward暂时开始路由转发。
OUTPUT : 就是处理从主机发出去的数据包
1 | root@ubuntu16-desktop:~# iptables -nL //列表形式显示默认表(filter)的所有信息 L list 列表 -n number 数字 |
NAT表
1 | root@ubuntu16-desktop:~# iptables -nL -t nat |
ubuntu中查看规则
iptables-save
1 | Generated by iptables-save v1.6.0 on Fri Mar 22 03:55:53 2019 |
SNAT与DNAT
SNAT,DNAT,MASQUERADE都是NAT,MASQUERADE是SNAT的一个特例。
SNAT是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机。
MASQUERADE是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用MASQUERADE。
DNAT,就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B。
centos中的防火墙
CentOS 6使用iptables作为防火墙,CentOS 7使用firewalld作为防火墙。
- CentOS 7关闭防火墙运行:
systemctl stop firewalld.service - CentOS 7禁止防火墙开机自动运行:
systemctl disable firewalld.service - 临时允许443/TCP端口,立即生效
firewall-cmd –add-port=443/tcp - 永久允许443/TCP端口,重启防火墙后生效
firewall-cmd –permanent –add-port=443/tcp - 永久打开端口需要reload一下,如果用了reload临时打开的端口就失效了
firewall-cmd –reload - 查看防火墙所有区域的设置,包括添加的端口和服务
firewall-cmd –list-all
firewalld在rule上配置非常不友好,k8s不支持firewalld,还是需要iptables来处理
在服务端禁止掉,客户端ssh的访问
1 | iptables -t filter -A INPUT -p tcp --dport 22 -j DORP 也可以不指定表 默认是filter 表 |
允许80端口
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
允许其他人能ping通
iptables -A INPUT -p icmp -m icmp –icmp-type any -j ACCEPT
允许关联的包通过
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
如何永久保存
我们在命令行中的操作,都是储存在内存当中,没有在磁盘,重启服务器就会丢失
我们要将其存到配置文件,做到永久存储
- 方法一:/etc/init.d/iptables save
- 方法二:重定向iptables-save>/etc/sysconfig/iptables.bak
如何查看 所有端口
nmap host的IP -p 1-65535
ubuntu相关命令
- 允许ssh
ufw allow 22 - 删除已经添加过的规则:
sudo ufw delete allow 22
只打开使用tcp/ip协议的22端口: - udo ufw allow 22/tcp
打开来自192.168.0.1的tcp请求的80端口: - sudo ufw allow proto tcp from 192.168.0.1 to any port 22
允许某特定 IP - sudo ufw allow from 192.168.254.254