19 Star 187 Fork 90

baoke / Linux学完就忘系列

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
57.iptables网络防火墙.md 4.06 KB
一键复制 编辑 原始数据 按行查看 历史
baoke 提交于 2019-09-30 11:41 . iptables网络防火墙

iptables网络防火墙

网络防火墙主机

我们以192.168.147.139作为网络防火墙为它添加一块新的网卡:

输入命令ifconfig可以看到新的网卡ens34
使用nmtui配置新网卡,将新网卡地址修改为10.10.0.254/16:

#重启
systemctl restart network
#查看ip
ifconfig
#先清空防火墙规则
iptables -F
#禁用firewalld
systemctl stop firewalld
#禁止开启自启动
systemctl disable firewalld
#查看核心转发是否打开
cat /proc/sys/net/ipv4/ip_forward
#打开核心转发
sysctl -w net.ipv4.ip_forward=1

设置规则:

#设置FORWARD链拒绝所有
iptables -A FORWARD -j REJECT
#开放内网主机允许访问外网的任意主机
iptables -I FORWARD -s 10.10.0.0/16 -p tcp --dport 80 -j ACCEPT
#开放内网主机允许响应外网任意主机
iptables -I FORWARD 2 -d 10.10.0.0/16 -p tcp --sport 80 -j ACCEPT

每个服务都按端口来加规则太痛苦了,我们可以使用状态机制:

#删除之前添加的2条
iptables -D FORWARD 1
iptables -D FORWARD 1
#无论从源和目标是哪到哪只要状态是ESTABLISH全部放行(对所有已建立连接的请求和响应报文放行)
iptables -I FORWARD -m state --state ESTABLISH -j ACCEPT
#开放10.10.0.0/16网段可以访问任意防火墙内主机的服务
iptables -I FORWARD 2 -s 10.10.0.0/16 -m state --state NEW -j ACCEPT
#开放192.168.147.153能够访问10.10.0.52的80端口的web服务
iptables -I FORWARD 3 -d 10.10.0.52 -p tcp --dport 80 -m state --state NEW -j ACCEPT
#替换之前80端口的规则
iptables -R FORWARD 3 -d 10.10.0.52 -p tcp -m multiport --dports 21:23,80,139,445 -m state --state NEW -j ACCEPT
#开放138,139的udp端口
iptables -I FORWARD 4 -d 10.10.0.52 -p udp --dport 137:138 -m state --state NEW -j ACCEPT
#开放RELATED状态之前,先装载模块
modprobe nf_conntrack_ftp
#检查模块
lsmod | grep nf_conntrack_ftp
#开放RELATED状态
iptables -I FORWARD 5 -d 10.10.0.52 -p tcp -m state --state RELATED -j ACCEPT

网络防火墙局域网内的主机

这里以192.168.147.153为例

#安装相关服务
yum install httpd vsftpd samba telnet-server -y
#添加路由,访问10.10.0.0/16网段的时候,下一跳为192.168.147.139
route add -net 10.10.0.0/16 gw 192.168.147.139
#查看
route -n

客户端主机

将192.168.147.152这台主机ip改为10.10.0.52/16,使用nmtui配置:

#重启
systemctl restart network
#查看ip
ifconfig
#ping网络防火墙其中的一块通网段ip的网卡是否通
ping 10.10.0.254
#添加默认路由的吓一跳为10.10.0.254
route add default gw 10.10.0.254
#查看,如果没有错误提示,也没有添加进默认路由,可以使用以下"注意"的方法解决
route -n

客户机也安装相应服务,用于做服务端访问客户端服务示例:

yum install httpd vsftpd samba telnet-server -y
systemctl start httpd
systemctl start vsftpd.service
systemctl start telnet.socket
systemctl start nmb.service smb.service
ss -tnlp
ss -unlp

注意,如果默认路由添加不上:
解决方法1:

#检查networkmanager的版本,1.8版本存在BUG,无法添加默认路由,在1.10版本修复
rpm -qa | grep Network
#如果低于1.10版本,可以升级NetworkManager来解决这个问题。
yum update NetworkManager-tui
yum update NetworkManager-wifi
yum update NetworkManager
yum update NetworkManager-team
yum update NetworkManager-libnm
#查看升级后的版本
rpm -qa | grep Network

解决方法2: 可以修改网络配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,添加一行NM_CONTROLLED=no来解决.

ping测试

#想在以上三台哪台主机抓包,可以使用以下命令
tcpdump -i ens33 -nn icmp
#抓tcp的80端口的包
tcpdump -i ens34 -nn tcp port 80
Shell
1
https://gitee.com/abcd1234567_1/linux.git
git@gitee.com:abcd1234567_1/linux.git
abcd1234567_1
linux
Linux学完就忘系列
master

搜索帮助