
image.png

image.png

image.png

image.png

image.png
grep -i iptables /boot/config-...
rpm -ql iptables
品牌公司:绿盟,天融信,华为,深信服(上网行为管理)
osi
应用层 app
传输层 tcp/udp
网络层 ip
数据链路层 mac
物理层
3个流向
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
5个钩子(或者链chain)
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
4张表
优先级由高到低的顺序为: raw-->mangle-->nat-->filter
firewalld centos7引入新的前端管理工具
firewall-cmd 命令行
man firewall-cmd
firewall-config 图形
systemctl start firewalld
zone 不同区域设置防火墙
iptables
iptables规则
......
实验环境准备
禁止系统防火墙,自己建防火墙
iptables -vnL
systemctl stop firewalld centos7
systemctl disable firewalld centos7
service iptables stop centos6
chkconfig --list iptables centos6
man iptables
centos6
ping 192.168.29.127 ok
centos7
iptables -A INPUT -s 192.168.29.126 -j DROP
-t filter 不加此选项,默认就是filter表
-A apend 追加(没有策略就是第一条,原来有策略,则在最后)
-j 后面加动作
-s 源IP地址或范围
-d 目标IP地址或范围
iptables -vnL 看到增加的策略
iptables -vnL --line-numbers 显示规则的序号和收到的包数量
iptables -I INPUT -s 192.168.29.126 -j ACCEPT
-I 插入此策略为第一个,否则-A追加后,按照策略的顺序,数据包会被DROP
iptables -I INPUT -s 192.168.29.126 -j REJECT centos6-ping显示拒绝
iptables -I INPUT 2 -s 192.168.29.12 -j REJECT
-I INPUT 2 插入此策略为第2个
iptables -vnL --line-numbers 可以看到第二条策略
iptables -F 清空指定的规则链; iptables -vnL
不加选项,默认就是 -t filter filter支持3个链,可以直接看到
iptables -vnL -t raw
iptables -F -t raw 不操作
iptables -vnL -t mangle
iptables -vnL -t nat centos7支持4个链,centos6支持3个(无INPUT),其他相同
iptables -L 列出指定链上的所有规则,本选项须置后(destination)
iptables -nL 以数字格式显示地址和端口号(ss -ntl 显示端口,ss -tl 显示服务名称)
iptables -vnL
iptables -vvnL 更加详细
centos6: ping 192.168.29.127 -f 使发送请求包的数量增加
iptables -vnL bytes会显示为单位k
iptables -xvnL 使bytes由单位k显示为数字
iptables -S 以iptables-save 命令格式显示链上规则,可以保存起来,作为脚本执行
iptables -vnL --line-numbers
iptables -D INPUT 1 删除第一条规则
iptables -R INPUT 1 -s 192.168.29.13 -j REJECT 替换掉第一条规则
iptables -vnL --line-numbers
这些操作,都在内存里进行,重启后将会丢失
iptables -Z 置零
iptables的每条规则都有两个计数器
(1) 匹配到的报文的个数; (2) 匹配到的所有报文的大小之和
iptables -F
iptables -vnL
iptables -vnL --line-numbers
iptables -A INPUT -s 192.168.29.129 -j ACCEPT
iptables -A INPUT -s 192.168.29.126 -j REJECT
iptables -I INPUT ! -s 192.168.29.129 -j ACCEPT
! -s 192.168.29.129 取反,除了192.168.29.129机器,其他都接受
iptables -I INPUT ! -s 192.168.29.129 -j REJECT(不操作)
! -s 192.168.29.129 取反,除了192.168.29.129机器,其他都拒绝
注意: 本机也会被拒绝,生产中,谨慎操作,否则自己跑机房填坑
iptables -D INPUT 1
----------------------------------------------------------------------------
定义严格的规则
不允许公司的员工访问电影和购物网站
允许本机访问的规则(一进一出)
centos7
iptables -F
iptables -A INPUT -s 192.168.29.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.29.1 -j ACCEPT
-d 目标地址
iptables -vnL
centos6: ping 192.168.29.27
禁止访问规则
iptables -P INPUT DROP
iptables -P OUTPUT DROP
仅支持DROP 和 ACCEPT
iptables -vnL 显示policy ACCEPT-->DROP
允许centos6访问
iptables -A INPUT -s 192.168.29.126 -j ACCEPT
tcpdump -i ens33 -nn icmp
iptables -A OUTPUT -d 192.168.29.126 -j ACCEPT
以下是添加四个规则,192和172不在一个网段,物理上允许,所以不要这样加规则
iptables -A INPUT -s 192.168.29.15,192.168.29.17 -d 192.168.29.127,172.16.1.7 -j REJECT (不操作)
禁止centos6访问
iptables -D INPUT 2
iptables -D OUTPUT 2
----------------------------------------------------------------------------
允许centos6的icmp协议访问,ssh不能访问
iptables -A INPUT -s 192.168.29.126 -p icmp -j ACCEPT
-p 指定协议,可使用数字
iptables -A OUTPUT -d 192.168.29.126 -p icmp -j ACCEPT
cat /etc/protocols 定义了协议的名称和编号
iptables -A INPUT -s 192.168.29.126 -p icmp -i ens34 -j ACCEPT (不操作)
-i 报文流入的接口
只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链
-o 报文流出的接口
只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链
----------------------------------------------------------------------------
centos6: man iptables 1部分
centos7: 2部分
man iptables
man iptables-extensions /multiport
允许centos6的ssh访问
iptables -A INPUT -s 192.168.29.126 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -d 192.168.29.126 -p tcp --sport 22 -j ACCEPT
ssh tcp协议
--dport 匹配报文目标端口,可为范围
--sport 匹配报文源端口,可为端口范围
centos6: ssh 192.168.29.127
----------------------------------------------------------------------------
允许centos6对HTTP协议访问
systemctl status httpd
systemctl start httpd
centos6: curl --connect-timeout 1 192.168.29.127
iptables -A INPUT -s 192.168.29.126 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -d 192.168.29.126 -p tcp --sport 80 -j ACCEPT
echo welcome to fgq.com > /var/www/html/index.html
centos6: curl --connect-timeout 1 192.168.29.127 ok
iptables -vnL --line-numbers
----------------------------------------------------------------------------
禁止请求标记位的规则设定
iptables -I INPUT 2 -s 192.168.29.126 -p tcp --syn -j REJECT
--syn:用于匹配第一次握手
相当于:--tcp-flags SYN,ACK,FIN,RST SYN
--tcp-flags SYN,ACK,FIN,RST SYN
表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0
--tcp-flags SYN,ACK,FIN,RST SYN,ACK
--tcp-flags ALL ALL 都为1,可能是黑客伪装为服务器,要禁止
--tcp_flags ALL NONE 都为0,出错,禁止
iptables -vnL --line-numbers
centos6: curl 192.168.29.127; ssh 192.168.29.127
允许80端口(http)访问,禁止其他端口(如:ssh)的访问
iptables -I INPUT 2 -s 192.168.29.126 -p tcp --dport 80 --syn -j ACCEPT
iptables -I INPUT 3 -s 192.168.29.126 -p tcp --syn -j REJECT
允许80端口出去的规则已经设定了
centos6: curl 192.168.29.127; ssh 192.168.29.127
只保留允许本机访问的规则
iptables -D INPUT 2
iptables -D OUTPUT 2
iptables -vnL --line-numbers
----------------------------------------------------------------------------
允许tcp和udp的53端口访问(不操作)
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
----------------------------------------------------------------------------
8请求包 0回应包
允许别人ping通自己
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
允许自己ping通别人
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
恢复为只保留允许本机访问的规则
----------------------------------------------------------------------------
自定义链-->集合-->关联,调用
规则的集合
iptables -N drop_invalid_pkgs 自定义链
iptables -X drop_invalid_pkgs 删除自定义链(不操作)
iptables -vnL --line-numbers
iptables -A drop_invalid_pkgs -p tcp --tcp-flags ALL ALL -j REJECT
--reject-with type 不写--默认icmp-port-unreachable
iptables -A drop_invalid_pkgs -p tcp --tcp-flags ALL NONE -j REJECT
INPUT链调用自定义链
iptables -A INPUT -s 192.168.29.126 -j drop_invalid_pkgs
-j 跳转 若匹配自定义,即生效;若不配置,则跳回INPUT继续配置下面规则
----------------------------------------------------------------------------
把重要服务归到一个常用的链里
iptables -N net_access
iptables -A net_access -p tcp --dport 80 -j ACCEPT
iptables -A net_access -p tcp --dport 53 -j ACCEPT
iptables -A net_access -p udp --dport 53 -j ACCEPT
iptables -A net_access -p tcp --dport 443 -j ACCEPT
iptables -A net_access -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.29.0/24 -j net_access
把本机作为一个防火墙,正常INPUT-->FORWARD
删除所定义的链-->顺序: 删除关联-->删除规则-->删除链
iptables -D INPUT 3 删除关联
iptables -F net_access
iptables -X net_access
iptables -vnL --line-numbers
恢复为只保留允许本机访问的规则
----------------------------------------------------------------------------
multiport扩展(传输层)
man iptables-extensions /multiport
iptables -A INPUT -p tcp -m multiport --dports 80,443,21:23 -j ACCEPT
-m 指定模块
--dports 指定多个端口,可以是单个或者范围
iptables -A OUTPUT -p tcp -m multiport --sports 80,443,21:23 -j ACCEPT
iptables -vnL --line-numbers
iptables -D INPUT 2
iptables -D OUTPUT 2
----------------------------------------------------------------------------
iprange扩展(网络层)
iptables -A INPUT -p tcp -m iprange --src-range 192.168.29.120-192.168.29.130
-m multiport --dports 80,443,21:23 -j ACCEPT
iptables -A OUTPUT -p tcp -m iprange --dst-range 192.168.29.120-192.168.29.130
-m multiport --sports 80,443,21:23 -j ACCEPT
-m 指定模块,可以指定多个
--src-range 源IP地址范围
--dst-range 目标IP地址范围
恢复为只保留允许本机访问的规则
----------------------------------------------------------------------------
mac扩展(数据链路层)
允许这个IP和mac地址的计算机访问,防止arp欺骗
centos7
iptables -A INPUT -s 192.168.29.126 -m mac --mac-source 00:0c:29:f1:3c:ed -j ACCEPT
-m mac --mac-source 指明源MAC地址
适用于:PREROUTING, FORWARD,INPUT chains
iptables -A OUTPUT -d 192.168.29.126 -j ACCEPT
进不去,就不用指明--mac-dst(没有此选项)
关闭centos6的IP对应的网卡,centos5伪装为192.168.29.126是否可以ping通(可以)
centos6: ifdown eth1(192.168.29.126)同时断开网卡
centos5
ifconfig eth1 192.168.29.126
ip a
ping 192.168.29.127 ping不通
centos7: tcpdump -i ens33 -nn icmp 只有request包
cdnet
vim ifcfg-eth1
BOOTPROTO=none
IPADDR=192.168.29.125-->192.168.29.126
PREFIX=24
GATEWAY=192.168.29.1
HWADDR=00:0C:29:A6:EC:42 -->MACADDR=00:0C:29:F1:3C:ED(centos6的mac地址)
service network restart 若failure,就reboot
ping 192.168.29.126
curl 192.168.29.126
centos7
arping -I eth1 192.168.29.126 查看ip的MAC地址及IP占用问题
恢复为只保留允许本机访问的规则
----------------------------------------------------------------------------
string扩展(应用层)
对报文中的应用层数据做字符串模式匹配检测
echo welcome to google website > /var/www/html/f1.html
iptables -A INPUT -s 192.168.29.126 -j ACCEPT
iptables -A OUTPUT -d 192.168.29.126 -j ACCEPT
iptables -vnL --line-numbers
centos6: curl 192.168.29.127; curl 192.168.29.127/f1.html
iptables -I OUTPUT 2 -p tcp -m string --algo bm --string "google" -j REJECT
--algo {bm|kmp} 字符串匹配检测算法
--from offset 开始偏移
--to offset 结束偏移
--string pattern 要检测的字符串模式
--hex-string pattern 要检测字符串模式,16进制格式
centos6: curl 192.168.29.127(OK); curl 192.168.29.127/f1.html(ping不通)
恢复为只保留允许本机访问的规则
----------------------------------------------------------------------------
time扩展
根据将报文到达的时间与指定的时间范围进行匹配
某个时间段内限制上网
cenots6
iptables -A INPUT -s 192.168.29.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.29.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
centos7-3: ping 192.168.29.126 ping不通
iptables -I INPUT -m time --timestart 21:00 --timestop 23:00 -j ACCEPT
iptables -I OUTPUT -m time --timestart 21:00 --timestop 23:00 -j ACCEPT
--timestart hh:mm[:ss] 时间
--timestop hh:mm[:ss]
centos7-3: ping 192.168.29.126 ping通
注意centos6时间默认=北京时间,centos7时间(UTC时间)=北京时间-8h
centos7
只保留允许本机访问的规则
man iptables-extensions /time或者1240行
iptables -A INPUT -m time --timestart 13:00 --timestop 15:00 -j ACCEPT
iptables -A OUTPUT -m time --timestart 13:00 --timestop 15:00 -j ACCEPT
13:00对应本机时间21:00
--kerneltz 内核时区,有bug,不要使用此选项,CentOS7系统默认为UTC
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--monthdays day[,day...] 每个月的几号
--weekdays day[,day...] 星期几
centos7-3: ping 192.168.29.126 ping通
清空本机规则
iptables -F
----------------------------------------------------------------------------
connlimit扩展
根据每客户端IP做并发连接数数量匹配,可防止CC(Challenge Collapsar挑战黑洞)攻击
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
iptables -A INPUT -d 192.168.29.127 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
--connlimit-upto n 连接的数量小于等于n时匹配
--connlimit-above n 连接的数量大于n时匹配
通常分别与默认的拒绝或允许策略配合使用
centos6: ssh 192.168.29.127 可以连接2个,第3个拒绝
恢复为只保留允许本机访问的规则
----------------------------------------------------------------------------
limit扩展
--limit rate[/second|/minute|/hour|/day] 基于收发报文的速率做匹配
--limit-burst number 令牌桶过滤器,超过这个数字开始限制速度
设置为只允许本机访问的规则
iptables -A INPUT -s 192.168.29.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.29.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p icmp -m limit --limit-burst 10 --limit 3/minute -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
centos6: ping 192.168.29.127 超过10个包开始限制速度
hping工具ping的扩展命令,epel源
恢复为只保留允许本机访问的规则
----------------------------------------------------------------------------
state扩展
根据”连接追踪机制“去检查连接的状态,较耗资源
conntrack机制: 追踪本机上的请求和响应之间的关系
状态
NEW: 新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
ESTABLISHED: NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
RELATED: 新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
INVALID: 无效的连接,如flag标记不正确
UNTRACKED: 未进行追踪的连接,如raw表中关闭追踪
iptables -I INPUT -s 192.168.29.126 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
ESTABLISHED这样的规则放在整个策略的最前面(优化手段) -I不用-A
iptables -I OUTPUT -d 192.168.29.126 -p tcp --sport 22 -j ACCEPT
centos6: ssh 192.168.29.127 刚开始不能访问,规则设定后就可以了
lsmod |grep nf_ nf_conntrack模块
centos7上需要加载此模块 -m state
centos6上默认启用此模块,无需加载
modprobe -r nf_conntrack 卸载此模块
cat /proc/net/nf_conntrack 已经追踪到的并记录下来的连接信息库
cat /proc/sys/net/netfilter/nf_... 不同的协议的连接追踪时长
cat /proc/sys/net/nf_conntrack_max 调整连接追踪功能所能够容纳的最大连接数量
老版本,一查询nf_conntrack,就会出现最大值的限制
但是此最大值远远不满足支持用户的访问数量,可能导致不能连接
注意: 调度器上不要启用此模块nf_conntrack
iptables的链接跟踪表最大容量为/proc/sys/net/nf_conntrack_max,
各种状态的超时链接会从表中删除;当模板满载时,后续连接可能会超时
2个解决方法
(1) 加大 nf_conntrack_max 值
vim /etc/sysctl.conf
net.nf_conntrack_max = 393216
net.netfilter.nf_conntrack_max = 393216
(2) 降低 nf_conntrack timeout 时间
vim /etc/sysctl.conf
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
iptables -nvL -t nat
开放被动模式的ftp服务
ftp服务器centos7
(1) 装载ftp连接追踪的专用模块
跟踪模块路径:/lib/modules/kernelversion/kernel/net/netfilter
cp /etc/sysconfig/iptables-config /etc/sysconfig/iptables-config.bak
vim /etc/sysconfig/iptables-config 配置文件
IPTABLES_MODULES="nf_conntrack_ftp"
yum -y install vsftpd
systemctl start vsftpd
modprobe nf_conntrack_ftp 加载模块
lsmod |grep nf_ ftp出现
(2) 放行请求报文
命令连接:NEW, ESTABLISHED
数据连接:RELATED, ESTABLISHED
只允许本机访问的规则前提下
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
RELATED 相关,被动模式的数据端口都是随机的
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
命令连接时,就是连接21端口
(3) 放行响应报文
iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT
iptables -vnL
ftp客户端centos6
yum install lftp ftp
ftp 192.168.29.127 ok
恢复为只保留允许本机访问的规则
----------------------------------------------------------------------------
Target
ACCEPT,DROP,REJECT,RETURN,LOG,SNAT,DNAT,REDIRECT,MASQUERADE..
LOG: 非中断target,本身不拒绝和允许,放在拒绝和允许规则前并将日志记录在/var/log/messages系统日志中
--log-level level 级别: emerg, alert, crit, error,warning, notice, info or debug
--log-prefix prefix 日志前缀,用于区别不同的日志,最多29个字符
iptables -A INPUT -p tcp -m state --state NEW -j LOG --log-prefix "new connections:"
tail -f /var/log/messages centos6连接时,出现new connections的字样
centos6: ftp 192.168.29.127
恢复为只保留允许本机访问的规则
----------------------------------------------------------------------------
设置默认策略,建议白名单(只放行特定连接)
1) iptables -P,不建议
2) 建议在规则的最后定义规则做为默认策略
iptables -A INPUT -j REJECT
iptables -A OUTPUT -j REJECT
不建议使用: iptables -P INPUT DROP
----------------------------------------------------------------------------
永久保存iptables的规则(内存中,可能会丢失)
规则有效期限
使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限
保存规则
保存规则至指定的文件
CentOS 6
service iptables save
将规则覆盖保存至/etc/sysconfig/iptables文件中,原有规则将会丢失,实验前备份
service iptables restart
会自动从/etc/sysconfig/iptables 重新载入规则
CentOS 7
保存规则
iptables -S > /PATH/TO/SOME_RULES_FILE
iptables-save > /PATH/TO/SOME_RULES_FILE
重新载入预存规则文件中的规则
iptables-restore < /PATH/FROM/SOME_RULES_FILE
-n,--noflush 不清除原有规则
-t,--test 仅分析生成规则集,但不提交
iptables-save > /etc/sysconfig/iptables-test(文件不存在)
iptables -F
iptables -vnL --line-numbers
iptables-restore < /etc/sysconfig/iptables-test
iptables -vnL --line-numbers 清除的规则被还原
CentOS 7 开机自动重载规则文件中的规则(3种方法)
注意: chmod +x /etc/rc.d/rc.local 给/etc/rc.d/rc.local执行权限
(1) 用脚本保存各iptables命令;让此脚本开机后自动运行
/etc/rc.d/rc.local文件中添加脚本路径
/PATH/TO/SOME_SCRIPT_FILE
(2) 用规则文件保存各规则,开机时自动载入此规则文件中的规则
/etc/rc.d/rc.local文件添加
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
(3)自定义Unit File,进行iptables-restore

