NAT网络地址转换
SNAT - 源地址转换
SNAT主要用于内网访问外网,将内网私有IP转换为公网IP。
# 基础SNAT配置
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to-source 172.8.7.1# 多IP负载均衡
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 202.96.1.1-202.96.1.5# 指定出口接口的SNAT
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j SNAT --to-source 172.8.7.1# 基于端口的SNAT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -p tcp -j SNAT --to-source 172.8.7.1:1024-65535
DNAT - 目标地址转换
DNAT主要用于外网访问内网服务,实现端口映射和负载均衡。
# Web服务器映射
iptables -t nat -I PREROUTING -d 172.8.7.1 -p tcp --dport 80 -j DNAT --to-destination 10.1.1.2:80
iptables -t nat -I PREROUTING -d 172.8.7.1 -p tcp --dport 443 -j DNAT --to-destination 10.1.1.2:443# 数据库服务映射
iptables -t nat -A PREROUTING -d 172.8.7.1 -p tcp --dport 3306 -j DNAT --to-destination 10.1.1.3:3306# 负载均衡配置
iptables -t nat -A PREROUTING -d 172.8.7.1 -p tcp --dport 80 -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 10.1.1.2:80
iptables -t nat -A PREROUTING -d 172.8.7.1 -p tcp --dport 80 -j DNAT --to-destination 10.1.1.3:80# 配置对应的SNAT(DNAT通常需要配套SNAT)
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to-source 172.8.7.1
MASQUERADE - 动态源地址转换
MASQUERADE适用于动态IP环境,自动使用出口网卡的IP地址。
# 基础MASQUERADE配置
iptables -t nat -I POSTROUTING -s 10.1.1.0/24 -o ens33 -j MASQUERADE# 多网段配置
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth1 -j MASQUERADE# 基于协议的MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -p tcp -o ens33 -j MASQUERADE
REDIRECT - 本地端口重定向
# HTTP到HTTPS重定向
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080# 透明代理配置
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 3128# 端口映射
iptables -t nat -A PREROUTING -p tcp --dport 8000 -j REDIRECT --to-ports 80# 注意:REDIRECT只能用于PREROUTING和OUTPUT链
现代防火墙管理 - firewalld
firewalld基础操作
# 查看防火墙状态
systemctl status firewalld
firewall-cmd --state# 查看当前区域
firewall-cmd --get-default-zone
firewall-cmd --get-active-zones# 查看网卡所在区域
firewall-cmd --get-zone-of-interface=ens33# 列出当前区域配置
firewall-cmd --list-all
firewall-cmd --zone=public --list-all
服务和端口管理
# 添加服务(临时)
firewall-cmd --add-service=http
firewall-cmd --add-service=https
firewall-cmd --add-service=ssh# 添加服务(永久)
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=mysql --permanent# 添加端口
firewall-cmd --add-port=80/tcp
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --add-port=3000-3010/tcp --permanent# 删除服务和端口
firewall-cmd --remove-service=ftp --permanent
firewall-cmd --remove-port=8080/tcp --permanent# 重载配置
firewall-cmd --reload
高级firewalld配置
# 富规则配置
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent# 端口转发
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent# IP伪装(相当于MASQUERADE)
firewall-cmd --add-masquerade --permanent# 区域管理
firewall-cmd --new-zone=dmz-servers --permanent
firewall-cmd --zone=dmz-servers --add-service=http --permanent
Ubuntu防火墙 - ufw
# 启用ufw
ufw enable
ufw disable# 基础规则
ufw allow 22/tcp
ufw allow 80,443/tcp
ufw deny 23/tcp# 基于IP的规则
ufw allow from 192.168.1.0/24
ufw deny from 10.0.0.100# 查看状态
ufw status
ufw status verbose
SELinux安全子系统
SELinux基础概念
SELinux (Security-Enhanced Linux) 是Linux内核的安全模块,提供强制访问控制(MAC)机制。
SELinux工作模式
Enforcing   # 强制模式,违反策略的操作被阻止
Permissive  # 宽容模式,违反策略的操作被记录但不阻止  
Disabled    # 禁用模式,SELinux功能完全关闭
SELinux配置管理
# 查看SELinux状态
sestatus
getenforce# 临时修改模式
setenforce 0    # 设置为Permissive模式
setenforce 1    # 设置为Enforcing模式# 永久配置文件
vi /etc/selinux/config# 配置选项:
SELINUX=enforcing     # 启用强制模式
SELINUX=permissive    # 宽容模式  
SELINUX=disabled      # 禁用SELinux(推荐)
SELinux实际应用
# 查看文件SELinux上下文
ls -Z /etc/passwd
ls -Z /var/www/html/# 查看进程SELinux上下文  
ps -eZ# 修改文件SELinux上下文
chcon -t httpd_exec_t /usr/local/apache/bin/httpd
restorecon -v /var/www/html/index.html# SELinux策略查询
getsebool -a | grep httpd
setsebool -P httpd_can_network_connect on
