本篇博客将会讲解如何在防火墙iptables和firewalld中分别实现:
1.允许所有用户访问服务器80端口
2.本地端口转发:5234->80
3.远程端口转发:主机A:80 -> 主机B:80
iptables 四表五链
其中五链之间的位置关系为
INPUT ---------->本机应用程序------------->OUTPUT
^ |
| ---------->FORWARD ----------------------> | 向下
PREROUTING -----> | POSTROUTING
要根据需求的不同来配置对应链中的相应的表
1.允许所有用户访问服务器(192.168.79.128)80端口:
iptables -t filter -I INPUT 1 -p tcp --dport 80 -d 192.168.79.128
- j ACCEPT
# -t 选择表 -I 添加在哪个链的第 x 行 如果后面没跟数字则默认加在第一行
# -p 当流量为哪个协议被匹配 --dport 为哪个端口 -d 目标路由器为哪个
# 流量必须全部匹配上面这三条,然后才会被选中
# -j 选中流量的处理方式 ACCEPT 通过 REJECT 拒绝,会响应请求端 DROP 丢弃 不响应请求端
2.本地端口转发:5234->80:
iptables -t nat -A PREROUTING -p tcp --dport 5234 -d 192.168.79.128
-j REDIRECT --to-port 80
# -A 在链的末尾添加
# REDIRECT 重定向
3.远程端口转发:主机A:80 -> 主机B:80:
首先要允许主机A的转发功能
echo '1' > /proc/sys/net/ipv4/ip_forward
# 这个只是临时变更 永久变更要改相应的配置文件
在主机A(192.168.79.128)防火墙上做nat转换到主机B(192.168.79.129)上
iptables -t nat -I PREROUTING -p tcp --dport 80 -d 192.168.79.128
-j DNAT --to-destination 192.168.79.129:80
# DNAT 修改流量的目标地址和端口
# --to-destination 修改后的目标地址和[端口]
iptables -t nat -I POSTROUTING 1 -p tcp --dport 80 -d 192.168.79.129
-j SNAT --to-source 192.168.79.128
# SNAT 修改流量的源地址和端口
# --to-source 指定源IP和[端口]
之后就不用管了,流量从主机B回来时防火墙会自动把目标IP和源IP 转换回来
但此时因为DNAT后流量目标IP地址不为主机A了所以该流量会从forward链通过,所以我们还要配一下forward链。
iptables -t filter -I FORWARD -p tcp -j ACCEPT
测试:
我们开启俩个服务器的nginx服务
访问主机A的5234端口
主机B的80端口
访问主机A的80端口
firewalld
firewall-cmd 既可以直接使用命令参数配置
也可以使用富规则来进行配置
允许用户192.168.xxx.0/24 访问主机:80端口
firewall-cmd --add-rich-rule="rule family=ipv4 source address=192.168.79.0/24
port port=80 protocol=tcp accept"
本地端口转发: 5234->80
firewall-cmd --add-forward-port=port=5234:proto=tcp:toport=80
远程端口转发:主机A:80 -> 主机B:80
firewall-cmd --add-forward-port=80:proto=tcp:toport=80:toaddr=192.168.79.129
firewall-cmd --add-masquerade
#打开地址伪装
#和iptables一样记得把允许转发打开
我们还可以通过firewall-cmd --list-all 来查看我们之前的配置
并且以上都是临时配置要想永久生效则配置时要加 --permanent
并且要重启firewalld服务或者firewall-cmd --reload 才能生效
上个关于DNS的博客再补充一点内容
DNS view
实现 根据请求地址的IP来返回同一域名的不同IP
案例:
假如现有俩个服务器,且这俩个服务器一个在西安,一个在上海。
现要求西安的IP进行DNS解析时把域名解析成西安服务器的IP
上海的IP进行DNS解析时把域名解析成上海服务器的IP
且这俩个域名是相同的
这里便可以用view视图来解决问题
# 把配置文件改一下 把原本的区域放入视图中
#上海
view "shanghai"{
match-clients{192.168.79.128;};
#匹配的IP
zone "." IN {
type hint;
file "named.ca";
};
zone "csdn.com" IN {
type master;
file "csdn.zone";
};
zone "211.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.211";
};
include "/etc/named.rfc1912.zones";
};
#西安
view "xian"{
match-clients{192.168.79.129;};
#匹配的IP
zone "." IN {
type hint;
file "named.ca";
};
zone "csdn.com" IN {
type master;
file "csdn2.zone";
};
include "/etc/named.rfc1912.zones";
};
像上图中的match-clients就是匹配进行dns解析的请求方的地址,匹配上的话就用这个区域的dns解析。其余和之前的配置一样
不同IP访问同一个DNS服务器,相同的域名解析出不同的IP