iptables的基础操作

iptables的基础操作

一、查看防火墙操作

iptables -L -n #这里没有加-t指定表,所以默认就是查看filter表。这里-L后面没有跟链名称,所以默认就是查看filter表上的所有链设置。加-n的作用前面已经说了,一般是配合使用的

iptables -L INPUT -n #这里就是只查看filter表的INPUT链的规则。一般如果是指常规的防火墙设置,不会再别的表上面定义链的。

#iptables -L -n -t nat #这里就是用-t指定表名,查看nat表上面的所有链设置。

#iptables -L -n -v #用-v显示更详细的信息,会显示数据包啊,数据量啊等。

#iptables -V #查看iptables的版本

#iptables -L -n --line-numbe #显示规则的序列号,方便我们删除和插入

#iptables -S #打印默认filter表中的所有链规则,# iptables -S -t nat 就是打印nat表的所有链规则了。

#iptables -S INPUT #打印INPUT链的规则,这个-S的目的主要是如果你不是想将添加的所有规则都保存起来的话,可以用这种方式打印出规则,然后自己手工将规则粘贴到配置文件里面去。

#service iptables status #查看防火墙的状态,如果是存活状态就会把所有的表和所有的链都显示出来

#cat /etc/sysconfig/iptables #这是iptables的配置文件,设置的规则如果想要重启依旧有效的话,就要执行# iptables-save>/etc/sysconfig/iptables,或者#service iptables save 就会保存到此文件中。

二、清空防火墙设置

#iptables -F #这步我们一般在初始设置iptables的时候设置,如果是云主机什么的在线机器要慎重操作,因为如果限制了IP的SSH连接,一清空所有设置的规则,会导致连接断开。清空指定表的规则。

#iptables -X #删除指定表中的自定义规则链,默认是filter表,如果要清空别的表的自定义规则链用-t指定表名。一般也不会涉及到这步操作。

#iptables -Z #这个是将所有表的所有链的字节和数据包计数器清零。一般也是紧跟着iptables -F做的一步操作。

三、禁ping设置:

#iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP #-p 指定icmp协议,--icmp-type 8是Echo request——回显请求(Ping请求),也可以理解为0为响应报文,8为请求报文,-s 0/0是指定原地址为0.0.0.0/0,-j DROP 是不给予应答

#iptables -A INPUT -p icmp --icmp-type echo-request -s 0/0 -j DROP #这样也可以,跟上面一样,只不过是把8变为了echo-request

#echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all #当然这种临时生效的方法也可以,#echo net.ipv4.icmp_echo_ignore_all=1 >>/etc/sysctl.conf 这是永久生效的方法

允许某个IP能够ping我们的主机:

#iptables -I INPUT -p icmp --icmp-type 8 -s 192.168.1.102 -j ACCEPT #这里主要注意这个-I,这是在规则的上面添加也就是添加到禁止所有IPping我们主机规则的上方,不能用-A。因为防火墙匹配规则是自上而下的过程,如果用-A添加到尾部的话,当匹配到禁止所有的主机ping本主机的规则后,其他的允许ping的规则也就不生效了。-j ACCEPT就是允许通过的意思

四、删除一条规则

#iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT #比如我添加了这样一条规则,我现在想删除这条规则。

#iptables -D INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT #这是一种方法,-D后面跟链名称,然后是我们的匹配条件以及处理结果

#iptables -L -n --line-number #先来查看,发现上面添加的规则在INPUT链的序列号为4的位置。当然也可以用# iptables -L -n --line。

#iptables -D INPUT 4 #显然这种-D后面指定规则链名称,然后指定规则所在的序列号,删除的方式更好一点

指定序列号添加:

#iptables -I INPUT 2 -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT #这样就可以将我们的这条规则插入到INPUT链的序列号为2的位置

指定序列号修改(这里最好是全命令的替换,用到的模块少还好,如果用到了很多其他模块,如果这里只是填写了需要替换的内容,而不需要替换的内容没有填写的话,哪些不应该被替换的规则也会变为空。所以替换不仅要将替换后的内容写上,哪些不需要替换的也要写上,要全规则命令行。):

#iptables -R INPUT 2 -j DROP #这里就是指定将序列号为2的规则,所在的位置为INPUT链,-R就是替换,-j DROP就是要改变成的内容

