Linux服务器防火墙Iptables命令使用详解

iptables -A INPUT -s 192.168.109.10 -j DROP拒绝192.168.109.10主机访问本服务器;

注意:-A:添加一条规则,默认是加在最后。

注意:"拒绝给192.168.109.10主机提供服务",最好使用INPUT链。使用PREROUTING,也可以满足要求,但是如果用户的要求是让服务器提供转发功能,添加到PREROUTING链中,"转发"功能也将被拒绝掉。

注意:链名要大写;

注意:-s:指定源地址,可以是IP地址,也可以是网段"192.168.109.10/24";"-s 为空",表示拒绝所有;

注意:-j:指定所需要的操作;

注意:拒绝有两种方式,一种是"REJECT",还有一种是"DROP";DROP是不回应,REJECT是拒绝;

注意:iptables -A INPUT -j DROP,表示拒绝所有。不过加规则的时候,不要将自己的ssh给拒绝掉。

Linux服务器防火墙Iptables命令使用详解_第1张图片

iptables -nvL -t mangle:查看mangle表中的防火墙规则;

注意:-t:指定表名,默认情况下是"fliter"表;

注意:-v:查看详细信息;

pkts:被本机报文所匹配的个数;

prot:放行哪种协议;

opt:额外的选项,--表示没有;

target:处理机制;

注意:选项中"v"和"L"的顺序(V只能在L的前面);

iptables -nvL --line-numbers:查看fliter表中规则的顺序;

注意:--line-numbers:查看指定表中的规则的顺序;

注意:不指定表,默认情况下就是"fliter"表;

注意:表中的规则是有执行顺序的,编号(num)越小,越先执行。只要匹配到结果,就不会往下执行了;

Linux服务器防火墙Iptables命令使用详解_第2张图片

iptables -F:清空"fliter"表中的所有的规则;

注意:-F:表示清空指定表中的所有链中的规则;

iptables -I INPUT -s 1.1.1.1 -j DROP在"fliter"表中的INPUT链中,链首插入一条规则;

注意:-I:表示在指定的链中插入一条规则,可以指定编号;

Linux服务器防火墙Iptables命令使用详解_第3张图片

iptables -R INPUT 1 -s 2.2.2.2 -j REJECT:表示替换第一条规则;

注意:-R,replace,替换指定的规则;

iptables -S:以iptables-save命令格式显示fliter链上的规则;

Linux服务器防火墙Iptables命令使用详解_第4张图片

iptables -A INPUT -s 192.168.109.10 -d 192.168.109.4 -j REJECT:拒绝来自192.168.109.10的主机访问192.168.109.4的ip地址;

注意:-d:指定目标地址,使规则更加详细;

Linux服务器防火墙Iptables命令使用详解_第5张图片

iptables -A INPUT -s 192.168.109.10 -d 192.168.109.4,192.168.109.5 -j REJECT:拒绝192.168.109.10的主机访问192.168.109.4,192.168.109.5这两个ip地址。

注意:一条命令添加两条规则;

注意:源地址也可以使用这种方式,快速添加规则;

注意:该命令在规则中的语义的含义,-s、-d属于并且的关系,即:拒绝源是192.168.109.10的ip,且源是192.168.109.4的访问;而192.168.109.4和192.168.109.5在逻辑上属于或者的关系。

Linux服务器防火墙Iptables命令使用详解_第6张图片

iptables -A INPUT -s 192.168.109.10 -p tcp --dport 22 -j REJECT:拒绝192.168.109.10主机使用tcp协议访问我的所有ip的22端口。

注意:-p:指定协议;可以通过"/etc/protocols"文件查看协议类型;

注意:--dport:指定目标主机的端口号;(拒绝别人链接我。)

注意:--sport:指定源主机的端口号;(拒绝我链接别人。)

注意:此处,注意区分dport和sport;

iptables -A INPUT -s 192.168.109.10 -p icmp -j REJECT:拒绝来自192.168.109.10主机发来的ping包。

注意:icmp协议没有端口号,即不属于tcp也不属于udp。由于icmp协议的特性,这条命令的结果会造成,192.168.109.10无法ping通自己,自己也无法ping通192.168.109.10主机。

