centos 6.5和centos7防火墙1

--

防火墙

瑞星 江民 诺顿 卡巴斯基  天网......



iptables


http://www.netfilter.org/

netfilter / iptables   --iptables 的全名       2.4版本内核后都集成有这个组件



iptables  基本概念


四张表:    表里有链  (chain )

filter:  用来进行包过滤:  INPUT  OUTPUT FORWARD  
nat:   用来网络地址转换:   network  address translation ,允许一个内网地址块,通过NAT转换成公网IP,实现对公网的访问,解决IP地址不足
    PREROUTING   POSTROUTING    OUTPUT

mangle :用来对数据包标记    
     PREROUTING INPUT OUTPUT  FORWARD  POSTROUTING

raw:对原始数据包的处理
    PREROUTING  OUTPUT





Incoming                 /     \         Outgoing
       -->[Routing ]--->|FORWARD|------->
          [Decision]     \_____/        ^
               |                        |
               |                      ____
              ___                    /    \
             /   \                  |OUTPUT|
            |INPUT|                  \____/
             \___/                      ^
               |                        |
                ----> Local Process ----




iptables  
    -A  增加一条规则,后接链名,默认是加到规则的最后面
    -D  删除
    -L  列出规则 
    -n   以数值显示 
    -I   在最前面插入规则 
    -v   显示统计数据,与-L一起用,看到的信息更多


    -F  清空规则
    -z   清空计数器
    -x   清空自定义链

    -t   后接表名
    -P   policy,默认策略
    -p   protocol,后接协议名
    --dport  目标端口
    --sport  源端口
    -d  destination,目标地址
    -s  source,源地址  
    -i  接网卡接口, 进入的网卡接口
    -o  接网卡接口, 出去的网卡接口
    -j  后接动作

    动作的分类:

    ACCEPT    接收数据包
    DROP       丢弃数据包
    REJECT   拒绝数据包,和DROP的区别就是REJECT会返回错误信息,DROP不会
    MASQUEREAD  IP地址伪装,使用NAT转换成外网IP,可以PPP拔号(外网IP不固定情况)
    SNAT   源地址转换,它与MASQUEREAD的区别是SNAT是接一个固定IP
    DNAT    目标地址转换
    LOG    记录日志


例1,列规则

    iptables -L     --默认看的就是filter表
    iptables -L -t  filter

    iptables -L -t  nat
    iptables -L -t  mangle
    iptables -L -t  raw


例2,控制ping


10.1.1.0/24网段ping本机,会被拒绝(客户端会收到拒绝信息)
# iptables -t filter -A INPUT -p icmp -s 10.1.1.0/24 -j REJECT
# iptables -t filter -D INPUT -p icmp -s 10.1.1.0/24 -j REJECT  --删除上一条规则


# iptables -t filter -A INPUT -p icmp -s 10.1.1.0/24 -j DROP
# iptables -t filter -D INPUT -p icmp -s 10.1.1.0/24 -j DROP

# iptables -t filter -A OUTPUT -p icmp -d 10.1.1.0/24 -j REJECT
# iptables -t filter -D OUTPUT -p icmp -d 10.1.1.0/24 -j REJECT

# iptables -t filter -A OUTPUT -p icmp -d 10.1.1.0/24 -j DROP
# iptables -t filter -D OUTPUT -p icmp -d 10.1.1.0/24 -j DROP


--上面四种方法都可以控制拒绝10.1.1.0/24网段ping本机



# iptables -t filter -A INPUT -p icmp  -j REJECT  --如果不写-s或-d,默认代表所有人


扩展
我想实现所有人都ping不通我,但是10.1.1.X(X你自定义)这个IP能ping通我

--提示:iptables的匹配规则:读取的顺序是从上往下一条一条匹配,匹配一条就不继续往下匹配,都没有匹配,则最后匹配默认策略


# iptables -t filter -A INPUT -p icmp -j REJECT
# iptables -t filter -A INPUT -p icmp -s 10.1.1.X -j ACCEPT
--此写法错误的


