防火墙

作者: Miracle001 | 来源:发表于2018-03-28 00:26 被阅读5次
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

相关文章

  • centos7防火墙基本命令

    防火墙的基本使用命令 启动防火墙 停止防火墙 开机启动防火墙 开机禁止防火墙 查看防火墙状态 查看防火墙是否开机启...

  • LINUX防火墙

    一、iptables防火墙 -1、基本操作 查看防火墙状态 停止防火墙 启动防火墙 重启防火墙 永久关闭防火墙 永...

  • Linux 防火墙firewall设置

    Linux 防火墙设置说明:使用的是FIREWALL防火墙 安装防火墙 开启防火墙 排除端口 命令含义: 防火墙重...

  • Linux 防火墙设置

    Linux 防火墙设置 说明:使用的是FIREWALL防火墙 安装防火墙 开启防火墙 排除端口 防火墙重启 关闭端...

  • Centos6.5 关闭系统防火墙及内核防火墙

    清空系统防火墙 保存防火墙配置 临时关闭内核防火墙 永久关闭内核防火墙

  • firewall防火墙相关操作

    firewall 查看防火墙状态 开启防火墙 设置防火墙开机自启 查看防火墙设置开机自启是否成功 重启防火墙 查看...

  • Linux基本命令介绍

    本文命令都是基于CentOS7系统 一、防火墙相关命令 临时关闭防火墙 禁止防火墙开机启动 开启防火墙 查看防火墙...

  • iptables简介

    第1章 Iptables简介 防火墙分为硬件防火墙与软件防火墙,硬件防火墙价格很高,多数中小型公司使用软件防火墙,...

  • CentOS防火墙之iptables

    1、查看防火墙状态 2、启动防火墙 3、停止防火墙 4、重启防火墙 5、永久关闭防火墙 6、永久关闭后重启 7、开...

  • 防火墙相关命令

    开放端口: 关闭端口: 查看已开放端口: 防火墙重启: 防火墙关闭: 防火墙启动: 查看防火墙状态

网友评论

    本文标题:防火墙

    本文链接:https://www.haomeiwen.com/subject/toftcftx.html