注意:如果要想实现别人无法ping通自己,自己可以ping通别人,需要根据state来判断。0表示回应包,8表示请求包。

iptables -A INPUT -s 192.168.109.10 -i eth0 -j REJECT:拒绝192.168.109.10主机访问我的eth0网卡。

注意:-i:加上网卡名,表示报文流入的接口;

注意:-o:加上网卡名,表示报文流出的接口;

iptables -A INPUT ! -s 192.168.109.4 -p tcp --dport 80 -j REJECT:除了192.168.109.4的主机可以访问我的tcp的80端口,其他的主机全部拒绝;

注意:!:表示"非";一般情况下,很少使用该方式。

iptables -A INPUT -s 192.168.109.4 -p icmp --icmp-type 8 -j REJECT:拒绝来自192.168.109.10主机发送来的icmp的请求包。即192.168.109.10主机无法ping通我,我可以ping通它。

注意:icmp协议中,ping通需要满足两个条件,首先源主机向目标主机发送一个请求包(8),目标主机收到之后,便会返回一个回应包(0)。

注意:-p:指定协议;

注意:--icmp-type:指定ping包的类型。(code可以省略;)

iptables -A INPUT -s 192.168.109.10 -p tcp -m multiport --dports 20:22,80 -j REJECT:拒绝来自192.168.109.10主机发送来的访问我的20-22,80端口的包。

注意:-m:后面跟模块名,multiport:以离散形式表示的多端口(最多可以跟15个端口);

注意:--dports:目标端口是多个端口;

注意:使用samba服务测试多端口的话,可能存在问题。想要抓包测试的话,可以使用"tcpdump -i eth0 -nn host 192.168.109.4";

iptables -A INPUT -m iprange --src-range 192.168.109.1-192.168.109.10 -j REJECT:拒绝192.168.109.1~192.168.109.10范围内的所有主机的访问。

注意:iprange:ip范围的模块;

注意:--src-range:源地址范围;

注意:--dsc-range:目标地址的范围;

Linux服务器防火墙Iptables命令使用详解_第7张图片

iptables -A INPUT -m mac --mac-source 00:0c:29:2f:b1:d6 -j REJECT:拒绝该mac地址的主机访问本主机的资源。

注意:mac:mac地址模块;

注意:--mac-source:源主机的mac地址;

iptables -A OUTPUT -p tcp -m string --algo bm --string "han" -j REJECT:拒绝所有主机访问访问我的有"han"字符串的报文。

注意:string:字符串模块;

注意:--algo:指定匹配算法,bm、kmp算法,两个随便选一个;

注意:--string:指定要匹配的字符串;

注意:--from offset:开始偏移,--to offset:结束偏移;

注意:添加的是OUTPUT链;

iptables -F OUTPUT:清空OUTPUT链中的规则;

iptables -A INPUT -m time --weekdays 1,2,3,4,5 --timestart 9:00 --timestop 10:00 -j REJECT:拒绝所有的主机在周一到周五的九点~十点之间,访问本主机的所有资源;

注意:time:时间模块;

注意:--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--timestart hh:mm[:ss] 时间

--timestop hh:mm[:ss]

--monthdays day[,day...] 每个月的几号

--weekdays day[,day...] 星期几

注意:centos7中,使用的是UTC时间(北京时间转化成UTC时间是减8);centos6中使用的是本地时间;

Linux服务器防火墙Iptables命令使用详解_第8张图片

iptables -A INPUT -m connlimit --connlimit-above 2 -j REJECT:并发连接的数量大于两条的时候,就拒绝;

注意:connlimit:并发连接数量的模块;

注意:--connlimit-upto n:连接的数量小于等于n时匹配;

注意:--connlimit-above n:连接的数量大于n时匹配;

注意:可以使用ssh服务测试;

iptables -A INPUT -p icmp -m limit --limit 10/minute --limit-burst 5 -j ACCEPT:对于icmp协议,ping通5个包后,便会以每分钟接收十个的速度匹配。

注意:--limit-burst 5:达到5个之后,便会限制速度;

