3.9、常见端口端口:
- 20 ftp数据端口
- 21 FTP(文件传输)协议代理服务器常用端口号
- 22 ssh端口
- 23 Telnet(远程登录)协议代理服务器常用端口号
- 25 邮件服务端口
- 80/8080/3128/8081/9098 HTTP协议代理服务器常用端口号
- 1080 SOCKS代理协议服务器常用端口号
3.10、基本、常用的匹配条件
- -s匹配源地址、-d匹配目标地址,可以同时指定多个源地址,每个IP间用,隔开也可以指定一个网段
- [root@localhost ~]# iptables -t filter -I INPUT -s 192.168.108.3,192.168.108.4 -j ACCEPT
- [root@localhost ~]# iptables -t filter -I INPUT -d 192.168.108.3,192.168.108.4 -j ACCEPT
- [root@localhost ~]# iptables -t filter -I INPUT -s 192.168.108.0/24 -j ACCEPT
- [root@localhost ~]# iptables -t filter -I INPUT -d 192.168.108.0/24 -j ACCEPT
- [root@localhost ~]# iptables -t filter -I INPUT ! -s 192.168.108.0/24 -j ACCEPT
- [root@localhost ~]# iptables -t filter -I INPUT ! -d 192.168.108.0/24 -j ACCEPT
- -i匹配从哪个网卡接口流入本机,因为匹配条件只是用于匹配报文流入的网卡,所以在OUTPUT链与POSTROUTING链中不能使用
- iptables -t filter -I INPUT -p icmp -i ens33 -j DROP
- -o匹配报文将要从哪个网卡接口流出本机,在INPUT链与PREROUTING链中不能使用
- iptables -t filter -I OUTPUT -P icmp -o ens33 -j DROP
- 使用冒号指定一个连续的端口范围
- iptables -t filter -I OUTPUT -d 192.168.108.3 -p tcp -m tcp --sport 22:80 -j REJECT
- iptables -t filter -I OUTPUT -d 192.168.108.3 -p tcp -m tcp --sport :80 -j REJECT
- iptables -t filter -I OUTPUT -d 192.168.108.3 -p tcp -m tcp --sport 22: -j REJECT
3.11、iptables之forward转发
实验原始环境
-
主机A
-
IP(ens33):192.168.108.3
-
GATEWAY(ens33):192.168.108.2
-
网卡模式(ens33):NET
-
主机B
-
IP(eth0):192.168.108.5
IP(eth1):192.168.163.5 -
GATEWAY(eth0):192.168.108.2
GATEWAY(eth1):192.168.163.1 -
网卡模式(eth0):NET
网卡模式(eth1):host-only -
主机C
-
IP(ens33):192.168.163.4
-
GATEWAY(ens33):192.168.163.5
-
网卡模式(ens33):host-only
内网网段:192.168.163.0
外网网段:192.168.108.0 -
实验1
-
在主机A上新增一条路由,主机A访问192.168.163.0网段都发送给主机B的eth0往卡上
[root@localhost ~]# route add -net 192.168.163.0/24 gw 192.168.108.5 -
查看新增路由规则
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.108.2 0.0.0.0 UG 100 0 0 ens33
192.168.108.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.163.0 192.168.108.5 255.255.255.0 UG 0 0 0 ens33 -
[root@localhost ~]# ping 192.168.163.5
PING 192.168.163.5 (192.168.163.5) 56(84) bytes of data.
64 bytes from 192.168.163.5: icmp_seq=1 ttl=64 time=0.278 ms
64 bytes from 192.168.163.5: icmp_seq=2 ttl=64 time=0.184 ms
64 bytes from 192.168.163.5: icmp_seq=3 ttl=64 time=0.218 ms
^C
— 192.168.163.5 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.184/0.226/0.278/0.042 ms -
[root@localhost ~]# ping 192.168.163.4
PING 192.168.163.4(192.168.163.4) 56(84) bytes of data.
发现192.168.163.5可以ping通,而192.168.163.4ping不通 -
临时打开主机B的转发功能
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
1 -
使转发功能永久生效
[root@CentOS6 ~]# vi /etc/sysctl.conf
将net.ipv4.ip_forward = 0改为net.ipv4.ip_forward = 1 -
[root@localhost ~]# ping 192.168.163.4
PING 192.168.163.4 (192.168.163.4) 56(84) bytes of data.
64 bytes from 192.168.163.4: icmp_seq=1 ttl=64 time=0.278 ms
64 bytes from 192.168.163.4: icmp_seq=2 ttl=64 time=0.184 ms
64 bytes from 192.168.163.4: icmp_seq=3 ttl=64 time=0.218 ms
^C
— 192.168.163.4 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.184/0.226/0.278/0.042 ms -
实验2
-
打开主机A和主机C的apache服务
-
主机A上输入
[root@localhost htdocs]# echo “I am a outnet”>/usr/local/apache/htdocs/index.html
[root@localhost htdocs]# cat index.html
I am a outnet
[root@localhost htdocs]# systemctl status httpd
● httpd.service - (null)
Loaded: loaded (/etc/rc.d/init.d/httpd; bad; vendor preset: disabled)
Active: active (running) … -
主机B上输入
[root@localhost htdocs]# echo “I am a innet”>/usr/local/apache/htdocs/index.html
[root@localhost htdocs]# cat index.html
I am a innet
[root@localhost htdocs]# systemctl status httpd
● httpd.service - (null)
Loaded: loaded (/etc/rc.d/init.d/httpd; bad; vendor preset: disabled)
Active: active (running) … -
配置主机C的访问规则,允许内网主机C可以访问外网主机A的web服务,并且有防火墙后需要考虑的是双向通讯。
[root@localhost ~]# iptables -I FORWARD -s 192.168.163.0/24 -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -I FORWARD -d 192.168.163.0/24 -p tcp --sport 80 -j ACCEPT
[root@localhost ~]# curl 192.168.108.3
I am a outnet -
配置主机A同理
-
实验3
-
使用state模块,这样只需考虑请求方即可(清除之前所加规则)
[root@localhost ~]# iptables -I FORWARD -s 192.168.163.0/24 -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@localhost ~]# curl 192.168.108.3
I am a outnet -
实验总结
-
使用iptables作为防火墙,iptables所在主机开启核心转发功能,以便能够转发报文
-
使用cat /proc/sys/net/ipv4/ip_forward命令查看当前主机是否已经开启了核心转发功能,0表示未开启,1表示已开启
-
临时开启核心转发功能,重启网络配置后失效
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1 -
永久开启核心转发功能
vim /etc/sysctl.conf
将net.ipv4.ip_forward设置为1
3.12、创建自定义
- 创建自定义IN_WEB
[root@localhost ~]# iptables -t filter -N IN_WEB - 自定义链添加规则,拒绝来自192.168.108.3/5的请求
[root@localhost ~]# iptables -t filter -I IN_WEB -s 192.168.108.3 -j REJECT
[root@localhost ~]# iptables -I IN_WEB -s 192.168.108.5 -j REJECT - 在默认链中引用自定义链
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j IN_WEB - 此时通过192.168.108.3访问apache,已无法访问
- 将自定义链IN_WEB重命名为WEB
[root@localhost ~]# iptables -E IN_WEB WEB - 删除引用计数为0并且不包含任何规则的WEB链,删除自定义链需满足两个条件,自定义链没有被引用,自定义链中没有任何规则
[root@localhost ~]# iptables -X WEB