一、安装iptables服务

1、查看系统是否安装了iptables防火墙

[root@localhost ~]# iptables -V

2、安装 iptables 防火墙

3、查看防火墙规则列表

[root@localhost ~]# iptables --list
[root@localhost ~]# iptables --list-rules

二、开启、关闭、重启 iptables 服务

1、通过 service 操作防火墙

[root@localhost ~]# service iptables stop         # 关闭防火墙(清空规则)
[root@localhost ~]# service iptables start # 启动防火墙(读取配置文件里的规则)
[root@localhost ~]# service iptables restart # 重启防火墙(清空规则读取配置文件里规则)
[root@localhost ~]# service iptables save # 保存防火墙(规则保存到配置文件中)
[root@localhost ~]# service iptables status # 查看防火墙启动状态(查看当前使用的规则)
[root@localhost ~]# service iptables reload # 重新加载相关配置,效果和restart一样,很多新的系统中一般不用了。

三、规则设定

1、开放端口(这种情况下所有ip均能访问3120端口,即对外暴露3120端口了)

[root@localhost ~] iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 3120 -j ACCEPT   # 开启防火墙 3120 端口,方式一
[root@localhost ~] iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 3120 -j ACCEPT # 开启防火墙 3120 端口,方式二

2、关闭端口

[root@localhost ~] iptables -D INPUT -p tcp -m state --state NEW -m tcp --dport 3120 -j ACCEPT   # 删除防火墙 3120 端口。方式一
[root@localhost ~] iptables -nv --line-number

3、屏蔽指定IP:拒绝指定IP,所有端口都不能访问

[root@localhost ~]# iptables -I INPUT -s 28.16.62.45 -j DROP      # 添加屏蔽IP,方式一
[root@localhost ~]# iptables -A INPUT -s 28.16.62.45 -j DROP # 添加屏蔽IP,方式二
[root@localhost ~]# iptables -D INPUT -s 28.16.62.45 -j DROP # 删除屏蔽IP

4、放行指定IP:允许指定IP,所有端口都可以访问

[root@localhost ~]# iptables -I INPUT -s 28.16.62.45 -j ACCEPT      # 添加放行IP,方式一
[root@localhost ~]# iptables -A INPUT -s 28.16.62.45 -j ACCEPT # 添加放行IP,方式二
[root@localhost ~]# iptables -D INPUT -s 28.16.62.45 -j ACCEPT # 删除放行IP

5、允许指定 IP 访问指定端口

iptables -I INPUT -s 28.16.62.45 -p tcp --dport 3120 -j ACCEPT
iptables -D INPUT -s 28.16.62.45 -p tcp --dport 3120 -j ACCEPT

6、拒绝指定 IP 访问指定端口

iptables -I INPUT -s 28.16.62.45 -p tcp --dport 3120 -j DROP
iptables -D INPUT -s 28.16.62.45 -p tcp --dport 3120 -j DROP

7、重启后生效

[root@localhost ~]# chkconfig iptables off   # 永久关闭防火墙
[root@localhost ~]# chkconfig iptables on # 永久关闭后重启

8、ping设置

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT    # 允许PING设置
[root@localhost ~]# iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP # 禁止PING设置

四、端口转发

1、开启系统的转发功能,开启内核 ip_forward 转发。sysctl配置ipv4转发

