马哥教育网络班21期+第14周课程练习

iptables关键点

  • 表:filter(过滤,防火墙);nat(网络地址转换);mangle(拆解报文,做出修改,封装报文);raw(关闭nat表启用的链接追踪机制);上述是根据功能来区分的,写规则要明白要实现的功能

  • 链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

  • 数据流向:流入PREROUTING–>INPUT;转发PREROUTING–>FORWARD–>POSTROUTING;流出OUTPUT–>POSTROUTING

  • 表的功能实现:filter(INPUT,FORWARD,OUTPUT);nat(PREROUTING,OUTPUT,POSTROUTING);

    mangle(RREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING);raw(PREROUTING,OUTPUT)

  • 功能的优先级次序:raw –> mangle –> nat –> filter

  • 添加规则考量点:实现哪种功能(表),判断数据流向(链);同类规则小范围放在上面,不同类规则匹配几率大的放在上面,可以合并的尽量合拼为一条,设置默认策略,iptables是添加规则的工具,netfilter是在内核的功能函数

系统的INPUT和OUTPUT默认策略为DROP;

现在为做访问控制功能,因此在filter(默认)上做策略
[root@centos ~]# iptables -F  清除filter表上所有链上的默认规则
[root@centos ~]# iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 
 开放入站方向的ssh服务,我必须用xshell连接主机
[root@centos ~]# iptables -A OUTPUT -p tcp  -m state --state ESTABLISHED,RELATED -j ACCEPT
 开放出站方向关于tcp协议发起的一系列链接(前提是有相关tcp协议入站new状态)
[root@centos ~]# iptables -P INPUT DROP 出站方向默认规则为丢弃
[root@centos ~]# iptables -P OUTPUT  DROP 出站方向默认规则为丢弃
[root@centos ~]# iptables -vnL --line-number 查看iptables规则,加--line-number 选项是为了方便删除或修改插入单条规则
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source         destination         
1      357 29912 ACCEPT     tcp  --  *      *       0.0.0.0/0      0.0.0.0/0           tcp dpt:22 state NEW,ESTABLISHED 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source          destination         
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source          destination         
1       88  9264 ACCEPT     tcp  --  *      *       0.0.0.0/0       0.0.0.0/0           state RELATED,ESTABLISHED

1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;

man出iptables的time扩展,limit扩展,string扩展
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
 [!] --weekdays day[,day...]
 Only match on the given weekdays. Possible values are Mon,Tue, Wed, Thu, Fri, Sat, Sun,
or  values  from  1  to  7,respectively. You may also use two-character variants (Mo,
Tu, etc.).
--limit rate[/second|/minute|/hour|/day]
Maximum average matching rate: specified as a number, with
an optional‘/second’,‘/minute’,‘/hour’, or‘/day’suf-fix; the default is 3/hour.
...skipping...
[!] --string pattern Matches the given pattern.
--algo {bm|kmp}
Select  the  pattern matching strategy. (bm = Boyer-Moore,kmp = Knuth-Pratt-Morris)
[root@centos ~]# iptables -I INPUT -p tcp --dport 80 -m time  --weekdays 1 -m string
 --string "admin" --algo kmp -m limit --limit 100/second -j DROP

2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;

[root@centos ~]# iptables -I INPUT -m time --weekdays 1,2,3,4,5 --timestart 8:30 --timestop 18:00 -m limit 
--limit-burst 5 -m iprange --src-range 172.16.0.0-172.16.255.255 -p tcp -m multiport 
--dport 20,21 -m state --state NEW,ESTABLISHED -j ACCEPT
出站规则上题开放

3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;

[root@centos ~]# iptables -I INPUT -m iprange --src-range 172.16.40.0-172.168.40.255
 -m limit --limit 2/minute -p tcp --dport 22 -j ACCEPT
出站规则上题已开放

4、拒绝TCP标志位全部为1及全部为0的报文访问本机;

[root@centos ~]# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
[root@centos ~]# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

5、允许本机ping别的主机;但不开放别的主机ping本机;

由于上题的INPUT和OUTPUT默认策略为DROP,所以策略如下
[root@centos ~]# iptables -I INPUT  -p icmp --icmp-type 0 -j ACCEPT 本机接受其他主机回给我们的ping应答
[root@centos ~]# iptables -I OUTPUT  -p icmp --icmp-type 8 -j ACCEPT 本机ping请求到其他主机
[root@centos ~]# ping 192.168.40.130
PING 192.168.40.130 (192.168.40.130) 56(84) bytes of data.
64 bytes from 192.168.40.130: icmp_seq=1 ttl=64 time=1.00 ms
[root@centos ~]# ping 192.168.40.128
PING 192.168.40.128 (192.168.40.128) 56(84) bytes of data.
^C
--- 192.168.40.128 ping statistics ---
14 packets transmitted, 0 received, 100% packet loss, time 13994ms
当主机的INPUT和OUTPUT的策略默认为允许时,自己推断的策略如下
iptables -I INPUT -p icmp --icmp-type 8 -j DROP 拒绝其他主机发来的ping请求,没有请求便没有响应,则只需要这一条规则即可

6、判断下述规则的意义:

