1、自定义链
iptables -N hello #在filter表中创建一个自定义链,链名hello,自定义链名可以任意大小写
iptables -E hello happy #修改自定义的链名
iptables -t filter -I happy -s 192.168.206.30 -p icmp -j REJECT #禁止192.168.206.30ping本机
自定义没有策略(INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING),无法直接使用
iptables -I INPUT -p icmp -j happy #把自定义规则引入到INPUT链中
删除INPUT引用的自定义链规则和自定义链
iptables -D INPUT/happy 1
iptables -X happy #-X只能删除空白的自定义链
2、地址转换
-
搭建环境
ubuntu1内网 ip地址192.168.206.20 网关192.168.206.254
ubuntu2网关服务器 ens33 192.168.206.254 ens37 12.0.0.254
ubuntu3外网 ip地址12.0.0.10 网关12.0.0.254
ubuntu2
vim /etc/netplan/01-network-manager-all.yaml
修改ens33和ens37
netplan apply
vim /etc/sysctl.conf #linux系统内核的接口文件,修改配置内核的参数,使之永久生效
set nu---> 28行,去掉注释,net.ipv4.ip_forward=1#开启Linux服务器内核转发的功能
保存退出
sysctl -p#立即生效,或者重启生效
ubuntu1和ubuntu3一起安装nginx
apt -y install nginx
systemctl restart nginx
vim /etc/netplan/01-network-manager-all.yaml #配置相应的ip地址和网关
netplan apply
-
SNAT
ubuntu2:
iptables -t nat -A POSTROUTING -s 192.168.206.0/24 -o ens37 -j SNAT --to 10.0.0.10
#从ens37设备出去的数据包且网段属于192.168.233.0网段,把这个网段的地址统一转换成10.0.0.10
ubuntu3 tail -f /var/log/nginx/access.log
ubuntu1 访问12.0.0.10
-
DNAT
目的地址转换和服务映射
ubuntu2:
iptables -t nat -A PREROUTING -d 11.0.0.11 -i ens37 -p tcp --dport 80 -j DNAT --to 192.168.206.20:80
#所有从ens37进入本机的数据包统一转换成11.0.0.11,访问的端口是80,统一映射为访问192.168.206.20:80
Ubuntu1 tail -f /var/log/nginx/access.log
ubuntu3 访问11.0.0.11
3、在linux中抓包
tcpdump #只是抓取数据包的内容,不能查看抓包的数据
tcpdump tcp -i ens33 -t -s0 -c 10 and dst port 80 and src net 192.168.206.0/24 -w /opt/target.cap #静态抓取,抓完10个就会禁止
tcpdump 开头
tcp 协议 icmp dup
-i ens33 指定设备名 从哪个设备经过的数据包
-t 不显示时间
-s0 默认抓包的长度是68字节,s0就是抓取完整的数据包
-c 10 抓取多少个数据包
and dst port 目标端口80 和80端口相关的数据包
and src net 源ip是 192.168.206.0/24这个网段的ip地址
-w 抓包的结果保存到指定的文件当中去
.cap 是为了给抓包工具(wireshark)分析
sz target.cap #下载到电脑桌面
tcpdump [-i ens33] [-s0] -w /opt/1.cap #动态,都抓取 []可不加
4、firewalld
firewalld是centos自带的,而且firewalld是默认的
ufw是ubuntu自带的,使用的就是iptables
firewalld是根据区域来进行配置不同的规则,和硬件防火墙很相似
区域名 | 作用 |
trusted 信任区 | 所有流量都可以进入 |
public 公共区域,默认区 | 只允许系统默认的规则(ssh和icmp协议),其他的流量传入全部拒绝 |
external 外部区域 | 只允许系统默认的规则(ssh和icmp协议),其他的流量传入全部拒绝,经过此区域的流量可以将ipv4的地址进行伪装 |
home 家庭区域 | 只允许系统默认的规则(ssh和icmp协议,dhcpv6协议),其他的流量传入全部拒绝 |
internal 内部区域 | 只允许系统默认的规则(ssh和icmp协议,dhcpv6协议),其他的流量传入全部拒绝 |
work 工作区域 | 只允许系统默认的规则(ssh和icmp协议,dhcpv6协议),其他的流量传入全部拒绝 |
block 限制区 | 拒绝所有流量的传入 |
drop 丢弃区域 | 拒绝所有流量的传入,没有回显信息 |
DMZ 非军事区域 | 只允许系统默认的规则(ssh),其他的流量传入全部拒绝 |
配置方法:
firewall-cmd #命令行的开头
1、查看系统的默认区域
firewall-cmd --get-default-zone
2、查看默认区域内的规则
firewall-cmd --list-all
3、修改默认区域
firewall-cmd --set-default-zone=block
4、添加服务
firewall-cmd --add-service=http --zone=public #把80端口放行,添加到公共区域
5、添加多个服务
firewall-cmd --add-service={http,ftp} --zone=public
6、移除
firewall-cmd --remove-service=http --zone=public
7、永久生效
firewall-cmd --add-service={http,ftp} --zone=public --permanent #永久生效
firewall-cmd --reload #重新加载
8、添加/删除端口
firewall-cmd --zone=public --add-port=80/tcp
firewall-cmd --zone=public --remove-port=80/tcp
firewall-cmd --add-port=80-3306/tcp #添加80到3306范围之内的端口