- vừa được xem lúc

Khai báo rule FirewallD với Bot Telegram sử dụng Python

0 0 26

Người đăng: Lê Anh

Theo Viblo Asia

Với các bạn sử dung hệ điều hành Centos 7 thì không còn xa lạ khái niệm FirewallD, nó là một giải pháp tường lửa mạnh mẽ được cài đặt mặc định trên RHEL 7 và Centos 7 nhằm thay thế Iptables. FirewallD sử dụng "zone" và "services" thay vì "chain" và "rule" trong Iptables.

Ở bài viết này mình sẽ không đi sâu về FirewallD mà sẽ hướng dẫn các bạn viết một con Bot Telegram đơn giản để thực hiện việc khai báo rule kết nối trên FirewallD.

Để khai báo rule kết nối trên server ta cần chạy các lệnh:

firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="115.146.126.xxx/32" port protocol="tcp" port="xxx" accept'
firewall-cmd --reload

Bài toán đặt ra là Bot Telegram sẽ nhận 2 giá trị addressport mà chúng ta nhập vào và thực hiện 2 lệnh trên.

Bước 1: Chuẩn bị môi trường

  • Tạo Bot Telegram, mình đã có một bài viết hướng dẫn ở bài trước link
  • Install môi trường python-telegram-bot (ở đây mình đã cài sẵn môi trường python3.7 trên server)
pip3.7 install python-telegram-bot

Bước 2: Code bot xử lý khai báo rule kết nối trên Firewalld

Tạo một file bot_anhln.py với nội dung như dưới

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# pip3.7 install python-telegram-bot import os
import logging
from telegram import Update, ForceReply
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext # Enable Loging INFO/DEBUG
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.DEBUG) logger = logging.getLogger(__name__) def error(update, context): """Log Errors caused by Updates.""" logger.warning('Update "%s" caused error "%s"', update, context.error) def firewalld_add_source_ip_port(update, context): firewalld1 = '''firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="'''+str(context.args[0])+'''/32" port protocol="tcp" port="'''+str(context.args[1])+'''" accept'''+"'" print(firewalld1) firewalld2= "firewall-cmd --reload" os.system(firewalld1) os.system(firewalld2) update.message.reply_text('Server Dev: 115.146.126.xx add firewalld Ok') def main(): """Start the bot.""" # Create the Updater and pass it your bot's token. # Make sure to set use_context=True to use the new context based callbacks # Post version 12 this will no longer be necessary updater = Updater("{Token Telegram}", use_context=True) # Get the dispatcher to register handlers dp = updater.dispatcher # on different commands - answer in Telegram dp.add_handler(CommandHandler("firewalld_add_source_ip_port", firewalld_add_source_ip_port)) # log all errors dp.add_error_handler(error) # Start the Bot updater.start_polling() # Run the bot until you press Ctrl-C or the process receives SIGINT, # SIGTERM or SIGABRT. This should be used most of the time, since # start_polling() is non-blocking and will stop the bot gracefully. updater.idle() if __name__ == '__main__': main()

Trên đoạn code trên:

  • Mình đã tạo 1 hàm firewalld_add_source_ip_port xử lý việc người dùng nhập vào 2 giá trị source ip và port cần khai báo, trong bot telegram bạn sử dụng context.args[i] để get từng giá trị người dùng nhập vào.
  • Sau đó mình dùng os.system trong python để thực thi các lệnh trên linux.
  • Và dùng message.reply_text để thông báo lại khi đã thực hiện khai báo xong rule kết nối.

Vậy là ta đã hoàn thành việc tạo một bot đơn giản để khai báo FirewallD, mỗi khi người dùng yêu cầu khai báo kết nối mà bạn đang không ngồi làm việc trên máy tính vẫn có thể thực hiện việc khai báo bình thường 😄

Bước 3: Tận hưởng thành quả thôi

Mình sẽ để nohup để chạy bot

nohup python3.7 bot_anhln.py &

Bình luận

Bài viết tương tự

- vừa được xem lúc

Thao tác với File trong Python

Python cung cấp các chức năng cơ bản và phương thức cần thiết để thao tác các file. Bài viết này tôi xin giới thiệu những thao tác cơ bản nhất với file trong Python.

0 0 63

- vừa được xem lúc

Tập tành crawl dữ liệu với Scrapy Framework

Lời mở đầu. Chào mọi người, mấy hôm nay mình có tìm hiểu được 1 chút về Scrapy nên muốn viết vài dòng để xem mình đã học được những gì và làm 1 demo nho nhỏ.

0 0 166

- vừa được xem lúc

Sử dụng Misoca API (oauth2) với Python

Với bài viết này giúp chúng ta có thể nắm được. ・Tìm hiểu cách xử lý API misoca bằng Python.

0 0 49

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 3)

Tiếp tục phần 2 của series Pandas DataFrame nào. Let's go!!. Ở phần trước, các bạn đã biết được cách lấy dữ liệu một row hoặc column trong Pandas DataFame rồi phải không nào. 6 Hoc.

0 0 63

- vừa được xem lúc

Lập trình socket bằng Python

Socket là gì. Một chức năng khác của socket là giúp các tầng TCP hoặc TCP Layer định danh ứng dụng mà dữ liệu sẽ được gửi tới thông qua sự ràng buộc với một cổng port (thể hiện là một con số cụ thể), từ đó tiến hành kết nối giữa client và server.

0 0 79

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 2)

Nào, chúng ta cùng đến với phần 2 của series Pandas DataFrame. Truy xuất Labels và Data. Bạn đã biết cách khởi tạo 1 DataFrame của mình, và giờ bạn có thể truy xuất thông tin từ đó. Với Pandas, bạn có thể thực hiện các thao tác sau:.

0 0 95