image.png
网络防火墙
iptables/netfilter网络防火墙
1)充当网关
2)使用filter表的FORWARD链
注意的问题:
1)请求-响应报文均会经由FORWARD链,要注意规则的方向性
2)如果要启用conntrack机制,建议将双方向的状态为ESTABLISHED的报文直接放行
---------------------------------------------------------------------------
centos7-3内网客户机; centos7防火墙(+路由); centos6外网服务器
centos7-3与centos7用192.168.29网段(内网); centos7和centos6用192.168.1网段
3个机子的防火墙都清空(ACCEPT的默认策略)
centos7-3
配置网关-->写配置文件或者命令添加(易变动)
cdnet
vim ifcfg-ens33
添加信息
GATEWAY=192.168.29.127
systemctl restart network
route -n 显示添加的网关ok
断开192.168.1.9网卡,使用192.168.29.129
ifdown ens34
ip a 显示网卡ens34被down掉
centos7
vim /etc/sysctl.conf
没有实际内容,手动添加;centos6上有内容
net.ipv4.ip_forward = 0
sysctl -p
sysctl -a |grep forward ip_forward显示为1
centos6
配置网关
cdnet
vim eth1 删除网关
vim eth0
GATEWAY=192.168.1.7
service restart network
route -n
断开192.168.29.126网卡,使用192.168.1.6
ip a 显示网卡eth1被down掉
测试
centos6
ping 192.168.1.7 ok ttl=64直接到达路由器
ping 192.168.29.127 ok ttl=64直接到达路由器
ping 192.168.29.129 ok ttl=63经过一个路由器
centos7-3
ping 192.168.1.7 ok
ping 192.168.29.127 ok
ping 192.168.1.6 ok ttl=63经过一个路由器
----------------------------------------------------------------------------
以上面的实验为基础
centos7-3可以ssh连接centos6,但不能ping通centos6
centos7
iptables -A FORWARD -p icmp -d 192.168.1.6 -j REJECT
centos7-3: ping 192.168.1.6 ping不通,ssh可以
centos6: ping 192.168.29.128 ping不通,ssh可以
centos6
echo welcome to fgq.com > /var/www/html/index.html
yum -y install httpd
service httpd restart
centos7-3
curl 192.168.1.6 curl通 内网可以访问外网
yum -y install httpd
systemctl restart httpd
echo website.fgq.com > /var/www/html/index.html
tail -f /var/log/httpd/access_log
Windows: tracert www.qq.com
centos6: curl 192.168.29.129 curl通 外网可以访问内网的特定服务