注意:--limit 10/minute:以每分钟通过10个的速度匹配;

注意:需要"iptables -A INPUT -p icmp -j REJECT"配合使用。

Linux服务器防火墙Iptables命令使用详解_第9张图片

iptables -N ACCOUNT:在"fliter表中,"创建一个自定义链,命名为ACCOUNT;

注意:-N:创建一条链;建议,将一些常用的规则放在自定义的链中,当使用的时候,将自定义的链关联到INPUT链中。

注意:可以将自定义链的操作,理解为函数的声明。将关联操作,理解为函数的调用;

iptables -A ACCOUNT -s 192.168.109.10,192.168.109.220 -j REJECT:在自定义链ACCOUNT中添加一条规则;

iptables -D INPUT 2:删除INPUT链中的第二条;

iptables -A INPUT -j ACCOUNT:将ACCOUNT链关联到INPUT链中;

iptables -F ACCOUNT:清空"fliter"表中的ACCOUNT链中的规则;

iptables -X ACCOUNT:删除"fliter"表中ACCOUNRT链;

注意:-X:删除指定的自定义的链

Linux服务器防火墙Iptables命令使用详解_第10张图片

iptables -A INPUT -p icmp -m state --state NEW -j REJECT:拒绝使用icmp第一次连接的请求包;

注意:state:state模块;

注意:NEW:第一连接(注意此处并不是三次握手中的状态);

iptables -A INPUT -s 192.168.109.10 -j LOG --log-prefix "FROM .10~~":当192.168.109.10主机访问我时,将他记录到/var/log/messige日志文件中,并且,日志中的记录的前缀的"FROM .10~~"

注意:LOG,记录日志的target;

注意:--log-prefix:定义日志文件中的记录的前缀;

Linux服务器防火墙Iptables命令使用详解_第11张图片

iptables -A FORWARD -s 192.168.109.4/24 -d 172.17.253.120/16 -m state --state NEW -j ACCEPT:在FORWARD表中添加一条规则,当源192.168.109.0网段中的主机,目标是172.17.0.0网段中的主机时,状态是NEW(第一条连接)时,就允许连接;

iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT:对于状态是ESTABLISHED的连接,允许通过。

iptables -A FORWARD -j REJECT:拒绝所有连接;

以上三条规则结合起来,可以实现允许192.168.109.0网段中的主机ping通172.17.0.0的主机,但是反过来,ping不通。实现网络防火墙的功能。

可以通过实验来验证:

四台机器,两台192的地址(A、B),一台172的地址(D),还有一台充当路由器(C),既有172的地址,又有192的地址。设置好四台主机的路由表,并开启C主机的路由转发功能。然后,执行iptables的命令,添加规则,即可实现功能。

Linux服务器防火墙Iptables命令使用详解_第12张图片

iptables -t nat -R POSTROUTING 1 -s 192.168.109.0/24 -j SNAT --to-source 172.17.250.111:在nat表中的POSTROUTING链中,添加一策略,当收到192.168.109.0/24网段的主机访问的目标地址是任意地址的时候,就将该包的源地址改成172.17.250.111,发送。(SNAT)

注意:要保证防火墙主机上的路由表,有到达目标地址的路径。

注意:实验中的C主机上,执行了该规则后,A主机通过C主机,到达C主机的POSTROUTING链的时候,将包的源地址改成C主机的公网地址,然后,发送给D主机。实验的时候,将D主机上的默认路由删掉。确保返回的包是将C主机的公网地址,作为目标地址的。

注意:可以在D主机上,安装一个httpd服务,A访问D之后,通过查看日志(/var/log/httpd/access_log),来验证结果。

Linux服务器防火墙Iptables命令使用详解_第13张图片

iptables -t nat -A PREROUTING -d 172.17.250.111 -dport 80 -j DNAT --to-destination 192.168.109.4:8080:当访问172.17.250.111主机的80端口的时候,将目标端口改成192.168.109.4主机的8080端口。(DNAT)

注意:将192.168.109.4主机上的httpd服务监听的端口改成8080;

Linux服务器防火墙Iptables命令使用详解_第14张图片

你可能感兴趣的:(运维)