# iptables -t filter -A INPUT -p icmp -j REJECT
# iptables -t filter -I INPUT -p icmp -s 10.1.1.X -j ACCEPT
--正确写法,把第二条加到第一条前面


# iptables -t filter -I INPUT 2 -p icmp -s 10.1.1.X -j ACCEPT
--链后面接数字2,表示插入到原来第二条的上面,成为新的第2条



删除的方法:
    方法一:
# iptables -t filter -D  INPUT -s 10.1.1.X  -p icmp -j ACCEPT
        --加的时候怎么写,删除时就要怎么写  A 参数换成 D就可以
    方法二;  
# iptables -L -n  --line            
# iptables  -D INPUT  2
    --在规则比较多或者不好写规则的情况下,可以先用--line或者--line-number列出行号,再用行号删除


    方法三:
# iptables -F   
    --直接清空filter表的所有规则

iptables -X
iptables -Z   --清除计数器,自定义链



例3,规则的保存与还原
# /etc/init.d/iptables save    --这样是默认保存到/etc/sysconfig/iptables
# iptables-save > /etc/sysconfig/iptables   --将当前规则保存到这个文件,文件可以自定义

# iptables -F
# iptables -X
# iptables -Z   --使用这三条来清空filter表,如果别的表也要清空的话,就加-t 表名都清一次

# iptables-restore < /etc/sysconfig/iptables --把保存的规则还原回去


--/etc/sysconfig/iptables文件为默认保存文件,重启iptables服务会默认把此文件里的规则还原。当然也可以手工保存到另一个文件,就需要iptables-restore手工还原了。


例4,每个链的默认策略的修改
# iptables -P INPUT DROP    --INPUT键默认策略改为DROP,改回来把DROP换成ACCEPT就行了
# iptables -P OUTPUT DROP   --OUTPUT键默认策略改为DROP5,实现允许ssh过来(代表本机为服务器身份),ssh出去(代表本机为客户端身份),别的任何访问都拒绝  (要求,INPUT和OUTPUT双链默认策略都为DROP)

          OUTPUT        INPUT
        客户端 随机端口 ---》  服务器  22
           (1024-65535)     
        客户端 随机端口 《---  服务器  22
          INPUT             OUTPUT




实现允许10.1.1.0/24网段来ssh本机(服务器),其它任何访问都拒绝(在双链拒绝的情况下)
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -A INPUT -p tcp  --dport 22 -s 10.1.1.0/24 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 22 -d 10.1.1.0/24 -j ACCEPT


实现允许从本机(客户端)ssh到10.1.1.0/24网段的服务器,其它任何访问都拒绝(在双链拒绝的情况下)
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -A OUTPUT -p tcp --dport 22 -d 10.1.1.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --sport 22 -s 10.1.1.0/24 -j ACCEPT6,
在上面的基础上再加上只允许10.1.1.0/24这个网段访问你的httpd服务,和你只能访问10.1.1.0/24网段的httpd服务

http tcp 80
https tcp 4437,
在上面的基础上再加上允许别人访问本台服务器的DNS
只需要做udp的53端口就可以了,不用写tcp 53(因为tcp 53主要是用于主从DNS服务器同步的)



-------------------------------

一些特殊的写法
连续端口或多端口写法
iptables -A INPUT -p tcp --dport 1:1000 -j ACCEPT
iptables -A INPUT -p tcp -m multiport  --dport 25,110 -j ACCEPT

硬件地址   
iptables -A INPUT -m mac --mac-source 00:23:CD:95:DA:0B -p all  --dport 80 -j ACCEPT


例8
samba
139   4459, 邮件服务器
smtp 25  pop3 110  imap   143 
smtps 465 pop3s 995  imaps 993


            客户端     邮件服务器
            随机 -------> 25,110,143
            随机  <------- 25,110,143

# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -A INPUT -p tcp -m multiport --dport 25,110,143 -s 10.1.1.0/24 -j ACCEPT
# iptables -A OUTPUT -p tcp -m multiport --sport 25,110,143 -d 10.1.1.0/24 -j ACCEPT10 dhcp
    iptables 对dhcp端口控制无效

应用层
表示层
会话层 
传输层
网络层
数据链路层
物理层


例11
nfs

--因为nfs用到rpc调用,端口不固定,所以需要把端口给固定起来.nis服务也会用到rpc调用,也需要做端口绑定


vim /etc/sysconfig/nfs     --在此文件里加上下面四句
LOCKD_TCPPORT=3000
LOCKD_UDPPORT=3000
MOUNTD_PORT=3001
STATD_PORT=3002

/etc/init.d/nfs restart
/etc/init.d/rpcbind restart --这里先把默认策略改成ACCEPT,再启动就可以启动起来,然后再把默认策略改回成DROP,再继续做下面的实验

netstat -ntl |grep 300   去查看,看到rpc.的守护进程的端口为自己绑定的端口


iptables -A INPUT -p tcp  --dport 3000:3002 -j ACCEPT
iptables -A OUTPUT -p tcp  --sport 3000:3002 -j ACCEPT
iptables -A INPUT -p udp  --dport 3000:3002 -j ACCEPT
iptables -A OUTPUT -p udp  --sport 3000:3002 -j ACCEPT



还要加上2049(nfs)和111(rpcbind)的端口的规则


iptables -A  INPUT -p tcp  --dport 2049 -j ACCEPT
iptables -A  OUTPUT -p tcp  --sport 2049 -j ACCEPT
iptables -A  INPUT -p udp  --dport 2049 -j ACCEPT
iptables -A  OUTPUT -p udp  --sport 2049 -j ACCEPT


iptables -A  INPUT -p tcp  --dport 111 -j ACCEPT
iptables -A  OUTPUT -p tcp  --sport 111 -j ACCEPT
iptables -A  INPUT -p udp  --dport 111 -j ACCEPT
iptables -A  OUTPUT -p udp  --sport 111 -j ACCEPT


--现在就可以用另一台机showmount -e 查看并进行挂载了



--练习:把上面的3000300130022049111合起来来做

# iptables -A INPUT -p tcp -m multiport --dport 111,2049,3000,3001,3002 -j ACCEPT
# iptables -A INPUT -p udp -m multiport --dport 111,2049,3000,3001,3002 -j ACCEPT
# iptables -A OUTPUT -p tcp -m multiport --sport 111,2049,3000,3001,3002 -j ACCEPT
# iptables -A OUTPUT -p udp -m multiport --sport 111,2049,3000,3001,3002 -j ACCEPT12: yum
视你做的yum类型而定
file
ftp
http



例13
mysql
330614
rsync
873
还加一个2215
vnc
5900



练习:

ftp实现双链拒绝的情况下,客户端通过主动和被动都能访问进来

服务器端准备:
# yum install vsftpd -y

# vim /etc/vsftpd/vsftpd.conf   --直接在配置文件最后加上这两句就可以
pasv_min_port=3000
pasv_max_port=3005

# /etc/init.d/vsftpd restart
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP

客户端测试方法:
1,命令连接测试,能成功连接上就表示命令端口连接没问题
# ftp 10.1.1.10(服务器的ip)
2,数据传输测试,用上面的命令登录成功后,在客户端使用passive指令转换你的主动和被动模式,
(服务器端不用转换,因为服务器端默认就是主动和被动都支持的)
然后使用ls指令能看到里面的pub子目录就表示数据传输OK了(因为默认是登录到服务器的/var/ftp/目录,里面有一个pub子目录)

ftp有主动和被动的连接两种
1,为什么有主动和被动两种连接方式呢?
因为这是一种比较古老的设计方式,它是假设客户端用户有防火墙并且还不会配置防火墙的情况下,才设计出两种模式。
防火墙默认只会拒绝进来的包,而不会拒绝出去或出去回来的包。
2,一般用主动好还是被动好?
用被动比较常见,(原因参考问题一)
3,主动和被动在使用时的区别?
没有防火墙,那么使用起来没什么区别,只是底层传输包的方式不一样
有防火墙,那么防火墙的规则写法也不一样