image.png

image.png

image.png
NAT: network address translation
PREROUTING,INPUT,OUTPUT,POSTROUTING
SANT
让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装
请求报文:修改源IP
POSTROUTING,INPUT
固定IP
--to-source [ipaddr[-ipaddr]][:port[-port]]
--random
MASQUERADE 动态IP,如拨号网络
--to-ports port[-port]
--random
DNAT
把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP
请求报文:修改目标IP
PREROUTING,OUTPUT
--to-destination [ipaddr[-ipaddr]][:port[-port]]
PNAT
port nat,端口和IP都进行修改
以前面实验为基础
iptables -t nat -F(不做也可以)
SANT
内网可以访问外网,外网不能访问内网
centos6
route del default gw 192.168.1.7 删除网关
route -n
curl 192.168.29.129 no
centos7-3
curl 192.168.1.6 no
ping 192.168.1.6 no
centos7 指明SANT
静态IP
iptables -t nat -A POSTROUTING -s 192.168.29.0/24 -j SANT --to-source 192.168.1.7
动态IP
iptables -t nat -A POSTROUTING -s 192.168.29.0/24 -j MASQUERADE
centos7-3
iptables -t nat -vnL
curl 192.168.1.6 ok
ping 192.168.1.6 ok
telnet 192.168.1.6 开两个终端
ss -nt 随机端口,IP是centos6
centos6
curl 192.168.29.129 no
ping 192.168.29.129 no
ss -nt 端口不做转换,IP是centos7
tail -f /var/log/httpd/access_log
DNAT
外网访问内网
centos7
systemctl restart httpd
echo firewall website > /var/www/html/index.html
centos6
ping 192.168.1.7 ok
curl 192.168.1.7 ok
centos7
iptables -t nat -A PREROUTING -d 192.168.1.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.29.129
centos6
curl 192.168.1.7 ok,不是centos7的web主页,转换为centos7-3的web主页
centos7-3
tail -f /var/log/httpd/access_log 192.168.1.6访问
端口不同也可以访问
禁用selinux策略
vim /etc/httpd/conf/httpd.conf
/Listen 80 更改为8080
systemctl restart httpd
centos7
iptables -t nat -R PREROUTING 1 -d 192.168.1.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.29.129:8080
centos6
curl 192.168.1.7 ok
----------------------------------------------------------------------------
REDIRECT 转发
只能把访问本机的端口转换为本机的其他端口,不能转换为其他机器的端口
man iptables-extensions /REDIRECT
以上面的实验为基础
centos7客户端
curl 192.168.29.129 no,因为是192.168.29.129的端口是8080
centos7-3服务器
iptables -t nat -A PREROUTING -d 192.168.29.129 -p tcp --dport 80 -j REDIRECT --to-ports 8080
centos7客户端
curl 192.168.29.129 ok
一般企业很少去做防火墙,都是硬件的防火墙,买来即可
真正用的话如下图