#iptables -R INPUT 2 -s 192.168.1.0/32 -j ACCEPT #通过和上面两个例子可以看出,就是让我们重新指定的规则或者处理方法去替换旧的规则或者内容

五、稍微正规点的iptables设置

上面已经说过了iptables的增删改查,我们主要的还是用到的一般是禁止所有的INPUT,但是在此规则之上会放开我们指定的INPUT规则进来,严格点的话OUTPUT规则也会做限制

#cat /etc/sysconfig/iptables #我这里就是对icmp的请求做了限制,对INPUT和OUTPUT的请求也做了严格的限制
#ptables-save v1.4.7 on Wed Jan 13 00:12:06 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.0/24 --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.2/32,192.168.1.3/32 --dport 873 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.4/32 --dport 5666 -j ACCEPT
-A INPUT -p udp -m udp -s 192.168.1.5/32 --dport 161 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.6 --dport 111 -j ACCEPT
-A INPUT -p udp -m udp -s 192.168.1.6 --dport 111 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.7 --dport 30001:30004 -j ACCEPT
-A INPUT -p udp -m udp -s 192.168.1.7 --dport 30001:30004 -j ACCEPT
-A INPUT -p udp -m udp --dport 123 -j ACCEPT
-A INPUT -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -p tcp -m tcp -m state --sport 53 --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p icmp -s 192.168.1.0/24 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
-A INPUT -p tcp -m tcp --dport 873 -j DROP
-A INPUT -p tcp -m tcp --dport 80 -j DROP
-A INPUT -p tcp -m tcp --dport 3306 -j DROP
-A INPUT -p tcp -m tcp --dport 5666 -j DROP
-A INPUT -p tcp -m tcp --dport 143 -j DROP
-A INPUT -p udp -m udp --dport 161 -j DROP
-A OUTPUT -p tcp -m tcp -d 192.168.1.0/24 --sport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 25 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 110 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 143 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 161 -j ACCEPT
-A OUTPUT -p tcp -m tcp -d 192.168.1.4/32 --sport 5666 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 873 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 123 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -d 192.168.1.0/24 -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp -d 192.168.1.6 --sport 111 -j ACCEPT
-A OUTPUT -p udp -m udp -d 192.168.1.6 --sport 111 -j ACCEPT
-A OUTPUT -p tcp -m tcp -d 192.168.1.7 --sport 30001:30004 -j ACCEPT
-A OUTPUT -p udp -m udp -d 192.168.1.7 --sport 30001:30004 -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -p tcp -m tcp -j DROP
-A OUTPUT -p udp -m udp -j DROP
COMMIT

#从上面的规则可以看出,我们基本用到的就是 -p 后面跟tcp或者udp协议,然后就是--sport源端口或者--dport目的端口,还有就是 -s 源IP,-d目的IP,然后IP是可以指定IP段,多IP或者多段的话用逗号隔开,多端口也是用逗号隔开,连续端口范围的话用:来指定。然后就是 -m 后面就是跟我们各种模块了,但是如果不是用到多端口指定模块啊等等的一些其他的复杂点的设置也不用加-m。

六、 练习iptables规则配置命令

1 ssh的设置

通常我们对ssh的限制还是比较严格的,一般机器只会对跳板机或者个别的机器进行ssh开放,一般不会对几个段之类的开放,如果对IP段做设置的话在交换机上面进行ACL的设置会好一点
iptables -A INPUT -s 192.168.1.102 -p tcp --dport 22 -j ACCEPT #我们先设置让我们的电脑能够连接此服务器
iptables -A INPUT -j DROP #然后我们将所有的INPUT请求都给禁止掉
iptables -A OUTPUT -d 192.168.1.102 -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -j DROP #如果还要精细的话应该某个端口的DROP信息直接在某个端口的ACCEPT下方,
这样能快速的匹配到拒绝不能规则自上而下过滤一遍,但是一般设iptables的服务器并发并请求并不会那么大,如可能是比较重要的管理机等,
所以这样设置一般就可以了。

#cat /etc/sysconfig/iptables #查看一下配置文件,文件中多了新添加的两行规则命令
现在测试的话,会发现只有192.168.1.102这个IP能能ssh到我们这台服务器了。