主动:
        server          client

      20         21         n   m   
            <-------------      

            -------------->

       ---------------------------------------->    

       <---------------------------------------

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT



被动:
        server          client
    随机端口         21         n   m
    30003005    <---------------

            ---------------->

     <--------------------------------------------  

    --------------------------------------------->

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 3000:3005 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3000:3005 -j ACCEPT 


================================================================================

rhel7和centos7的新防火墙软件 firewalld  (但仍然可以使用iptables)

官网地址
http://www.firewalld.org/

# yum install firewall-cmd firewall-config

# systemctl restart firewalld   --启动服务
# systemctl status firewalld    --确认状态
# systemctl enable firewalld    --设为开机自动启动(可选)




概念一:
Zone    简单来说就是防火墙方案,就是一套规则集,你可以切换使用哪一个zone

# firewall-cmd --get-zones  --查看现在有哪些zone
work drop internal external trusted home dmz public block


drop:拒绝所有外部连接请求。
block:拒绝所有外部连接(with an icmp-host-prohibited message for IPv4 and icmp6-adm-prohibited for IPv6),允许内部发起的连接
public:适用公共环境,拒绝所有外部连接请求,但指定外部连接可以进入
external:特别适用路由器启用了伪装功能的外部网。拒绝所有外部连接请求,只能接收经过选择的连接。
dmz:用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。(受限制的公共连接可以进入)
work:适用于工作网络环境,概念和workgoup一样,也是指定的外部连接允许用于工作区。
home:类似家庭组,用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接
internal:用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接
trusted:可接受所有的网络连接。(最不安全)


# firewall-cmd --get-default-zone  --查看当前使用的zone
public

# firewall-cmd --set-default-zone=work
# firewall-cmd --set-default-zone=public    --修改当前使用的zone

# firewall-cmd --list-all  --查看当前使用的zone的规则集
# firewall-cmd --zone=work --list-all   --指定查看work这个zone的规则集


概念二:
网卡接口
# firewall-cmd --zone=public --add-interface=ens33  --指定网卡加入到哪个zone

# firewall-cmd --get-zone-of-interface=ens33        --查看网卡加入到哪个zone



概念三:
port,service  分别表示端口和服务
# firewall-cmd  --add-port=80/tcp  --允许tcp的80端口进来的通迅(类似iptables的INPUT)

# firewall-cmd  --remove-port=80/tcp --删除上面的规则

# firewall-cmd  --add-service=http  --允许http服务进来的通迅(不用管它是什么端口,只记住服务就好了)

# firewall-cmd  --remove-service=http


# firewall-cmd  --add-service=ftp   --允许ftp服务进来的通迅(无论主动还是被动都可以,这样就把iptables的写法简单化了)

# firewall-cmd  --remove-service=ftp


概念四:
rich-rule复杂规则

# firewall-cmd  --add-rich-rule="rule family="ipv4" source address=172.16.2.9 service name="ssh" accept"


下面两条合起来实现允许所有人访问我的http,但drop掉172.16.2.9的访问我的http的包
# firewall-cmd --add-service=http   
# firewall-cmd  --add-rich-rule="rule family="ipv4" source address=172.16.2.9 service name="http" drop"



概念五:
关于立即生效与永久生效的讨论

上面加端口或加服务规则,是立即生效,但重启不生效(可以使用firewall-cmd --reload来装载保存的规则)

# firewall-cmd  --permanent --add-service=ftp  --加了一个--permanent参数后,立即不生效,需要reload后才能生效


实际写规则时,建议直接写(不加--permanent参数),所有规则写完,测试完成后,再使用# firewall-cmd --runtime-to-permanent全部转成permanent规则



概念六:
panic模式
# firewall-cmd --panic-on
# firewall-cmd --panic-off





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值