image.png

image.png

image.png
firewalld服务
比iptables强的地方就是可以划分区域,如上图
firewall命令和iptables命令差不多,简单了解
firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则
归入zone顺序:
先根据数据包中源地址,将其纳为某个zone
纳为网络接口所属zone
纳入默认zone,默认为public zone,管理员可以改为其它zone
网卡默认属于public zone,lo网络接口属于trusted zone
systemctl start firewalld
firewall-cmd --get-services 查看预定义服务列表
firewall-config 图形界面
设置永久保存permanent,runtime临时生效
不同区域里的各种服务,要启用对应服务(可以被访问),直接点上√即可,直接生效
不同区域里,可以开启特定的服务(图形界面点上√即可),不用自己再分区,方便
centos7.4: curl 192.168.29.127 no
centos7图形界面public zone找到http,点上√即可访问
firewall-cmd命令
firewall-cmd --get-zones 列出所有可用区域
firewall-cmd --get-default-zone 查询默认区域
firewall-cmd --set-default-zone=work 设置默认区域
.....详细内容看ppt
管理rich 规则
rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,
还可以实现日志syslog和auditd,也可以实现端口转发,伪装和限制速率
.....详细内容看ppt
centos7
iptables -vnL
systemctl restart vsftpd
centos6
ftp 192.168.29.127 ok
centos7
systemctl start firewalld
centos6
ftp 192.168.29.127 no
centos7
firewall-cmd --get-default-zone
firewall-cmd --add-service=ftp 临时生效
firewall-cmd --permanent --add-service=ftp 永久生效
centos6
ftp 192.168.29.127 ok
网友评论