如果更好点的话,应该是将state状态都加入进来。下面是修改的步骤:
iptables -R INPUT 1 -p tcp -s 192.168.1.102 -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -R OUTPUT 1 -p tcp -d 192.168.1.102 -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

2 对80和443端口做限制

有些web服务器我们可能只需要公司内网访问或者指定的一些服务器访问,本身web软件配置文件里面可以设置的,如果要保证文件统一性的话,还是在iptables上面做设置好一点。这个序列号是有讲究的,因为iptables是自上而下搜索,所以最常用的序列号要越小。

iptables -L -n --line-number #首先我们要查看我们设置的所有INPUT或者所有OUTPUT链在哪个位置,我们要将内容插在他们前面。
iptables -I INPUT 2 -p tcp -m iprange --src-range 192.168.1.102-192.168.1.109 -m multiport --destination-ports 80,443 -j ACCEPT
iptables -I OUTPUT 2 -p tcp -m iprange --dst-range 192.168.1.102-192.168.1.109 -m multiport --source-ports 80,443 -j ACCEPT

#上面就是加了一条INPUT和一条OUTPUT。
#首先用到了iprange模块,它就两个功能,--src-range指定源地址的IP范围,--dst-range指定目标地址的IP范围,这样我们如果指定多IP的时候,就不用写多条了。
#multiport然后这个模块是用来指定多端口,或者端口的范围的,如果是逗号分开的多端口,最多是支持15个的,
--destination-ports 80,443,1024:65535如果这样就是目标端口除了80.443以外还有1024端口到65535
#这里没有用-m dports和sports是因为他们如果指定多端口的话,只能指定一个端口范围,而不能指定多个分散的端口。

如果你不想指定IP的范围,只是像指定单纯的某几个IP呢,显然用iprange就不太合适了,用下面的方式:
iptables -I INPUT 2 -p tcp -s 192.168.1.102,192.168.1.109 -m multiport --dports 80,443 -j ACCEPT
iptables -I OUTPUT 2 -p tcp -d 192.168.1.102,192.168.1.109 -m multiport --sports 80,443 -j ACCEPT

#但是用 -s 这种加逗号指定IP的形式,写入到配置文件中会把IP分开,每一条IP是一条内容。

3 关于NFS的防火墙设置
#NFS默认的一些mount端口等是随机的,这里对这些随机端口进行了固定,将其固定为30001-3004.

iptables -I INPUT 4 -p tcp --dport 111 -j ACCEPT
iptables -I INPUT 5 -s 127.0.0.1 -p udp --sport 111 -j ACCEPT
iptables -I INPUT 6 -s 127.0.0.1 -p udp --dport 111 -j ACCEPT
iptables -I OUTPUT 4 -p tcp --dport 111 -j ACCEPT
iptables -I OUTPUT 5 -d 127.0.0.1 -p udp --sport 111 -j ACCEPT
iptables -I OUTPUT 6 -d 127.0.0.1 -p udp --dport 111 -j ACCEPT
iptables -I INPUT 7 -s 192.168.1.109,192.168.1.112 -p tcp -m multiport --dports 2049,30001:30004 -j ACCEPT
iptables -I OUTPUT 7 -d 192.168.1.109,192.168.1.112 -p tcp -m multiport --sports 2049,30001:30004 -j ACCEPT

#当然关于127.0.0.1的开放,也没有必要像上面似得那么麻烦,直接用下面的方法:
iptables -I INPUT 6 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -I OUTPUT 6 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

#当然要觉得sport和dport还要写两条麻烦的话,可以直接下面哪种写法:
iptables -I INPUT 5 -p udp -s 127.0.0.1 -d 127.0.0.1 -m multiport --ports 111 -j ACCEPT
iptables -I OUTPUT 5 -p udp -s 127.0.0.1 -d 127.0.0.1 -m multiport --ports 111 -j ACCEPT

#上面开放tcp的111端口是为了让其他的服务器可以访问RPC的111端口,当然这里也可以指定IP进行限制。

#这里为了测试效果就制定了只允许哪两个IP可以访问nfs并进行挂载,当然nfs配置文件里面也可以进行IP的限制。

转载于:https://blog.51cto.com/chbinmile/2086784

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值