# iptables -N clean_in 
  新建 名为clean_in的自定义链
  # iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
  在新链上追加禁止本机发icmp广播
  # iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
  禁止本机到172.16.0.0网段收发icmp广播
  # iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP 
  禁止非syn不正常请求
  # iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
  禁止tcp标志位全为1请求
  # iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
  禁止tcp标志位全为0请求
  # iptables -A clean_in -d 172.16.100.7 -j RETURN 
  针对172.16.100.7的链,等待被调用
  # iptables -A INPUT -d 172.16.100.7 -j clean_in
  本机访问172.168.100.7时到新链clean_in去匹配规则,之后在来匹配OUTPUT链上的规则
  # iptables -A INPUT  -i lo -j ACCEPT
  接受从lo来的任何服务请求
  # iptables -A OUTPUT -o lo -j ACCEPT
  放行从lo出的任何服务
  # iptables -A INPUT  -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP
  禁止从eth0进入访问本机的tcp协议的53,113,137,139,445端口
  # iptables -A INPUT  -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP
  禁止从eth0进入访问本机的udp协议的53,113,137,139,445端口
  # iptables -A INPUT  -i eth0 -p udp --dport 1026 -j DROP
  禁止从eth0访问本机的udp协议的1026端口
  # iptables -A INPUT  -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP
   禁止从eth0访问本机的tcp协议的1433,4899端口
  # iptables -A INPUT  -p icmp -m limit --limit 10/second -j ACCEPT
   最大处理ping请求和响应每秒不能超过10个

7、通过tcp_wrapper控制vsftpd仅允许172.16.0.0/255.255.0.0网络中的主机访问,但172.16.100.3除外;对所被被拒绝的访问尝试都记录在/var/log/tcp_wrapper.log日志文件中;

[root@centos ~]# ftp 192.168.40.128
Connected to 192.168.40.128 (192.168.40.128).
421 Service not available.
ftp> exit
[root@centos ~]# cat /var/log/tcpwrap.log 
Fri Jun 3 20:12:41 CST 2016 login attempt from 192.168.40.128 to vsftpd@192.168.40.128, vsftpd
[root@centos ~]# cat /etc/hosts.allow 
#See 'man 5 hosts_options' and 'man 5 hosts_access'
#for information on rule syntax.
#See 'man tcpd' for information on tcp_wrappers
    vsftpd: 192.168.40.0/255.255.255.0 EXCEPT 192.168.40.128
[root@centos ~]# cat /etc/hosts.deny 
 vsftpd: ALL :spawn /bin/echo `date` login attempt from %c to %s, %d >> /var/log/tcpwrap.log

原创文章,作者:Snoo,如若转载,请注明出处:http://www.178linux.com/39678

(0)
SnooSnoo
上一篇 2016-08-26 09:11
下一篇 2016-08-26 15:32

相关推荐

  • N26 第二周

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。  [1]mkdir : make directories            mkdir [OPTION]… DIRECTORY… &n…

    Linux干货 2017-02-05
  • Ansible+Corosync+Pacemaker+nfs实现http高可用

    目录: (一)实验环境 (二)准备工作 (三)为node1和node2配置基础配置 (四)使用ansible部署nfs (五)使用ansible部署corosync和pacemaker (六)使用ansible安装crmsh工具 (七)使用crmsh配置http高可用 (八)验证 (九)需要注意的地方 (一)实验环境 1.1、环境拓扑 1.2、所需系统 4台…

    Linux干货 2016-04-29
  • 马哥教育网络21期+第十二周练习博客上

    1、请描述一次完整的http请求处理过程; (1)建立或处理连接:接受请求或拒绝请求 (2)如果接受请求:     并发访问响应模型:         单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应; &…

    Linux干货 2016-10-17
  • N25_第六周作业

    1、复制/etc/rc.d/rc.sysinit文件至tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; :%s@^[[:space:]]\+@#&@g(CentOS7下并未看到这个文件) 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;…

    Linux干货 2017-02-15
  • 程序员的相关笑话(二)

    从前,有一个牧羊人,他有很多的羊。一天他赶着他的那群羊到了一条公路边上。突然,有一辆保时洁急驶过来,上面坐着一个年轻人人,穿着Armani的衣服,和Cerutti的皮鞋,Ray-Ban的太阳眼镜,TAG-Heuer的手表,以前Versace的领带。 他走到牧羊人面前问牧羊人:“如果我能说出你有多少只羊,你能给我一只吗?” 牧羊人看了看他那一大群数都数不过来的…

    Linux干货 2016-07-10
  • vim简单总结

    编辑器种类 常用的文本编辑器有: 行编辑器,如sed,awk,cut等 全屏编辑器,如vi,vim(vi增强版),nano等 vim的模式 命令模式:使用vim filename打开文件后,进入的第一个模式。 直接使用键盘操作文本的编辑 插入模式:INSERT模式 进入:i,从当前光标处开始 进入:I,从当前行行首开始 末行模式:vim内置命令接口。 以:开…

    Linux干货 2016-08-18

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-07 17:26

    博客写得非常的好,32个赞,能进一步的把iptables的原理在细细的阐述一下就更完美了