zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Linux iptables实现网络防火墙

2023-02-18 16:35:01 时间
拥有”过滤功能”的链只有3条,INPUT、OUTPUT、FORWARD

iptables实现网络防火墙

环境准备:

image

使用一台主机充当防火墙,这台主机有两块网卡,

左边模拟互联网上的主机,右边模拟局域网里面的主机。用一个防火墙将他们隔离开。

环境配置:
#左边机器的配置

#仅主机模式
[root@CentOS8 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1 
TYPE=Ethernet
NAME=ens160
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.6  #网关指向防火墙的左边网卡
NETMASK=255.255.255.0
GATEWAY=192.168.0.8

#模拟局域网里面的主机配置

#NAT模式
[root@CentOS8 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE=Ethernet
BOOTPROTO=none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=10.0.0.11
PREFIX=24
GATEWAY=10.0.0.8  #网关指向防火墙的ip地址
DNS1=180.76.76.76

yum install httpd -y #安装httpd服务用于测试
[root@CentOS8 ~]# cat /var/www/html/index.html
lan1

#NAT模式
[root@CentOS8 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE=Ethernet
BOOTPROTO=none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=10.0.0.10
PREFIX=24
GATEWAY=10.0.0.8 #网关指向防火墙的ip地址
DNS1=180.76.76.76

[root@CentOS8 ~]# yum install httpd -y #安装httpd服务用于测试
[root@CentOS8 ~]# cat /var/www/html/index.html 
lan1

#防火墙配置,需要两张网卡

#NAT模式
[root@CentOS8 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.0.0.8
NETMASK=255.255.255.0

#仅主机模式
[root@CentOS8 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1 
TYPE=Ethernet
Device=eth1
NAME=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.8
NETMASK=255.255.255.0
测试:

192.168.0.6 ping 10.0.0.10

发现没法ping通,因为没有开启转发功能,默认就把不是给它的报文丢弃了。
[root@CentOS8 ~]# sysctl -a | grep "net.ipv4.ip_forward"
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0

#开启网络转发功能
[root@CentOS8 ~]# sysctl -w net.ipv4.ip_forward=1  #临时生效
net.ipv4.ip_forward = 1

#永久生效的方法:
[root@CentOS8 ~]# vim /etc/sysctl.conf --->net.ipv4.ip_forward = 1

实现拒绝从外往里进,但是可以从内往外出。
iptables -A FORWARD  ! -s 10.0.0.0/24 -d 10.0.0.0/24  -m state --state NEW -j REJECT 

#在filter表的FORWARD这个链上设置规则,源地址不是10.0.0.0网段,目标地址是10.0.0.0网关的报文,并且报文的状态不是NEW(第一次连接),就同意。
实现外网主机能访问局域网内特定主机的特定服务
方法一:
[root@CentOS8 ~]# iptables -A FORWARD  ! -s 10.0.0.0/24 -d 10.0.0.0/24  -m state --state NEW -j REJECT  #只要是外网连接都不可以
[root@CentOS8 ~]# iptables -I FORWARD  ! -s 10.0.0.0/24 -d 10.0.0.10 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT #允许连接10.0.0.10的80端口


方法二:
[root@CentOS8 ~]# iptables -I FORWARD -d 10.0.0.0/24 -j REJECT 
[root@CentOS8 ~]# iptables -I FORWARD -d 10.0.0.10 -p tcp --dport 80 -j ACCEPT
中间的防火墙是路由器+防火墙的功能