[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1          # 方式一:临时生效

[root@localhost ~]# vim /etc/sysctl.conf                     # 方式二:永久生效,更改net.ipv4.ip_forward的值为1:net.ipv4.ip_forward = 1。默认值为0
[root@localhost ~]# sysctl -p # 使用命令让配置马上生效
[root@localhost ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p /etc/sysctl.conf [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward # 方式三

2、将本机的端口转发到本机端口,这种情况不需要第一步

[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 88 -j REDIRECT --to-port 3120      # 添加端口转发
[root@localhost ~]# iptables -t nat -D PREROUTING -p tcp --dport 88 -j REDIRECT --to-port 3120 # 删除端口转发

3、将本机的端口转发到其他机器,这种情况就需要第一步

[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport This_Server_Port -j DNAT --to-destination Remote_Server_IP:Remote_Server_Port
[root@localhost ~]# iptables -t nat -A POSTROUTING -p tcp -d Remote_Server_IP --dport Remote_Server_Port -j SNAT --to-source This_Server_IP [root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 8006 -j DNAT --to-destination 49.232.57.79:3120 # 第一步:访问8006端口的数据包转发到49.232.57.79上的3120端口
[root@localhost ~]# iptables -t nat -A POSTROUTING -j MASQUERADE # 第二步:任选其一,一般选这个就行
[root@localhost ~]# iptables -t nat -A POSTROUTING -p tcp -d 49.232.57.79 --dport 3120 -j SNAT --to-source 172.16.16.10 # 第二步:任选其一

4、如果上面操作完还不行的话,就放行转发命令。这一步一般不需要。

[root@localhost ~]# iptables -I FORWARD -i eth0 -j ACCEPT                     # 放行Forward的数据包,其中eth0改为实际使用网卡(一般是eth0)
[root@localhost ~]# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 开启网卡混杂模式(允许任意流向的数据包) [root@localhost ~]# iptables -D FORWARD -i eth0 -j ACCEPT # 删除第一条
[root@localhost ~]# iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE # 删除第二条

5、抓包测试

# 方式一
[root@localhost ~]# tcpdump -S -s0 -nn -i any port 8006 # 本地端抓包,可以不用管这条命令
[root@localhost ~]# tcpdump -S -nn -i any port 8006 or port 3120 # 在中间服务器上执行这条命令
[root@localhost ~]# tcpdump -S -nn -i any port 3120 # 在目的服务器上执行这条命令 # 方式二:-i 选项指定网卡,-w 选项保存结果到文件当中。
[root@localhost ~]# tcpdump -i eth0 port 3120 or 8006 -w result.cap

6、名词解释

  • DNAT是destination networkaddress translation的缩写,即目标网络地址转换。
  • SNAT是source networkaddress translation的缩写,即源地址目标转换。
  • MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat。

五、配置文件:/etc/sysconfig/iptables

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0] # 开启防火墙端口80、443、3306
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 39000:40000 -j ACCEPT # 允许PING设置
-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT

六、链的基本操作

# 清除预设表filter中所有规则链中的规则。
[root@localhost ~]# iptables -F
# 清除预设表filter中使用者自定链中的规则。
[root@localhost ~]# iptables -X
[root@localhost ~]# iptables -Z # 设置链的默认策略。一般有两种方法。
# 首先允许所有的包,然后再禁止有危险的包通过放火墙。
[root@localhost ~]# iptables -P INPUT ACCEPT
[root@localhost ~]# iptables -P OUTPUT ACCEPT
[root@localhost ~]# iptables -P FORWARD ACCEPT
# 首先禁止所有的包,然后根据需要的服务允许特定的包通过防火墙。
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -P OUTPUT DROP
[root@localhost ~]# iptables -P FORWARD DROP # 列出表/链中的所有规则。默认只列出filter表。
[root@localhost ~]# iptables -L
https://www.cnblogs.com/blogforly/p/5997287.html
https://www.cnblogs.com/kevingrace/p/6265113.html

七、通过 ipset 来封禁IP

[root@localhost ~]# ipset list
[root@localhost ~]# ipset create allset hash:net [root@localhost ~]# ipset add allset 145.201.56.109
[root@localhost ~]# ipset del allset 145.201.56.109 [root@localhost ~]# iptables -I INPUT -m set --match-set allset src -p tcp -j DROP
[root@localhost ~]# iptables -D INPUT -m set --match-set allset src -p tcp -j DROP

https://www.cnblogs.com/zhink/articles/9171834.html:跟ufw使用ipset差不多

https://www.moerats.com/archives/684/

https://blog.csdn.net/wangshui898/article/details/90513792

https://www.centos.bz/2017/07/iptables-port-redirect/

https://blog.csdn.net/e_wsq/article/details/79933232

https://www.cnblogs.com/carry00/p/10237723.html

Linux—系统关机命令详解的更多相关文章

  1. LINUX系统VMSTAT命令详解

    linux系统vmstat命令详解 [转自 https://www.cnblogs.com/wensiyang0916/p/6514820.html] vmstat 1    1表示每秒采集一次vms ...

  2. Linux开关机命令详解

    Linux系统的开关机主要涉及(shutdown,reboot,poweroff,halt,init)这几条命令,本文对其使用详解如下: 一.命令简介 shutdown,poweroff,reboot ...

  3. linux系统date命令详解

    Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟, ...

  4. Linux系统监控命令详解

    1. top命令 top命令经常用来监控Linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解. 输 ...

  5. <Linux系统hostname命令详解>

    hostname命令的用法的小知识我们都知道hostname命令是查看主机名和修改主机名的. [root@apache ~]# hostname  //查看本机的主机名apache.example.c ...

  6. Linux系统minicom命令详解

    minicom 功能说明:调制解调器通信程序 语 法:minicom [-8lmMostz][-a<on或0ff>][-c<on或off>][-C<取文件>][-d ...

  7. linux系统find命令详解+xargs命令 、exec命令

    find 作用:查找文件 1.name: 指定文件名 例子1. 找到以du结尾的文件 ╭─root@localhost.localdomain ~ ╰─➤ find / -name "*du ...

  8. linux系统iostat命令详解

    iostat  -k 3 5  (以KB为单位,每3秒统计一次,共统计5次) • avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值    %user    用户空 ...

  9. Linux下chkconfig命令详解(转)

    Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...

随机推荐

  1. echarts玩转图表之矩形树图

    前言 这是第一次用makedown编辑器写文章,感觉像一件利器,排版美观而且效率飙升.进入正题 Echart官网文档地址 针对于矩形树图api配置项链接 1. 完全从数据定义图形 $.get( &qu ...

  2. 034.认证方式 | 基本认证 、Token认证、 AK/SK认证

    认证方式 关于认证: https://www.cnblogs.com/badboyh2o/p/11068779.html https://www.cnblogs.com/badboyh2o/p/110 ...

  3. Python:判断列表中含有字符串且组成新的列表打印输出-Dotest董浩

    '''题一:判断列表中含有字符串且组成新的列表打印输出知识点:列表.列表的增删改查.for循环.if判断'''#@Author:Dotest软件测试#@QQ:1274057839names = ['D ...

  4. wbr 标签实现连续英文字符的精准换行你知道吗?

    1.一般情况下的换行: word-break:break-all或者word-wrap:break-word <p>大家<wbr>想要<wbr>实现<wbr& ...

  5. mysql 经典练习题上

    MY SQL 三张表 emp 表, 字段empno, ename, job, mgr, hiredate, sal, comm, deptno dept表 , 字段 deptno, dname, lo ...

  6. hdu6464 线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=6464 题意 一个空序列,q次操作,一种是往序列后插入x个y,另一种是查询序列中第x小到第y小的数字之和 题解 线 ...

  7. 利用Python几行代码批量生成验证码

    几行代码批量生成authCode 整体步骤: 1.创建图片 2.创建画笔 3.在图片上生成点 4.在图片上画线 5.在图片在画圆 6.在图片在写文本 7.在图片在生成指定字体的文本 代码奉上 #!/u ...

  8. Selenium+java - 使用csv文件做数据驱动

    前言 早期我们使用TestNG 来做数据驱动进行测试,测试数据是写在测试用例脚本中.这会使得测试脚本的维护工作量很大.因此我们可以将测试的数据和脚本分开. 而我们经常使用会使用csv文件来做为导出数据 ...

  9. ASP.NET ---- Repeater 遍历出省市

    Repeater  控件可以数据库中的数据,一条条的查找出,不需要后端在进行遍历输出了, Repeater必须使用的是Itemtemplate,其它的类型模板按需添加,主要记住Itemtemplate ...

  10. 前端之javascript1

    js介绍和js引入页面 学习前端脚本语言javascript的基本概念.页面引入方式.获取页面元素及操作元素属性的技巧,学习函数的基本定义方法和使用方法. JavaScript介绍 JavaScrip ...